WarRock EU - Code Snippets

03/05/2012 21:36 GraFixPL#6541
Search WallBug
03/05/2012 22:56 . χaωe#6542
Hey,
kann mir jemand erklären wie ich eine durch eine DLL eingeladene Funktion hooken muss. Also beispiel:

Ich hab eine DLL in WarRock injected. Nun möchte ich eine Funktion hooken, die in der d3dx9.dll gespeichert ist. Wie genau kriege ich jetzt die Addresse der Funktion heraus ? Ich habe die relative Addresse der Funktion in der d3dx9.dll aber ich weiß nicht, was ich darauf rechnen muss um schließlich an die Addresse der Funktion zu kommen. Über Hilfe würde ich mich sehr freuen :)

mfg. Sawe
03/05/2012 23:18 NikM#6543
Wenn ich dich richtig verstanden habe möchtest du wissen wie du die Sprungdistanz zwischen den beiden Funktionen errechnen kannst.
Um einfach zu deiner Funktion zu jumpen nimmst du 0xE9 als 1. Byte
Die folgenden 4 Bytes errechnen sich wie folgt:
(AddresseDeinerFunktion - (AddresseDerWahrenFunktion + 5));
Die 5 kommt von der Größe des geschriebenen Jumps.

Edit: Ratsam ist auch, wenn du mitten in Opcodes hineinschreibst den Rest des Befehls zu nopen (0x90) damit es nicht zum Absturz kommt.
Beispiel:
mov dword ptr ds: [eax], ecx //89 08
mov eax, dword ptr ds: [Addresse] //A1 00 00 00 00
Überschreiben:
89 08 A1 00 00 00 00
->
E9 ?? ?? ?? ?? 90 90
03/05/2012 23:27 . χaωe#6544
Danke, hat mir geholfen auch wenn es nicht das war was ich wissen wollte. Ich hatte einen Denkfehler, also hat sich erledigt :)

€: Hat jemand vielleicht eine Idee wie ich auf WindowsXP Prof SP3 Warrock Dumpen kann ? Bei mir kommt bei Kernel Detective immer 'Inaccesable from User-Mode' und von allen anderen kommt auch eine Error-Message.. bin am verzweifeln -.-
03/06/2012 11:55 Dogukan47#6545
Quote:
Originally Posted by . χaωe View Post
Danke, hat mir geholfen auch wenn es nicht das war was ich wissen wollte. Ich hatte einen Denkfehler, also hat sich erledigt :)

€: Hat jemand vielleicht eine Idee wie ich auf WindowsXP Prof SP3 Warrock Dumpen kann ? Bei mir kommt bei Kernel Detective immer 'Inaccesable from User-Mode' und von allen anderen kommt auch eine Error-Message.. bin am verzweifeln -.-
chimprec
03/06/2012 16:12 +Yazzn#6546
Quote:
Originally Posted by NikM View Post
(AddresseDeinerFunktion - (AddresseDerWahrenFunktion + 5));
wohl eher - 5.
03/06/2012 17:48 NikM#6547
Ne :O
Vllt meinst du es so:
(AddresseDeinerFunktion - AddresseDerWahrenFunktion - 5);

Das Ergebnis ist aber dasselbe.
03/06/2012 19:46 +Yazzn#6548
mein fehler.
shit happens.
03/06/2012 20:18 TheTime_TT#6549
Code:
// NoWater 06.03.2012

#define ADR_NoWater1 0x009F4F78
#define ADR_NoWater2 0x009F4F7C

void NoWater() 
{
	*(float*)ADR_NoWater1 = -1000;
	*(float*)ADR_NoWater2 = -1000;
}
[Only registered and activated users can see links. Click Here To Register...]
03/06/2012 23:15 . χaωe#6550
Quote:
Originally Posted by Dogukan47 View Post
chimprec
Danke aber dort wird Warrock erst garnicht in der Liste aufgeführt wenn ich es ausführe...
03/06/2012 23:23 AdrenalinaPL#6551
Quote:
Originally Posted by TheTime_TT View Post
Code:
// NoWater 06.03.2012

#define ADR_NoWater1 0x009F4F78
#define ADR_NoWater2 0x009F4F7C

void NoWater() 
{
	*(float*)ADR_NoWater1 = -1000;
	*(float*)ADR_NoWater2 = -1000;
}
[Only registered and activated users can see links. Click Here To Register...]
Tested..

@edit
Working :)
03/06/2012 23:27 Raz9r#6552
Quote:
Originally Posted by . χaωe View Post
Danke aber dort wird Warrock erst garnicht in der Liste aufgeführt wenn ich es ausführe...
Installier Process Hacker 2 und stoppe mit diesem den Prozess direkt nachdem er gestartet ist, also am besten bevor HackShield mit dem Laden fertig ist.
Dann solltest du mit CHimpREC32 dumpen können.
03/07/2012 14:46 GraFixPL#6553
SEARCH WallBugg!!!!!
03/07/2012 21:05 . χaωe#6554
Hey Forum,
Da ich jetzt (dank __underScore) wieder dumps von WR machen kann hab ich mich heute rangesetzt und wollte nun anfangen ein paar patterns zu kreeiren. Dummerweise weiß ich nicht genau wie das geht und ich kann kein Tutorial das ich mal gesehen hatte zu diesem Thema wiederfinden, auch nicht nach 2 std suche...

Im Hinterkopf habe ich nur noch das ich (wenn ich die Addy habe) z.B. in IDA einfach zu der Addy jumpe und die dazu markierten Bytes speichere. Soweit so gut, habe ich gemacht und gleich mit dem PlayerPointer begonnen. Doch dummerweise bestehen die zugehörigen Bytes nur aus 00 ... Kann mir jemand vllt noch einmal kurz erklären wie ich das zustande bringe ? :)

Danke im Vorraus, und noch einmal vielen dank an underScore !
greetz, Sawe
03/08/2012 10:49 TheTime_TT#6555
Quote:
Originally Posted by GraFixPL View Post
SEARCH WallBugg!!!!!
It's not the way to ask help ...

Method A :

Code:
#define Addr_Playerpointer 0x9EDD6C
#define OFS_X 0x102E0
#define OFS_Y 0x102F0
#define OFS_Z 0x102E8

void GlitchA() // Credits to : Sorry  I don't remember, send me a PM if this is your code. Thanks !
{
    float gtelex,gteley,gtelez;
    DWORD dwPlayerPtr = *(DWORD*)Addr_Playerpointer;
    gtelex = *(float*)(dwPlayerPtr + OFS_X);
    gteley = *(float*)(dwPlayerPtr + OFS_Y);
    gtelez = *(float*)(dwPlayerPtr + OFS_Z);
    
    if(GetAsyncKeyState(VK_UP)&1)
    {
        gtelex+=20;
        *(float*)(dwPlayerPtr + OFS_X) = gtelex;
        *(float*)(dwPlayerPtr + OFS_Y) = gteley;
        *(float*)(dwPlayerPtr + OFS_Z) = gtelez;

    }
    if(GetAsyncKeyState(VK_DOWN)&1)
    {
        gtelex-=20;
        *(float*)(dwPlayerPtr + OFS_X) = gtelex;
        *(float*)(dwPlayerPtr + OFS_Y) = gteley;
        *(float*)(dwPlayerPtr + OFS_Z) = gtelez;
    }
    if(GetAsyncKeyState(VK_RIGHT)&1)
    {
        gteley+=20;
        *(float*)(dwPlayerPtr + OFS_X) = gtelex;
        *(float*)(dwPlayerPtr + OFS_Y) = gteley;
        *(float*)(dwPlayerPtr + OFS_Z) = gtelez;
    }
    if(GetAsyncKeyState(VK_LEFT)&1)
    {
        gteley-=20;
        *(float*)(dwPlayerPtr + OFS_X) = gtelex;
        *(float*)(dwPlayerPtr + OFS_Y) = gteley;
        *(float*)(dwPlayerPtr + OFS_Z) = gtelez;
    }
}
Method B :

Code:
#define Addr_Playerpointer 0x9EDD6C
#define OFS_X 0x102E0
#define OFS_Y 0x102F0
#define OFS_Z 0x102E8

void GlitchB() // Credits to Eagl3
{
DWORD xPlayer = *(DWORD*)Addr_Playerpointer;
if(xPlayer != 0)
 {
 {*(float*)(xPlayer+OFS_Y) = (*(float*)(xPlayer+OFS_Y) +0.02);}
 {*(float*)(xPlayer+OFS_X) = (*(float*)(xPlayer+OFS_X) +0.02);}
 {*(float*)(xPlayer+OFS_Y) = (*(float*)(xPlayer+OFS_Y) -0.01);}
 {*(float*)(xPlayer+OFS_X) = (*(float*)(xPlayer+OFS_X) -0.01);}
}}