| |
|
|
- Seite 1 - |
|
Frank Abbing | Ein kleines Tool von mir auf API-Hooking Basis. In einer Listbox werden alle Dlls aufgelistest, die gerade von Programmen geladen wurden.
Einfach Exe starten und dann irgendwelche Programme starten. Deren Dlls sollten jetzt gelistet werden und es pieps kurz. Bitte testet mal, ob es noch irgendwo hakt. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Frank Abbing | Mache ich ja, darum haut es eben nicht hin. Für 2000 existieren also nur 3 Trampolin-Bytes, unter XP sind es 5. Darum crashed es beim Rücksprung in die originale Routine. Entweder berücksichtige ich jetzt die jeweilige NT-Version, oder ich baue die API komplett in meinen Code ein. Die zweite Möglichkeit ist flexibler. |
|
|
| |
|
|
|
Frank Abbing | Diese neue Version müsste auch mit 2000 funktionieren. Testen konnte ich es aber nicht. |
|
|
| |
|
|
|
| Frank Abbing
Mache ich ja, darum haut es eben nicht hin. Für 2000 existieren also nur 3 Trampolin-Bytes, unter XP sind es 5. Darum crashed es beim Rücksprung in die originale Routine. Entweder berücksichtige ich jetzt die jeweilige NT-Version, oder ich baue die API komplett in meinen Code ein. Die zweite Möglichkeit ist flexibler.
Hallo Frank...
Mal ein paar Gedanken:
Warum berücksichtigst du nicht die Opcodes? So viele sind das doch nicht. Manche haben eben nur ein Byte, andere dagegen sogar 6 (wenn eine Adresse angesprungen wird): Also: Festellen, wo gültiger Opcode endet.
Warum kopierst du dann nicht den (gültigen) Opcode aus der DLL und springst ihn dann einfach an? Du müssest nur schauen, dass der Stack wieder passt. An das Ende des kopierten Opcodes schreibst du wieder den Opcode einer weiteren Call Anweisung. Auch in der API muss dann aber der Stack wieder angepasst werden (schau mal bei QEditor, Opcodes, RET und CALL).
PS: Testergebnis folgt noch. |
|
|
| |
|
|
|
| Hallo Frank...
Leider unter Windows2000 noch das selbe Problem: Die erste DLL wird angezeigt, danach verabschiedet sich das gehookte Programm mit Fehlermeldung.
Als ich mir Shatter angesehen habe, habe ich ziemlich viel mit API rumgefuscht. Das was da passiert, kommt mir sehr bekannt vor - da sscheint etwas mit dem Stack nicht mehr zu stimmen und die API holt sich einen Pointer vom Stack, der nicht auf eine gültige Adresse verweist. Schau mal nach, ob da vielleicht irgendwo etwas (vielleicht mit Call) auf den Stack geschoben wird, was da vor dem Ausführen der restlichen API erst wieder runtergenommen werden muss. XP validiert solche Pointer scheinbar ( läuft ja auch stabiler), 2000 reagiert immer mit Absturz - nur so eine Vermutung durch meine früheren Basteleien. |
|
|
| |
|
|
|
Frank Abbing | Oh, hab ein Byte dezimal ausgewertet, anstatt hexadezimal... Im Anhang die neue Version, die jetzt hoffentlich läuft.
Warum berücksichtigst du nicht die Opcodes? So viele sind das doch nicht. Manche haben eben nur ein Byte, andere dagegen sogar 6 (wenn eine Adresse angesprungen wird): Also: Festellen, wo gültiger Opcode endet.
Ich schreibe einen Jmp-Befehl an den Anfang der API, der in meine Routine springt. Die überschriebenen Bytes/Opcodes arbeite ich dann am Anfang meiner Routine da. Das Problem war, das 2000 und XP verschiedene Anfänge besitzen. MS fördert API-Hooking ab WindowsXP und hat deswegen alle APIs so modifiziert (das sinnlose MOV EDI,EDI eingefügt) , dass die ersten 5 Bytes nun leicht durch einen Jmp ersetzt werden können. Später springe ich wieder hinter den Jmp-Befehl und lasse die API normal weiterlaufen. Das ist die bei Hackern übliche Technik, die sich Trampolin nennt (eben hin und zurück springen). Anstelle eines Jumps kann auch ein PUSH sprungaddr / RETN benutzt werden. Diese Technik besitzt aber ein 6 bytes grosses Trampolin.
Diese Methode kannst du auch leicht benutzen, um nachzuprüfen, ob eine API gehookt ist oder nicht. Ist das erste ausgelesene Byte der API nicht $55 und nicht $8B, ist die API mit Sicherheit Inline-gehooked. |
|
|
| |
|
|
|
| Hallo Frank...
Interessante Infos! Schau dir bitte mal die API AreFileApisAnsi aus der Kernel32 an.
Ist das erste ausgelesene Byte der API nicht $55 und nicht $8B, ist die API mit Sicherheit Inline-gehooked.
Ich denke mal, ich würde evtl. etwas hinbekommen, was auf allen Systemen und bei allen APIs läuft. Wenn ich mal ganz große Lust habe, setze ich mich da vielleicht auch mal dran. |
|
|
| |
|
|
|
| Hallo Frank, geht jetzt auch unter Windows2000. Hatte nur ein Problem mit dem Profan Editor, das liegt aber wohl nicht an dir.
Sehr interessant, was Windows da macht! Schaue ich mir noch näher an. |
|
|
| |
|
|
|
Frank Abbing | Super! Unter Vista funktioniert es ebenfalls, das hat Rolf vorhin getestet. Vista hat die gleichen Dll-Startcodes wie XP.
Jetzt kann ich Sinnvolles programmieren, nachdem der Rahmen nun steht. |
|
|
| |
|
|
|
Dieter Zornow | Ich denke dein Tool ist auch gefährlich, ich habe ja das Problem, dass bei mir immer nur die psapi.dll angezeigt wird sonst nichts. Die Dll ist eine Microsoft DLL und kam mit SP2 sie wird unter anderem von Explorer und meinem Virenprogramm geladen. Beim Testen deiner letzten Version hat meine Firewall gemeldet, dass mein Virenprogramm beendet werden muss, da Speicher überschrieben wurde. Ist also nicht ganz ungefährlich die Sache. Ich denke dass mein Problem mit dem Virenscanner und der Firewall zusammen hängt.
Virenscanner Antivir, Firewall Outpost
Gruß
Dieter |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 25.03.2007 ▲ |
|
|
|
|
Frank Abbing | Dieter, vielleicht hookt ein anderes Programm ebenfalls in deinem System. Könnte sein, dass du einen Trojaner eingefangen hast?
AntiVir ist ja nun nicht sonderlich sicher. Ich war nicht zufrieden damit, nachdem es mehrmals Trojaner bei mir durchgelassen hat und mein System allgemein auch belastete. Ich benutze nur noch Avast, das bemerkt man gar nicht und bislang ist noch nichts durchgekommen. |
|
|
| |
|
|
|
| Hallo Dieter...
Jetzt wirds interessant! Was sagt dein System zu ProcessHider auf meiner Homepage? Bidde bidde mal testen! Zuerst aber mal mit ProcHunter schauen, ob da vielleicht doch ein Trojaner (RootKit) sein Unwesen treibt. |
|
|
| |
|
|
|
Dieter Zornow | Hallo Frank,
Ich habe mein System nun mit einigen Root Kit Scannern getestet, keiner hat etwas gefunden. Es gibt nur noch den Treiber meiner Firewall der 2 Fubktionen hooked. Das Verhalten mit deinem Tool ist auch reproduzierbar. Du überschreibst durch deine Hooks einen Speicherbereich und wenn dort gerade ein Programm ist oder diesen benutzt, stürzt es ab deshalb denke ich nicht ungefährlich das ganze.
@Andeas, Ich habe deinen Process-Hider mal probiert, soweit ich es beurteilen kann läuft alles normal. Mir ist nur aufgefallen, wenn ich eine ganz normale Anwendung verstecke ist sie nur deinem Tool unsichtbar auch nach refresh. Der Taskmanager zeigt sie weiter ganz normal unter Anwendungen an. Ich habe auch Prochunter ausprobiert, er zeigt keine versteckten Processe. Nur wenn ich Native ID abhake werden rote Einträge gefunden, da aber nur die ID und keine Namen angezeigt werden, auch nicht in der Editbox, kann ich sie nicht zuordnen. Ich habe mir einige Rootkit Scanner aus dem Internet gezogen, die meisten suchen auch nach Hooks
Gruß
Dieter |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 25.03.2007 ▲ |
|
|
|