Wie Programme dazu verleiten, sie zu denken - re unter 32-Bit-Super User laufen

Im Grunde habe ich 3 ausführbaren Dateien in meinem Windows 7 64-Bit, das sind:

Loader.exe -> Dies ist eine 32-Bit-exe

x86.exe -> Dies ist eine 32-Bit-exe

x64.exe -> Dies ist eine 64-Bit-exe

Wenn Loader.exe beginnt sie bestimmt, ob das System 32-Bit oder 64-Bit und lädt die entsprechende Datei (entweder x86.exe oder x64.exe), da ich die x64.exe ein 64-Bit-Betriebssystem renne wird Anfang.

Ich würde gerne wissen, wie Loader.exe bestimmt, ob mein System 32 oder 64? Die höchstwahrscheinlich durch die API aufrufen Kernel32.IsWow64Process ()

Jetzt muss ich diese Funktion immer FALSE zurück zu machen, auf globaler Ebene und nicht nur für Loader.exe. So hatte gehofft, dass ich etwas entlang der Linien eines „globalen api Haken“, die die Funktion immer FALSE zurück macht.

Aber ich weiß nicht, wie dies zu tun, das letzte Mal, dass ich etwas angespannt war in Windows 98 und die Dinge haben sich seitdem geändert.

So passieren Sie wissen, wie IsWow64Process Hook () und dadurch den Prozess zu machen glauben, dass es in einer 32-Bit-Umgebung ausgeführt wird?

fragte um 11:20 4 '12 Juli

Nach Stunden rund um die Windows-API-Kopf der Verpackung (und nicht dokumentierte API) sowie Zeiger und was nicht, ich fand schließlich heraus, wie es zu tun. Es war ein bisschen heikel, weil IsWow64Process () von Windows auf jedem ausführbaren genannt wird, noch bevor das Programm erreicht es ist Entrypoint, wenn Sie nur FALSCH reflektieren es zum Absturz bringen wird.

Aber ich merkte, dass das Fenster der Anrufe von geladenen Modulen kommen, und auf diese Art und Weise kann ich meine Haken beschränken nur FALSCH zu reflektieren, wenn der Anrufer eine ausführbare Datei ist.

Hier ist eine kleine Anleitung, wie es gemacht wurde:

Holen Sie sich das Rücksendeadresse meines Haken, und finden Sie heraus, welches Modul meine Haken Funktion aufgerufen:

Nehmen Sie die Module, überprüfen, ob es „.exe“ enthält und setzen ‚Wow64Process‘ Variable auf FALSE, wenn es sich um eine ausführbare Datei ist:

Aber hier ist ein weiteres Problem, IsWow64Process () existiert nur auf Windows 64-Bit-Betriebssystemen, so dass die meisten Programme, die tatsächlich prüfen, ob das Betriebssystem 64-Bit läuft nicht über diese Funktion, statt sie zu fragen, ob die Funktion verfügbar ist und dadurch festzustellen, ob das System 32-Bit oder 64-Bit ist.

Die Art, wie sie dies tun, ist von GetProcAddress () aufrufen.

Leider ist GetProcAddress () in meinem Source-Code verwendet Funktionsadressen zu finden, und die Funktion wird natürlich zu unerwünschtem Verhalten Einhaken, so tauchen wir ein wenig tiefer in die nicht dokumentierte API und wir herausfinden, dass Kernel32.GetProcAddress () ruft ntdll .LdrGetProcedureAddress ().

Nach der Lektüre von abit im Netz bin ich jetzt sicher, dass es sicher ist, LdrGetProcedureAddress Haken ().

In unserem Haken LdrGetProcedureAddress () Funktion, die wir überprüfen, ob der Anrufer für IsWow64Process bittet und den Anrufer sagen, dass die Funktion existiert nicht!

Theres eine Menge von Informationen über AppInit_DLLs auf dem Netz, aber alle von ihnen beziehen sich auf 32-Bit- und ihre Lösung nicht wirklich auf meinem Windows 7 64-Bit-Betriebssystem funktioniert. Um es einfacher für Sie, hier sind die richtigen Registrierungspfade für 32-Bit- und 64-Bit-AppInit_DLLs:

32-bit. HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ Currentversion \ Windows

64-bit. HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ Windows NT \ Currentversion \ Windows

Wir setzen LoadAppInit_DLLs auf 0x1 und AppInit_DLLs unseren DLL-Pfad.

Hier ist die letzte Quellcode, verwendet es mhook Bibliothek: