Hozzon létre egy tréner segítségével Delphi WinAPI
Ebben a tutorial fogok felvázolni az alapvető API, hogy hozzon létre egy edző a Delphi. Alapjai ismeretek Delphi előnyös, de Delphi ezért meglehetősen könnyű megtanulni.
Ez az, amit meg kell tennünk:
A bájtok száma akarunk írni
Abban az értelemben, hogy mi van fent, mi is kell tudni, hogy hány bájt tart a memóriában. Például a 32-es lesz csak 1 byte, de FF07 fogja elfoglalni két bájt. Általában a két számjegy fog elfoglalni egy bájt.
Megyünk, hogy használja a Win32 API, hogy írjon értékeket a memória egy másik folyamat. Ezek a funkciók hogy fel fogjuk használni. Annak érdekében:
FindWindow
GetWindowThreadProcessID
OpenProcess
ReadProcessMemory
WriteProcessMemory
CloseHandle
(Olvasd el a leírást ezen függvények Win32.hlp fájlt (vagy MSDN -. Prim.per) a teljes leírást.)
Megmutatom az alapokat, hogy a kezdők is csak másolja a kódot az ebben a dokumentumban, és illessze be a projektbe.)
Így kezdődik. Először, kinyilvánítjuk változókat. Másolja és illessze be a projekt:
Var WindowName. integer;
ProcessID. integer;
Threadid. integer;
buf. PChar;
HandleWindow. integer;
írva. bíboros;
Most, hogy állapítsa meg a következő állandók. Másolás és ezt a részt. Ezek az állandók megfelelően lesz beállítva, amit írtál fent.
Const WindowTitle = 'PROG teszt';
Cím = $ 41D090;
PokeValue = $ 32;
NumberOfBytes = 1;
Most, hogy rekord értékeket, akkor kap a fogantyút a memória játékok. Lehetetlen csinálni egy lépésben, így fogjuk csinálni.
Kapunk egy kart a fő ablakban
Ezzel megkapjuk a kilincset a folyamat azonosító (folyamat azonosítója - PID)
Ezzel plD, megkapjuk a kart a memória területet.
Mi lehet kezdeni ezzel a hack a fogantyút.
Először is meg kell, hogy a fogantyú a fő ablakban. Az általunk használt FindWindow funkció
WindowName: = FindWindow (nil, WindowTitle);
Ha WindowName = 0, akkor
kezdődik
MessageDlg (A játék kell futtatni a tréner.
Futtatás, majd edző”, mtwarning, [mbOK], 0);
végén;
Vegye figyelembe, hogy a kód ellenőrzi, hogy a fogantyút az ablak nullára. Ha igen, az azt jelenti, hogy a játék nem fut, ezért figyelmezteti a felhasználót, és elmondja neki, hogy fusson a játék.
Most arra van szükség plD. Az általunk használt GetWindowThreadProcessId. Akkor megkapjuk a fogantyút memória révén OpenProcess. Másolja le az alábbi kódot.
Threadid: = GetWindowThreadProcessId (WindowName, @ processID);
HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, processID);
Ennyi. Most azt kell használni WriteProcessMemory, hogy írjon valamit belsejében egy fogantyúval. Amint ezt tesszük, zárunk a fogantyút. Tehát elfogadott. Így biztonságos. Másolja le az alábbi kódot:
GetMem (buf, 1);
buf ^: = Chr (PokeValue);
WriteProcessMemory (HandleWindow, ptr (cím), buf, NumberOfBytes, írás);
FreeMem (buf);
CloseHandle (HandleWindow);
Itt látható a forráskód minden oktatók. A kezdő programozók gyorsan, hogy egy edző, csak akkor kell változtatni az állandók nyilvánították a program elején.
Var WindowName. integer;
ProcessID. integer;
Threadid. integer;
buf. PChar;
HandleWindow. integer;
levelet. bíboros;
Const WindowTitle = 'PROG teszt';
Cím = $ 41D090;
PokeValue = $ 32;
NumberOfBytes = 1;
WindowName: = FindWindow (nil, WindowTitle);
Ha WindowName = 0, akkor
kezdődik
MessageDlg (A játék kell futtatni a tréner.
Futtatás, majd edző”, mtwarning, [mbOK], 0);
végén;
Threadid: = GetWindowThreadProcessId (WindowName, @ processID);
HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, processID);
GetMem (buf, 1);
buf ^: = Chr (PokeValue);
WriteProcessMemory (HandleWindow, ptr (cím), buf, NumberOfBytes, írás);
FreeMem (buf);
CloseHandle (HandleWindow);
végén;