Ich bin ziemlich neu bei der Umkehrung von COM-Objekten (Windows Platform). Ich versuche, den Internet Explorer unter Windows 8.1 umzukehren, wo der untergeordnete IE-Prozess mit dem übergeordneten IE-Prozess über com kommuniziert (aufgrund des geschützten Modus).Verstehen der Interprozesskommunikation des IE11 über COM
Dies ist ein ASM-Schnipsel einer virtuellen Funktion von ieframe.dll (Teil der Klasse CShellUIHelper), die für einen COM-Betrieb verantwortlich (I MS öffentliches Symbol habe.)
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
}
Hier seine ein COM-Aufruf Interface-Methode in der letzten Zeile mit "Call esi" Anweisung, die eigentlich "Call esi + 025ch" ist. Runtime ich habe gefunden, dass es eigentlich combase! ObjectStublessClient30 (x, x)
Hier möchte ich finden, die Schnittstelle Methode Name seinen Aufruf mit Hilfe von Combase! ObjectStublessClient30().
Um den Methodennamen zu finden, folge ich diesem Stack Exchange Answer, der ziemlich ähnlich aussieht.
https://reverseengineering.stackexchange.com/questions/2822/com-interface-methods
Aber das Problem ist, in diesen Schnittstellennamen beantworten wurde bekannt, das IShellWindows ist, aber in meinem Fall die ich nicht die Schnittstellennamen kennen.
Ich bin an diesem Punkt fest. Also meine Fragen ist, welchen Pfad ich folgen sollte, um den Namen der Schnittstelle und den Namen der Methode zu erfahren.
Es gibt keinen vernünftigen Weg, dies rückzuentwickeln. Wenn Sie in der Datei combase.dll enden und dann tatsächlich in den Proxy-Server wechseln, wird sichergestellt, dass der COM-Aufruf Thread-sicher erfolgt. Sie müssen zuerst die genaue Schnittstelle kennen, die verwendet wird, und dann die von dieser Schnittstelle implementierten Methoden abzählen. Wenn Sie die Schnittstelle nicht kennen, wissen Sie nichts. –
@HansPassant gibt es einen Ansatz, dem ich folgen kann, um die Schnittstelle zu finden? –
Sie benötigen viel mehr Reverse-Engineering. Sie müssen den CoCreateInstance() - oder den QueryInterface() - Aufruf zerlegen, damit Sie die GUID der Schnittstelle identifizieren können. Dass es durch einen Proxy geht, macht das nicht gerade einfacher. –