我对 COM 对象反转(Windows 平台)很陌生。我正在尝试在 Windows 8.1 上反转 Internet Explorer,其中子 IE 进程通过 com 与父 IE 进程通信(由于保护模式)。
这是来自 ieframe.dll (类 CShellUIHelper 的一部分)的虚函数的 ASM 片段,它负责 COM 操作(我有 MS 公共符号。)
CShellUIHelper::XX_XX{
..
..
mov eax, [ebp+var_2BC]
lea edx, [ebp+Filename]
mov edi, esp
push edx
push [ebp+var_2AC]
mov esi, [eax]
push ecx ; _DWORD
push eax ; _DWORD
mov esi, [esi+25Ch]
mov ecx, esi ; _DWORD
call ds:___guard_check_icall_fptr
call esi ; call {combase!ObjectStublessClient30+0x5c0
}
这里它使用call esi
指令在最后一行调用 COM 接口方法,实际上是call [esi+025Ch]
. 运行时我发现它实际上调用了 combase!ObjectStublessClient30(x,x)
在这里,我想使用 combase!ObjectStublessClient30() 找到其调用的接口方法名称。
为了找到方法名称,我正在关注这个RE.SE 答案,它看起来非常相似。
但问题是,在这个答案中,接口名称是已知的,即 IShellWindows,但在我的情况下,我不知道接口名称。
我被困在这一点上。所以我的问题是我应该遵循什么路径来找出接口名称和方法名称。?