Frage:
INT 2D Anti-Forensic-Methode
lynks
2013-04-03 19:42:49 UTC
view on stackexchange narkive permalink

Die Aufnahme einer INT 2D -Anweisung scheint eine recht häufige Anti-Debugging-Taktik zu sein, die von Windows-Malware-Autoren verwendet wird. Soweit ich weiß, verhält sich ein Prozess anders, wenn ein Debugger angehängt ist, als wenn er nicht angehängt ist.

Ich habe gelesen, dass dies teilweise auf einen asynchronen (nicht Teil des normalen Programmflusses) zurückzuführen ist ) Inkrement zum Befehlszeiger. Dieses Inkrement kann vorgenommen werden, um zu einer Anweisungsspaltung zu führen.

Könnte jemand diese Anti-Debugging-Taktik erklären, insbesondere warum dieses Inkrement zum Anweisungszeiger auftritt und was passiert, wenn ein Debugger ausgeführt wird ist und ist nicht angehängt.

Vier antworten:
#1
+16
peter ferrie
2013-04-03 20:29:26 UTC
view on stackexchange narkive permalink

Aus meiner "Ultimate" Anti-Debugging-Referenz (siehe pferrie.host22.com):

Der Interrupt 0x2D ist ein Sonderfall. Wenn es ausgeführt wird, verwendet Windows den aktuellen EIP-Registerwert als Ausnahmeadresse und erhöht dann den EIP-Registerwert um eins. Windows überprüft jedoch auch den Wert im EAX-Register, um festzustellen, wie die Ausnahmeadresse angepasst werden kann. Wenn das EAX-Register unter allen Windows-Versionen den Wert 1, 3 oder 4 oder unter Windows Vista und höher den Wert 5 hat, erhöht Windows die Ausnahmeadresse um eins. Schließlich wird eine EXCEPTION_BREAKPOINT (0x80000003) -Ausnahme ausgegeben, wenn ein Debugger vorhanden ist. Das Interrupt-Verhalten 0x2D kann zu Problemen für Debugger führen. Das Problem besteht darin, dass einige Debugger möglicherweise den EIP-Registerwert als Adresse für die Wiederaufnahme verwenden, während andere Debugger möglicherweise die Ausnahmeadresse als Adresse für die Wiederaufnahme verwenden. Dies kann dazu führen, dass ein Einzelbyte-Befehl übersprungen wird oder ein völlig anderer Befehl ausgeführt wird, da das erste Byte fehlt. Diese Verhaltensweisen können verwendet werden, um auf das Vorhandensein des Debuggers zu schließen. Die Überprüfung kann mit diesem Code (identisch für 32-Bit und 64-Bit) durchgeführt werden, um entweder die 32-Bit- oder die 64-Bit-Windows-Umgebung zu untersuchen:

  xor eax, eax; set Z. flagint 2dhinc eax; Debugger überspringt möglicherweise das Sein_debugged  

[end]

Sie können also sehen, dass hier nichts Asynchrones passiert. Die Änderung erfolgt sofort, wenn die Ausnahme auftritt. Soweit warum sie auftritt, soll das übersprungene Byte zum Übergeben eines Bytes zusätzlicher Informationen zum Zeitpunkt der Ausnahme verwendet werden.

In der Tat war es ziemlich offensichtlich, dass es keine "Asynchronität" -Prüfung gab, als ich anfing, darüber zu lesen. Ich würde mir vorstellen, dass die UD2-Anweisung etwas Ähnliches tun könnte.
UD2 hat nicht den gleichen Effekt. Dieser verhält sich wie jede andere ungültige Anweisung. Es dient ausschließlich dazu, zu sehen, wie eine definitiv ungültige Anweisung aussieht (im Gegensatz zu einer zufälligen Opcode-Kombination, die heute ungültig ist, aber morgen in einer neuen CPU gültig wird).
#2
+6
cb88
2013-04-03 20:28:00 UTC
view on stackexchange narkive permalink

Ein Anti-Reverse Engineering-Handbuch

Und der primäre erklärende Kommentar aus dem dort dargestellten Code.

  // Die Int2DCheck-Funktion wird Überprüfen Sie, ob ein Debugger // an den aktuellen Prozess angehängt ist. Dazu wird // SEH eingerichtet und der Befehl Int 2D verwendet, der nur dann eine // Ausnahme verursacht, wenn kein Debugger vorhanden ist. Auch wenn es in OllyDBG // verwendet wird, wird ein Byte bei der Demontage übersprungen und // etwas Chaos verursacht.  

Hinweis: Hier ist ein bisschen SEH.

#3
+3
Brandon Young
2013-04-17 20:45:48 UTC
view on stackexchange narkive permalink

Einige gute Beispiele für die Verwendung von INT2d in Malware finden Sie in Dr. Fus Blog:

http://fumalwareanalysis.blogspot.com/p/malware-analysis-tutorials-reverse .html

Es gibt 3 verschiedene Beispiele und Erklärungen, eines davon mit Max ++, das eine gute Vorstellung davon gibt, was Sie in Ihren eigenen Malware-Beispielen erwarten können.

#4
+3
Gagou
2015-04-21 19:23:05 UTC
view on stackexchange narkive permalink

Der Interrupt 0x2D ist ein Sonderfall. Bei der Ausführung verwendet Windows den aktuellen EIP-Registerwert als Ausnahmeadresse und erhöht dann den EIP-Registerwert um eins . Windows überprüft jedoch auch den Wert im EAX-Register, um festzustellen, wie die Ausnahmeadresse angepasst werden kann. Wenn das EAX-Register unter allen Windows-Versionen den Wert 1, 3 oder 4 oder unter Windows Vista und höher den Wert 5 hat, erhöht Windows die Ausnahmeadresse um eins. Schließlich wird eine EXCEPTION_BREAKPOINT (0x80000003) -Ausnahme ausgegeben, wenn ein Debugger vorhanden ist. Das Interrupt-Verhalten 0x2D kann zu Problemen für Debugger führen. Das Problem besteht darin, dass einige Debugger möglicherweise den EIP-Registerwert als Adresse für die Wiederaufnahme verwenden, während andere Debugger möglicherweise die Ausnahmeadresse als Adresse für die Wiederaufnahme verwenden. Dies kann dazu führen, dass ein Einzelbyte-Befehl übersprungen wird oder ein völlig anderer Befehl ausgeführt wird, da das erste Byte fehlt. Diese Verhaltensweisen können verwendet werden, um auf das Vorhandensein des Debuggers zu schließen. Die Überprüfung kann mit diesem Code (identisch für 32-Bit und 64-Bit) durchgeführt werden, um entweder die 32-Bit- oder die 64-Bit-Windows-Umgebung zu untersuchen:

Zuerst habe ich nicht. Ich verstehe die Bedeutung der "Ausnahmeadresse" nicht und denke, ich bin nicht der einzige. Glücklicherweise hat der Blog von Dr. Fu eine bessere Erklärung dafür.

Aus dem Blog von Dr. Fu:

Hier ist die "Ausnahmeadresse" der "EIP-Wert des Kontexts" "(der in den Benutzerprozess zurückkopiert werden soll), und der" EIP-Registerwert "ist der tatsächliche EIP-Wert des Benutzerprozesses, wenn die Ausnahme auftritt.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...