Creați un trainer în Delphi folosind winapi

În acest tutorial, voi sublinia API-ul principal necesar pentru a crea un antrenor în Delphi. Elementele de bază ale cunoștințelor Delphi sunt preferate, dar Delphi este atât de ușor de învățat.







Iată ce avem nevoie pentru acest lucru:

Numărul de octeți pe care dorim să le scriem
În sensul că am ajuns mai sus, trebuie să știm și câți octeți îi vor lua în memorie. De exemplu, numărul 32 are doar 1 octet, dar FF07 va avea deja doi octeți. În general, două cifre vor ocupa un octet.

Vom folosi API-ul Win32 pentru a scrie valori în memoria unui alt proces. Acestea sunt funcțiile pe care le vom folosi. În scopul:

FindWindow
GetWindowThreadProcessID
OpenProcess
ReadProcessMemory
WriteProcessMemory
CloseHandle

(Citiți descrierile acestor funcții în fișierul Win32.hlp (sau MSDN) pentru o descriere completă.)

Voi arăta numai elementele de bază, astfel încât începătorii pot să copieze codul din acest document și să îl introducă în proiect.)

Deci, începutul. În primul rând, declarăm variabilele noastre. Copiați și lipiți acest lucru în proiectul dvs.:

Var WindowName. întreg;
ProcessID. întreg;
ThreadId. întreg;
buf. PChar;
HandleWindow. integer;
în scris. cardinal;

Acum trebuie să declare următoarele constante. Copiați și această secțiune. Aceste constante sunt stabilite în funcție de ceea ce ați scris mai sus.

Const WindowTitle = 'test de prog';
Adresa = $ 41D090;
PokeValue = 32 USD;
NumberOfBytes = 1;

Acum, pentru a scrie valorile, ar trebui să obțineți memoria jocului. Este imposibil să faci acest lucru într-o singură acțiune, așa că vom face următoarele.







Luați mânerul ferestrei principale

Cu acest mâner, obținem un identificator de proces (pID)

Cu acest PID, obținem mânerul zonei de memorie.

Cu acest mâner, putem începe hacking-ul.

În primul rând, trebuie să luăm mânerul în fereastra principală. Utilizați funcția FindWindow

Numele ferestrei: = FindWindow (zero, WindowTitle);
Dacă WindowName = 0 atunci
începe
MessageDlg ("Jocul trebuie început înaintea formatorului.
Rulați-o, apoi formatorul ", mtwarning, [mbOK], 0);
se încheie;

Rețineți că codul verifică dacă mânerul acestei ferestre este zero. Dacă este egal, înseamnă că jocul nu se execută, așa că îl avertizăm pe utilizator și îi spunem să înceapă jocul.

Acum avem nevoie de un PID. Utilizăm funcția GetWindowThreadProcessId. După aceea, vom obține mânerul zonei de memorie prin OpenProcess. Copiați codul de mai jos.

ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);

Aici este. Acum trebuie să folosim WriteProcessMemory pentru a scrie ceva în interiorul acestui mâner. De îndată ce o facem, închidem mânerul. Deci este acceptat. Atât de sigur. Copiați codul de mai jos:

GetMem (buf, 1);
buf ^: = Chr (PokeValue);
WriteProcessMemory (HandleWindow, ptr (Adresa), buf, NumberOfBytes, scrie);
FreeMem (buf);
CloseHandle (HandleWindow);

Iată codul sursă pentru întregul antrenor. Pentru începători, pentru a face rapid un antrenor, trebuie doar să schimbați constantele declarate la începutul programului.

Var WindowName. întreg;
ProcessID. întreg;
ThreadId. întreg;
buf. PChar;
HandleWindow. integer;
scrie. cardinal;
Const WindowTitle = 'test de prog';
Adresa = $ 41D090;
PokeValue = 32 USD;
NumberOfBytes = 1;

Numele ferestrei: = FindWindow (zero, WindowTitle);
Dacă WindowName = 0 atunci
începe
MessageDlg ("Jocul trebuie început înaintea formatorului.
Rulați-o, apoi formatorul ", mtwarning, [mbOK], 0);
se încheie;

ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);

GetMem (buf, 1);
buf ^: = Chr (PokeValue);
WriteProcessMemory (HandleWindow, ptr (Adresa), buf, NumberOfBytes, scrie);
FreeMem (buf);
CloseHandle (HandleWindow);
se încheie;







Articole similare

Trimiteți-le prietenilor: