私はCOMオブジェクトの逆転(Windowsプラットフォーム)が新しくなっています。私は子IEプロセスがcom(保護モードのために)経由で親IEプロセスと通信するWindows 8.1でInternet Explorerを逆転しようとしています。 COM11経由でIE11のIneterprocess通信を理解する
この
はieframe.dll COM操作を担当する(クラスCShellUIHelperのパート)から仮想関数のASMスニペットです(私はパブリックシンボルMSをしました。)そのCOMを呼び出すここで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 + 025ch"である "call esi"命令を使用して、最後の行のインターフェイスメソッドを呼び出します。実行時私は実際にコールコンバートを見つけました!ObjectStublessClient30(x、x)
ここで、combase!ObjectStublessClient30()を使用して、インターフェイスメソッド名を呼び出したいと思います。
私はこのStack Exchange Answerの後ろにあります。これはかなり類似しています。
https://reverseengineering.stackexchange.com/questions/2822/com-interface-methods
しかし、問題はIShellWindowsであることが知られたこの答えインタフェース名で、ですが、私の場合には、私はインターフェイス名を知りません。
私はこの時点で固執しています。ですから、私の質問は、インターフェイス名とメソッド名を見つけるためにどのような道筋を辿るべきかということです。
これをリバースエンジニアリングする方法はありません。 combase.dllで終わったら、実際にプロキシを呼び出すと、COM呼び出しがスレッドセーフな方法で行われます。あなたはまず、使用されている正確なインターフェースを知っていなければなりません。そして、そのインターフェースによって実装されたメソッドを数えます。あなたがインタフェースを知らないなら、あなたは何も知らない。 –
@ HansPassantには、インターフェイスを見つけるために私が従うことができるアプローチはありますか? –
リバースエンジニアリングがもっと必要です。インターフェイスGUIDを識別できるように、CoCreateInstance()またはQueryInterface()コールを逆アセンブルする必要があります。それがプロキシを通過するということは、これをまったく簡単にするものではありません。 –