AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) SetWindowsHookEx innerhalb der DLL selbst
Thema durchsuchen
Ansicht
Themen-Optionen

SetWindowsHookEx innerhalb der DLL selbst

Ein Thema von hedie · begonnen am 23. Mär 2013 · letzter Beitrag vom 25. Mär 2013
 
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#12

AW: SetWindowsHookEx innerhalb der DLL selbst

  Alt 25. Mär 2013, 14:31
Habe eine Idee wie dies funktionieren könnte...

1: Dll in externe App injizieren und den Speicheraddressen beginn merken (dllAddressExtern)
2: Nun die DLL in den eigenen Prozess laden und ebenfalls die Startaddresse speichern (dllAddressIntern)
3: Nun mit GetProcAddress die Addresse der Funktion innerhalb der in den eigenen Prozess geladenen DLL finden und speichern.
4: Die Adresse von GetProcAddress abzüglich die Startaddresse ergibt unseren Offset.
5: Diesen Offset zu dllAddressExtern addieren und schon haben wir die Addresse der Funktion in der Zielapp.

Ich habe nun versucht einer internen Funktion den Pointer von eben dieser Adresse zu geben und aufzurufen.
Aber im nachhinein ist mir aufgefallen, das dies ja nur für den eigenen Speicherbereich klappt.

Leider weiss ich also nicht wie ich nun die Externe funktion aufrufen kann...

Habe nun folgenden Code zusammen:


Delphi-Quellcode:
TestMyApp := GetProcAddress(th,pchar('TestMyApp'));
  writeln;
  write('Dll Adresse extern: ');
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
  write(integer(pdllname));
  dllAddrExtern := integer(pdllname);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
  writeln;

  dllAddressIntern := LoadLibrary(pchar(ExtractFilePath(paramstr(0)) + 'InjectedDll.dll')); //Interne DLL Adresse holen
  dllOffset := integer(GetProcAddress(dllAddressIntern,'TestMyApp')) - dllAddressIntern;

  write('Dll Adresse intern: ');
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
  write(inttostr(dllAddressIntern));
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
  writeln;

  write('Dll Adresse Offset: ');
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
  write(inttostr(dllOffset));
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
  writeln;

  TestMyApp := Pointer(dllAddrExtern + dllOffset);

  write('Dll Funktions Addresse: ');
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
  write(inttostr(dllAddrExtern + dllOffset));
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
  writeln;
  writeln('Versuche nun die Funktion auszuführen!');
  readln(myInput);
  readln(myInput);
  TestMyApp;
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
 


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 10:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz