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;

Kapcsolódó cikkek