AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fremdes programm hookt CreateWindowEx

Ein Thema von Gruber_Hans_12345 · begonnen am 7. Mai 2013 · letzter Beitrag vom 8. Mai 2013
Antwort Antwort
Seite 2 von 2     12   
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 11:59
Nein, ich meinte ja auch in deinem eigenen Adressraum. Denn falls deine Theorie stimmt, dann müsste das fremde Programm ja irgendwie Code in dein Programm injiziert haben. Trotzdem weiß man nicht, wie das fremde Programm darauf reagiert... wäre ja möglich, dass der Kopierschutz, so er denn dafür verantwortlich ist, auch regelmäßig überprüft, ob die Hooks noch da sind.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 12:03
Nun, hooks funktionieren nach folgendem Schema:
- es wird entweder rein auf korrektem Wege per SetWindowsHookEx() global (Dll) gehookt -- hier können aber nur vorgegebene Sachen abgefangen werden
- oder, die vorige Methode wird verwendet, um eine Dll in den Adressraum aller anderen Prozesse zu laden (SetWindowHookEx() macht das) damit
anschließend folgende Art von (dirty) Hook gesetzt werden kann:
-- IAT/EAT Hook (Address Table Hook)
-- Code Patching (wie der Namenlozer bereits geschrieben hat)

Was du nun machen kannst, als Hotfix, ist, zunächst einmal rausfinden, um was für Art von Hook es sich handelt - es ist entweder
IAT oder Code Patching (das sind die gängigsten)
Wenn IAT:
- die Adresse, die in der Import Table steht, ist "modifiziert" - deine Aufgabe ist es, iwie rauszufinden, wo sie sich wirklich befindet
dafür kannst du mal die hookende Anwendung terminieren, deine App normal starten und per GetProcessAddress() die korrekte Adresse ermitteln (sie liefert die modifizierte beim IAT Hook)

Wenn Code Patching:
- kann schnell erkannt werden, da die Stackframe Generierung überschrieben wurde (meisten mit einem absoluten jmp)
Siehst du soetwas, einfach zurückpatchen -- 0815 Stackframegenerirung reinschreiben

Also im Grunde müsstest du dann für deine Anwendung vom dirty Hook säubern!

Achja, noch etwas damit du nicht verzweifelst -- wenn die Hookende Anwendung beim Terminieren nicht ordentlich aufräumt bzw nicht den globalen Hook löscht, wird Windows weiterhin bei jedem Prozess den Hook laden (was ja nur ne Dll ist) - auch wenn die Anwendung geschlossen ist! Das kann verwirrend sein
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 12:14
Oder sozusagen mein Programm vor diesen Hook "schütze"
Was passiert eigentlich wenn du dein Programm mit Adminrechten startest. Hier dürften eigene einfachen Hooks nicht aktiv sein/funktionieren.
Windows Vista - Eine neue Erfahrung in Fehlern.

Geändert von Bernhard Geyer ( 8. Mai 2013 um 12:17 Uhr)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#14

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 14:50
Das ist mal mein Testcode

wenn fremdes programm gestartet ist, dann 8000 ms wenn nicht gestartet dann 60ms

GetProcAddress liefert in beiden Fällen die selbe Adresse zurück

Wenn ich das fremde Programm schließe, dann funktionieren die Aufrufe sofort wieder schnell

Ein Starten im Adminmode, oder mit Kompatiblitäts .... bringt auch nichts.

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
var
    c : cardinal;
    i : integer;
begin
    c := GetTickCount;
    // CreateWindowEx

    for i:=0 to 100 do begin
        with TTimer.Create(nil) do
            Free;
    end;

    Memo1.Lines.Add(IntToStr(GetTickCount-c));
end;

procedure TForm8.Button2Click(Sender: TObject);
var
    LModule : HMODULE;
    temp : Pointer;
begin
    LModule := GetModuleHandle(User32);
    if LModule <> 0 then
    begin
        temp := GetProcAddress(LModule, 'CreateWindowExA');
        Memo1.Lines.Add('CreateWindowEx : '+IntToHex(integer(temp), 8));
    end;
end;
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#15

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 15:08
Ok, hast du bei der Adresse im Speicher (per Delphi-Debugger z.B. -- damit kannste auch schön Assembler Code sehen)
nachgeschaut? Ist dort die Standardstackframegenerierung drinnen?

Edit
Also das hier:
Code:
user32.CreateWindowExA:
7536D22E 8BFF            mov edi,edi
7536D230 55               push ebp
7536D231 8BEC            mov ebp,esp
7536D233 6801000040       push $40000001
7536D238 FF7534           push dword ptr [ebp+$34]
7536D23B FF7530           push dword ptr [ebp+$30]
/*snip*/

user32.CreateWindowExW:
75368A29 8BFF            mov edi,edi
75368A2B 55               push ebp
75368A2C 8BEC            mov ebp,esp
75368A2E 6800000040       push $40000000
75368A33 FF7534           push dword ptr [ebp+$34]
75368A36 FF7530           push dword ptr [ebp+$30]
/*snip*/
(Das mov edi, edi -- push ebp -- mov ebp, esp)

Achja, du müsstest übrigens für beide überprüfen, ob die Adresse anders ist (für die ..A und ..W)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton ( 8. Mai 2013 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#16

AW: Fremdes programm hookt CreateWindowEx

  Alt 8. Mai 2013, 15:09
hmmmmmmmmmmm nun bin ich mir nicht mehr so sicher ob es wirklich ein Hook ist

das dauert lange
aHWND := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName, '', WS_POPUP {+ 0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
das nicht!
aHWND := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName, '', WS_CHILD {+ 0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
@Aphton: Ich habe leider auf dem System wo dieses Programm läuft kein Delphi drauf ...
Gruss Hans

2B or not 2B, that is FF

Geändert von Gruber_Hans_12345 ( 8. Mai 2013 um 15:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz