Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 05:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Function with FindPattern is crashing

Discussion on Function with FindPattern is crashing within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
Function with FindPattern is crashing

Hi.

Ich habe eine simple ASM Funktion. Die Adressen suche ich mit FindPattern.
Das ganze gibt mir auch die richtigen Pointer aus:

109428c & 467b30.

Nun habe ich ein Problem. Hier ist die Funktion:

Code:
DWORD PickUpMove;
DWORD PickUpCall;


void PickUp(){
__asm{
        MOV ECX, DWORD PTR DS : [PickUpMove]
        CALL PickUpCall
    }
}

void InitiateHooks()
{
    DWORD PickupFunc = FindPattern("client.exe", "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\x8B\x0D\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xE9\x00\x00\x00\x00\x51\x8B\x4C\x24\x0C\x8D\x04\x24\x50\x6A\x00\x51\xE8\x00\x00\x00\x00\x83\xC4\x0C\x84\xC0",
        "xxxxxxxxxxxxxxx????x????x????xxxxxxxxxxxxx????xxxxx");
    PickupFunc += 19;
    DWORD PickUpCall2 = RelativeToAbsolute(PickupFunc + 1);
    PickUpCall = PickUpCall2;
    PickupFunc -= 19;

    PickupFunc += 14;
    DWORD Address1 = *(DWORD*)(PickupFunc + 1);
    PickUpMove = Address1;
    PickupFunc -= 14;


}
Wenn ich nun die Funktion PickUp aufrufe crasht das Spiel.
Wenn ich "PickUpMove" & "PickUpCall" aber direkt im Code bestimme geht alles perfekt:

Code:
DWORD PickUpCall = 0x467b30

void PickUp(){
    __asm{
        MOV ECX, DWORD PTR DS : [0x109428c]
        CALL PickUpCall
    }
}
Also ist das Problem das "0x". Wie kann ich mein DWORD zu "0x109428C" anstatt "109428C" machen?
Hinweis?

Danke
Friendplays1 is offline  
Old 05/02/2015, 21:44   #2
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Du musst den Klasseninstanz-Pointer in das EAX Register schieben und anschließend ins ECX Register.

Code:
enum StaticAddresses
{
    PickUpMove,
    PickUpCall
};

void PickUp()
{
	__asm
	{
		MOV EAX, PickUpMove
			MOV ECX, DWORD PTR DS : [EAX]
			CALL PickUpCall
	}
}
Edit: Funktionspointer wären hier auch deutlich eine schönere Lösung:
Code:
void PickUp()
{
    typedef void (__thiscall *PickUpPtr)(unsigned long arg);
    PickUpPtr fPickUp = reinterpret_cast<PickUpPtr>(FuncAddr);

    fPickUp(*reinterpret_cast<unsigned long*>(ClassPtr));
}
Ich tippe mal auf ein __thiscall
_asm is offline  
Old 05/02/2015, 22:11   #3
 
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
Das war ja einfacher als gedacht, danke dir
Kann geclosed werden.
Friendplays1 is offline  
Old 06/30/2015, 15:23   #4
 
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
Ich bins nochmal. Habe wieder ein Problem mit Findpatter.
Diesmal will ich kein ASM benutzen, sondern einfach einen Pointer ändern.
Wenn ich mit Findpattern den Pointer suche finde ich auch den richtigen.
Gebe den in einer Messagebox aus.
Aber wenn ich dann vom Pointer die Value ändern will kommt ein Zugriffserror.
Gebe ich im Code direkt die Adresse ein klappts, also liegts wieder am 0x.
In ASM klappte das ja mit
MOV EAX, Pointer.

Wie krieg ich das hin ohne ASM zu nutzen?
Danke nochmal
Friendplays1 is offline  
Old 07/06/2015, 12:53   #5
 
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
Quote:
Originally Posted by Friendplays1 View Post
Ich bins nochmal. Habe wieder ein Problem mit Findpatter.
Diesmal will ich kein ASM benutzen, sondern einfach einen Pointer ändern.
Wenn ich mit Findpattern den Pointer suche finde ich auch den richtigen.
Gebe den in einer Messagebox aus.
Aber wenn ich dann vom Pointer die Value ändern will kommt ein Zugriffserror.
Gebe ich im Code direkt die Adresse ein klappts, also liegts wieder am 0x.
In ASM klappte das ja mit
MOV EAX, Pointer.

Wie krieg ich das hin ohne ASM zu nutzen?
Danke nochmal

Code:
int* randomPtr = reinterpret_cast<int*>(109428C);
*randomPtr = 0xFF;
um der Variabel auf die der Pointer zeigt 255 zuzuweisen.
ƬheGame is offline  
Old 07/15/2015, 16:55   #6
 
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
Danke, brauchte ich dann nicht mehr, habs anders gelöst Ein letztes Problem nun. Möchte nun diese 2 Funktionen mit FindPatter finden. Wieder: Die messageboxen geben bei beiden das richtige Call & Move an. Nun habe ich es wie __asm gemacht und es erst in das eax register, dann ins ecx register geschoben. Folgender Fehler:



Das selbe auch wenn ich es nicht erst in das eax register schiebe.

Hier der Gesamte Code:

Quote:
DWORD Move1;
DWORD Call1;

DWORD Move2;
DWORD Call2;


int push1;
void Funktion2(){

__asm{
MOV EAX, Move1
MOV ECX, DWORD PTR DS : [EAX]
call Call1
mov [push1],eax
}


}

void Funktion1(int Wert){
__asm{
MOV EAX, Move2
MOV ECX, DWORD PTR DS : [EAX]
push Wert
push 0
call Call2
}

}


void SearchForPointer()
{
char curprc[MAX_PATH];
GetModuleFileName(NULL,curprc,sizeof(curprc));


__try{
DWORD Func1Search = FindPatternPointer(curprc, "\x8B\x0D\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x89\ x44\x24\x08\xC7\x44\x24\x04\x00\x00\x00\x00\xFF\x2 5\x00\x00\x00\x00\xCC\xCC\xCC\x83\xEC\x40",
"xx????x????xxxxxxxx????xx????xxxxxx");
DWORD Move2Found = *(DWORD*)(Func1Search + 1);
Move2 = Move2Found;

Func1Search += 5;
DWORD Call2Found = RelativeToAbsolute(Func1Search + 1);
Call2 = Call2Found;
Func1Search -= 5;




DWORD Func2Search = FindPatternPointer(curprc, "\x8B\x0D\x00\x00\x00\x00\x53\x50\xE8\x00\x00\x00\ x00\x8B\xCE\xE8\x00\x00\x00\x00\x84\xC0\x74\x64\x8 B\xCE\xE8\x00\x00\x00\x00\x50\xE8\x00\x00\x00\x00\ x83\xC4\x04\x84\xC0 ",
"xx????xxx????xxx????xxxxxxx????xx????xxxxx");
DWORD Move1Found = *(DWORD*)(Func2Search + 1);
Move1 = Move1Found;

Func2Search += 7;
DWORD Call1Found = RelativeToAbsolute(Func2Search + 1);
Call1 = Call1Found;
Func2Search -= 7;
}
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) {
}

}

Wenn ich manuell die Adressen eingebe und das aufrufe:

Quote:
Funktion1(push1);
klappt alles... Wo ist denn jetzt wieder der fehler? =(

Danke
Friendplays1 is offline  
Old 07/16/2015, 06:17   #7
 
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
Quote:
Originally Posted by Friendplays1 View Post
Danke, brauchte ich dann nicht mehr, habs anders gelöst Ein letztes Problem nun. Möchte nun diese 2 Funktionen mit FindPatter finden. Wieder: Die messageboxen geben bei beiden das richtige Call & Move an. Nun habe ich es wie __asm gemacht und es erst in das eax register, dann ins ecx register geschoben. Folgender Fehler:



Das selbe auch wenn ich es nicht erst in das eax register schiebe.

Hier der Gesamte Code:




Wenn ich manuell die Adressen eingebe und das aufrufe:


klappt alles... Wo ist denn jetzt wieder der fehler? =(

Danke
Wie viele Parameter hat die Funktion die du nun aufrufen möchtest?
ƬheGame is offline  
Old 07/16/2015, 12:59   #8
 
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
Funktion2 rufe ich zu erst auf, die schreibt einen Wert in integer push1.
Dann rufe ich Funktion1 auf die dann push1 pusht als parameter. Klappt auch ohne weiteres mit manuell eingetragenen adressen..
Beide Funktionen geben diesen Error aus wenn ich sie aufrufem
Friendplays1 is offline  
Old 07/16/2015, 15:15   #9
 
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
Quote:
Originally Posted by Friendplays1 View Post
Funktion2 rufe ich zu erst auf, die schreibt einen Wert in integer push1.
Dann rufe ich Funktion1 auf die dann push1 pusht als parameter. Klappt auch ohne weiteres mit manuell eingetragenen adressen..
Beide Funktionen geben diesen Error aus wenn ich sie aufrufem
Wie genau greiffst du auf den Zielprozess zu? Ist dein programm eine dll oder eine exe? Wenn ich du schnell hilfe willst, adde mich in skype.
ƬheGame is offline  
Reply


Similar Threads Similar Threads
FindPattern crash
06/17/2014 - C/C++ - 9 Replies
Hey coders, I was always using FindPattern by defining the module where i want to search the pattern using GetModuleHandle. But now i wanna scan for an address without module so i tried to scan the whole memory ( Bad idea i know but the dynamic address isn't always stored in a certain part of the memory ) Here's my code bool Match(const BYTE* pData, const BYTE* bMask, const char* szMask) { for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask )
External FindPattern liefert -1
09/16/2012 - C/C++ - 3 Replies
Hallo E*PVP Das Programm liefert immer -1 zurück. Die Sig stimmt (per DLL geht es), aber extern will es nicht ganz. Kann mir einer erklären warum er fehlschlägt? Habe es auch mit SetDebugPrivileges() probiert. Danke im vorraus. Gruß, Tom // INCLUDES // #include <iostream>
About Gateway Crashing and Shard manger crashing :|
07/31/2012 - Silkroad Online - 0 Replies
hello pepole .. recently i edited something's in database .. when i tryed to open gateway server it crash's ... at 1 second it crash's .. the gateway opened once but then Shard Manger load's 100% then it crash o_o somebody help me .. i checked it and i saw it was about cerftiction files .. but i didn't play with any file :|
Problem [ADDYLOGGER-FindPattern(Signatur)]
01/17/2011 - WarRock - 6 Replies
Hallo liebe Community ich verzweifel langsam an meinem Problem, Ich habe durch ein TUT gelernt wie ich die Signaturen finde, doch ich weiß nicht woran mein fehler liegt. Denn wenn ich mit DarkOlly die Signatur per SigMaker by P47R!CK erstelle, bekomme ich 2x die gleichen Signaturen beim herausfinden des Z & Y Offsets.



All times are GMT +1. The time now is 05:27.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.