Requisiti :
Un PC
Un Cervello
Visual C++ 2010
10 Minuti
Salve a tutti , in questo tutorial vorrei spiegarvi come creare un piccolo NoMenù per WarRock con solo tre funzioni, in questo caso :
Digger se questa è concorrenza chiudimi il topic
- SuperJump
- NoFallDamage
- 5Slot
Prima di tutto, apriamo Visual C++ 2010, facciamo un nuovo progetto e seguiamo i seguenti screen :
Adesso scriviamo in Main.cpp prima di tutto gli #include, questi :
Codice:
#include <windows.h>
#include <stdio.h>
Ora scriviamo gli Address per far funzionare le funzioni(assicuratevi di avere quelli aggiornati):
In Questo caso ci servono ADR_PlayerPointer,ADR_ServerPointer,OFS_Slot5,ADR_NoFallDamage,OFS_Z(questo address stabilisce la posizione del player in gioco, è da questo che noi ricaveremo il SuperJump).
Scriviamo gli Address:
Codice:
#define ADR_PlayerPointer 0x00A4EE50 // Aggiornati al 22/12/12
#define ADR_ServerPointer 0x00A4EDE0// Aggiornati al 22/12/12
#define OFS_5SLOT 0x00C70C4// Aggiornati al 22/12/12
#define OFS_Z 0x0010308 // Aggiornati al 22/12/12
#define OFS_NoFallDamage 0x102E8 // Aggiornati al 22/12/12
Ora scriviamo le funzioni, iniziamo dal 5Slot, :
Codice:
void 5Slot()
{
DWORD xServer = *(DWORD*)ADR_ServerPointer;//DWORD xServer = ADR_ServerPointer, vuol dire che se noi scriviamo xServer il compilatore lo indica come ADR_ServerPointer.
if(xServer != 0)
{
*(long*)(xServer+OFS_5SLOT) = 1;//xServer(ADR_ServerPointer) + OFS_5SLOT = 1;
}
}
Adesso scriviamo NoFallDamage :
Codice:
void NoFallDamage ()
{
DWORD xPlayer = *(DWORD*)ADR_PlayerPointer; // Ancora le DWORD in questo caso però xPlayer indica ADR_PlayerPointer
if(xPlayer != 0)
{
*(float*)(xPlayer +OFS_NoFallDamage) = -20000; // DWORD xPlayer(ADR_PlayerPointer) + OFS_NoFallDamage = -20000;
}
}
Adesso SuperJump :
Codice:
void SuperJump ()
{
if(GetAsyncKeyState(VK_CONTROL) &1) // Questo indica che Se Viene Premuto Control(CTRL) l'azione viene eseguita
{
DWORD xPlayer = *(DWORD*)ADR_PlayerPointer;// Ancora le DWORD con PlayerPointer[/color]
if(xPlayer != 0)
{
*(float*)(xPlayer +OFS_Z) = 1000; // xPlayer(ADR_PlayerPointer) + OFS_Z(Posizione Personaggio) = 1000; ovvero che il player si troverà mille volte in alto.
}
}
}
Adesso lo Start Hack che è quello che raggruppa tutte le funzioni insieme e le attiva :
Codice:
void StartHack ()
{
for(;;) // Ciclo infinito
{
SuperJump();
5Slot();
NoFallDamage();
Sleep(20);
}
}
Adesso il codice che starta le funzioni (5Slot,SuperJump,NoFallDamage),
Dal codice qui sotto vedrete CreateThread ... StartHack.. perchè StartHack? Non dovrebbe esserci SuperJump,5Slot e NoFallDamage? Ecco, invece di scrivere tutte le funzioni una ad una , scriviamo StartHack che le raggruppa tutte
Codice:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)StartHack, NULL, NULL, NULL);
}
return TRUE;
}
Altrimenti sarebbe stato così :
Codice:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SuperJump, NULL, NULL, NULL);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)5Slot, NULL, NULL, NULL);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)NoFallDamage, NULL, NULL, NULL);
}
return TRUE;
}
FINITO IL NOMENU' PREMIAMO F7 ed è fatta
fonte : Frenz ( io
)