Tutorial hacking de memorie, sau vom scrie o arhivă de antrenor - o fraternitate ieftin ieftin

În această lecție vor fi identificate două metode de memorie - din exterior (exe) și din interiorul procesului (dll). Acesta va explica, de asemenea, cum să lucrați cu indicatori în ambele cazuri.







III. Lista funcțiilor:


HWND WINAPI FindWindow (
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName
);

DWORD WINAPI GetWindowThreadProcessId (
În Ingineria HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);

HANDLE WINAPI OpenProcess (
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwProcessId
);

BOOL WINAPI ReadProcessMemory (
_In_ HANDLE hProcess,
_In_ LPCVOID lpBaseAddress,
_Out_ LPVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T * lpNumberOfBytesRead
);

BOOL WINAPI WriteProcessMemory (
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T * lpNumberOfBytesWritten
);

BOOL WINAPI VirtualProtect (
_In_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flNewProtect,
_Out_ PDWORD lpflOldProtect
);
IV. Procedați.

Creați o aplicație consola goală fără titlu și scrieți imediat următorul cod (structura de bază):

#include
#include

int main () // creați punctul de intrare în procesul de trainer

> atunci vom descrie variabilele de care avem nevoie:


HWND hWnd = NULL; // titlul ferestrei procesului dorit
HANDLE proces = NULL;
DWORD pid = 0; // numărul procesului din listă Să mergem direct la căutare:


dacă (FindWindow (NULL, "Game"))) // verificați prezența unei ferestre cu titlul Joc






> dacă fereastra a fost găsită - atribuiți ferestrei noastre găsită


hWnd = FindWindowA (NULL, "Joc"); aflați numărul procesului din listă:


dacă (pid == 0)
GetWindowThreadProcessId (hWnd, pid); // memorați numărul în pid și apoi accesați procesul

Să adăugăm câteva variabile:

dacă (Sănătate <5000)
WriteProcessMemory (proces, (LPCVOID) (0x55555555), PatchHealth, 4, NULL) intrați în joc și vedeți dacă viața este mai mică de 5000, apoi le înlocuim


DWORD GetModuleBase (LPSTR lpModuleName, DWORD dwProcessId)
MODULEENTRY32 lpModuleEntry =;
MANUAL hSnapShot = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE, dwProcessId);
dacă (! hSnapShot)
retur NULL;
lpModuleEntry.dwSize = dimensiunea (lpModuleEntry);
BOOL bModule = Modul 32 Primul (hSnapShot, lpModuleEntry);
în timp ce (bModule)
dacă (! strcmp (lpModuleEntry.szModule, lpModuleName))
CloseHandle (hSnapShot);
retur (DWORD) lpModuleEntry.modBaseAddr;
>
bModule = Modul32Următor (hSnapShot, lpModuleEntry);
>
CloseHandle (hSnapShot);
retur NULL;
>

pentru că nu suntem în interiorul procesului - nu putem folosi funcția standard GetModuleHandleA, așa că folosesc cele de mai sus. Facem o combinație familiară:

"Game.dll" + 00111111 + 09 + 45 + 49 + DF Apoi:


dacă (Sănătate <5000)
WriteProcessMemory (proces, (LPCVOID) p4, PatchHealth, 4, NULL) și pe aceasta terminăm cu metoda din exterior (tneys) și du-te la dll

V. Metoda "în proces".

Ei bine, pentru că procesul nostru de încărcare dll, faptul că avem deja acces la „resurse“ ale jocului, mânerul nu este, numărul de proces, nu avem nevoie să știe, și să păstreze evidența ferestrei prea.

Creați un proiect nou, gol proiectului DLL și scrieți următoarele (din nou, structura de bază):

void onAtch ()
// se va întâmpla aici *: cool: magic: cool: *
>

BOOL WINAPI DllMain (HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
dacă (dwReason == DLL_PROCESS_ATTACH) // dll dacă a fost încărcat cu succes
onAtch (); // lucrează David Blaine: D
returnează TRUE;
> Descrieți variabilele:

HMODULE dll = GetModuleHandleA ("Game.dll"); Descriim funcția de mai sus:

Imaginați-vă același lanț ca și în exemplul anterior:

"Game.dll" + 00111111 + 09 + 45 + 49 + DFI Se pare ca aceasta:

surse:
<<Вот гадство! А здесь HIDE-тег. Обойти не получится. -) Злобный Шэдоу. -)>>







Trimiteți-le prietenilor: