Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi api kopieren? (https://www.delphipraxis.net/70680-api-kopieren.html)

smc 2. Jun 2006 16:00


api kopieren?
 
Hallo hab mal wieder eine frage!

gibt es eine möglichkeit eine api zu kopieren um diese getrennt von der originale in meinem programm zu benutzen?

Habe schon danach gesucht aber mit den keywords api und kopieren hat man es echt ziemlich schwer.

gruß
smc

SirThornberry 2. Jun 2006 16:01

Re: api kopieren?
 
kannst du mal genau erleutern was du willst? API heißt ja "Applicaiton Programmer Interface" und da gibts ja eigentlich nix zu kopieren.

NicoDE 2. Jun 2006 16:03

Re: api kopieren?
 
Dann müsstest du die API nachprogrammierem... da die Implementation vom Hersteller geändert werden kann, stellt sich die Frage nach dem Sinn (und Unsinn).

Die übliche Gegenfrage: Was willst du erreichen?

easteregg 2. Jun 2006 16:13

Re: api kopieren?
 
da gibts ganz praktische sachen, zb gibt für foobar2000 ein plugin mit dem man es wie winamp steuern kann, indem es die api von winamp "kopiert"

smc 2. Jun 2006 16:37

Re: api kopieren?
 
ich will readprocessmemory benutzen, für mein gui addon das schön übersichtlich alle werte vom spiel in einer liste anzeigt!

Nun ist das problem das das spiel nachdem es gestartet wird ein 5 byte jmp vor readprocessmemory schreibt

deswegen will ich nun readprocessmemory vor dem spielstart kopieren damit ich nachdem man im spielt ist das ganze benutzen kann

NicoDE 2. Jun 2006 16:43

Re: api kopieren?
 
Wenn du eine DLL in den Zielprozess laden kannst, dann entscheide dich für einen beliebigen IPC-Mechanismus und Read/WriteProcessMemory wird überflüssig...

edit: Schlechtschreibung

Phistev 2. Jun 2006 16:47

Re: api kopieren?
 
Stichworte: Dynamische DLL-Einbindung und Funktionsvariablen, evtl. noch etwas Assembler. Damit sollte sich was machen lassen.

brechi 2. Jun 2006 17:00

Re: api kopieren?
 
ReadProcessMemory ist doch in deinem Prozess vorhanden. Wenn das Spiel ReadProcessMemory überschreibt, dann doch nicht in deinem Prozess. -> Du kannst immer noch ReadProcessMemory benutzen.

smc 7. Jun 2006 10:03

Re: api kopieren?
 
wenn das so einfach wäre, das spiel bzw. die protection installiert sich als treiber im system und hooked erstmal global die externen api calls -_-

brechi 7. Jun 2006 20:13

Re: api kopieren?
 
1) Sicher, dass das nicht die Kerio Firewall ist? (5 Byte jmp in Memory < 0x00100000, dann ein INT2E bzw Sysenter mit der ServiceNummer von NtLoadDriver)

2) Wirds als Treiber geladen, so ist auch sicherlich die SSDT gehookt -> vergiss es wenn du nicht auch einen Treiber schreiben kannst. Um sicher zu gehen, dass des Programm nciht einfach nur einen globalen hook (madCodehook etc) benutzt nimm mal OllyDbg und attache nen neuen Process, der soll aber direkt beim System Breakpoint anhalten. Ist da schon ein jump wirds ein Treiber sein (keine Chance mit ring3 Programm), ansonsten überschreibe den jmp mit den Original Bytes (VirtualProtect + CopyMemory)

Olli 8. Jun 2006 00:34

Re: api kopieren?
 
Also warum jemand ReadProcessMemory hooken würde ist mir irgendwie ein Rätsel, wenn ich es schon über einen Treiber mache, kann ich doch genausogut auch NtReadVirtualMemory nehmen?! :gruebel:

Zitat:

Zitat von brechi
ansonsten überschreibe den jmp mit den Original Bytes (VirtualProtect + CopyMemory)

Ist das thread-safe? :P :lol: :mrgreen: :zwinker:

brechi 8. Jun 2006 16:48

Re: api kopieren?
 
@Olli: Genau meine Ansicht! Kannst dir ja mal die Krio Firewall anschauen. Die macht einen SSDT hook auf ettliche Funktionen (NtWriteProcessMemory usw) und dann noch mal einen hook auf Userebene (mit Relativem Offset [0xE9] und dann wahrscheinlich noch ohne auf die HotPatches zu achten. Obwohl der Usermode Hook rein gar nichts bringt und der kernel Hook ausreichen würde.

Sie springen dann zu ihrem Speicher, wo sie ein NtLoadDriver aufrufen (nachgebautes) und anstatt dem PChar ein signed Byte (< 0) übergeben. Dadurch kann der SSDT hook auf NtLoadDriver erkennen um welch usermode API es sich handelt.

Netterweise kann ich aber durch einen Aufruf von CreateRemoteThread (welche unter 2k irgendwie falsch gehandled wird) die Firewall crashen und somit wider normal Pakete ins Inet schicken. Sehr sehr schön oO.

Naja war jetzt bisl Offtopic, aber ein Ring0 hook reicht aus und sollte der bei deinem Tool ebenfalls vorhanden sein dann brauchste die Api auch auf User ebene nicht nachbauen.

smc 26. Jul 2006 15:57

Re: api kopieren?
 
kannst mir das mit dem ring0 hook näher erklären?

Ich gehe also mit meinem programm in ring0, was dann?

Wenn ich das spiel starte haut es trotzdem readprocessmemory kaputt :/

Olli 26. Jul 2006 17:18

Re: api kopieren?
 
Zitat:

Zitat von smc
kannst mir das mit dem ring0 hook näher erklären?

Ich gehe also mit meinem programm in ring0, was dann?

Also erstmal sollte man mit "einem Programm" schonmal garnicht im Kernelmode (oder Ring 0) rumfummeln, weil sich das nicht gehört. Daß es geht, haben wir schon demonstriert bekommen, muß also nicht mehr bewiesen werden. Wenn, dann nähme man einen Treiber.

Zitat:

Zitat von smc
Wenn ich das spiel starte haut es trotzdem readprocessmemory kaputt :/

Tja, es gibt ja auch andere Methoden als ReadProcessMemory(), gerade wenn man sowieso einen Treiber einsetzt.

Allerdings zeigt die Form der Fragestellung deutlich, daß du noch keinen Treiber schreiben solltest, sondern ruhig lieber noch 2-3 Jahre trainieren solltest, bevor du sowas dann möglicherweise auf Fremdrechner losläßt ;)

Ach ja, ist zwar schon ein Jahr alt und sollte inzwischen mit aktuelleren Erkenntnissen verbessert werden, aber damit warte ich noch mindestens bis September: http://assarbad.info/stuff/temp/hookhlp.rar


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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