Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 06:06

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

Advertisement



find pattern funktion.. hilfe

Discussion on find pattern funktion.. hilfe within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
find pattern funktion.. hilfe

ich brauch mal etwas hilfe. ich hab irgendwo ein denkfehler oder der code is total fürn *****. vlt hab ihr ja bessere funktionen, würd mich freuen wenn ihr eine hier posten könntet.

Code:
DWORD dwFindPattern(DWORD dwStartAddress, DWORD dwEndAddress, BYTE *bMask, BYTE *bMask_O){
	BYTE ScanCode_A[sizeof(bMask)] = {};
	/*
	while(dwStartAddress < dwEndAddress){
		ReadProcessMemory(hGW, (LPCVOID)dwStartAddress, &ScanCode_A[0], 1, 0);
		if(ScanCode_A[0] == bMask[0]){
			ReadProcessMemory(hGW, (LPCVOID)(dwStartAddress + bMask_O[1]), &ScanCode_A[1], 1, 0);
			if(ScanCode_A[1] == bMask[1]){
				ReadProcessMemory(hGW, (LPCVOID)(dwStartAddress + bMask_O[2]), &ScanCode_A[2], 1, 0);
				if(ScanCode_A[2] == bMask[2]){
					ReadProcessMemory(hGW, (LPCVOID)(dwStartAddress + bMask_O[3]), &ScanCode_A[3], 1, 0);
					if(ScanCode_A[3] == bMask[3]){
						return dwStartAddress;
					}
				}
			}
		}
		dwStartAddress++;
	}
	*/

	while(dwStartAddress < dwEndAddress){
		for(int i=0; i<(sizeof(bMask)-1); i++){
			ReadProcessMemory(hGW, (LPCVOID)(dwStartAddress + bMask_O[i]), &ScanCode_A[i], 1, 0);
			if(ScanCode_A[i] == bMask[i])
				return dwStartAddress;

		dwStartAddress++;
	}
}

ich rufs dann so auf:
BYTE Pattern_A[]   =	{85, 81, 139, 51};
BYTE Pattern_A_O[] =	{0, 0x3, 0x6, 0xD};
DWORD x = dwFindPattern(A_STARTFUNC, A_ENDFUNC, Pattern_A, Pattern_A_O) + A_FUNC_OFFSET;
das was da oben auskommentiert ist wollte ich in eine schleife, aber der findet mir immer die falsche funktion. schaut mal bitte drüber.. ich seh da nichts mehr.
__wadim is offline  
Old 03/15/2009, 20:56   #2
 
Atheuz's Avatar
 
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
Quote:
Originally Posted by __wadim View Post
ich hab irgendwo ein denkfehler oder der code is total fürn arsch. vlt hab ihr ja bessere funktionen, würd mich freuen wenn ihr eine hier posten könntet.
Hast du nachgeschaut ob die gefundene Adresse in der nähe liegt von deiner Wunschadresse oder bzw die falsch gefundene auch deinem Muster entspricht? Ansonsten verstehe ich nicht wieso du das in der Schleife so komplizierst machst, wird wohl daran liegen das ich nur kurz draufgeschaut habe... alternative;

Code:
DataCompare(const unsigned char *data,
    const unsigned char *bmask, const char *szMask)
{
    for(; *szMask; ++szMask, ++data, ++bmask)
    {
        if( *szMask == 'x' && *data!= *bmask )
            return false;
    }
    return (*szMask) == 0;
}
unsigned long findPattern(HANDLE proc, unsigned char *bmask,
    char *szMask, unsigned long address = 0, unsigned long len = 4)
{
    unsigned long retval = 0;
    unsigned long dataLen = strlen(szMask);
    unsigned char *data = new unsigned char[ dataLen + 1 ];
    SIZE_T bytesRead;

    for(unsigned long i = 0; i < len; i++)
    {
        long curAddr = address + i;
        bool success = ReadProcessMemory(proc, (LPCVOID)curAddr, data,
            dataLen, &bytesRead);

        if( !success || bytesRead == 0 )
            continue;

        if( DataCompare(data, bmask, szMask) )
        {
            retval = address + i;
            break;
        }
    }

    delete [] data;
    return retval;
}
Anwendungsbeispiel;
pattern = string.char(0x60, 0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0x04, 0x02);
findPattern(proc, pattern, "xx????xxx", 0x00840000, 0x000A0000);

Wichtig dabei ist, das x und ? einen einzelnen opcode/hexbit darstellen.
x = statisch.
? = dynamisch.
Wobei dynamische stellen in der pattern immer als 0xFF dargestellt werden muss.
B8 wäre mov, von daher kann man ausgehen das die Adresse hierzu dynamisch ist und wird folglich mit 0xFF 0xFF 0xFF 0xFF ersetzt.
Atheuz is offline  
Thanks
1 User
Old 03/15/2009, 20:57   #3
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Also deine Funktion sieht völlig verkorkst aus ^^ hier mal funktionierender Code:
PHP Code:
bool bDataCompare(const unsigned charpData, const unsigned charbMask, const charszMask)

{

    for(;*
szMask;++szMask,++pData,++bMask)

        if(*
szMask=='x' && *pData!=*bMask )

            return 
false;

    return (*
szMask) == 0;

}

unsigned long dwFindPatternunsigned char *bMask,char szMaskunsigned long dw_Addressunsigned long dw_Len)

{

    for(
unsigned long i=0dw_Leni++)

        if( 
bDataCompare( (unsigned char*)( dw_Address+),bMask,szMask) )

            return (
unsigned long)(dw_Address+i);

    return 
0;


und so könnte ein Aufruf aussehen:
PHP Code:
unsinged long SomeFunction dwFindPattern( (BYTE*)"\x56\x57\x68\x00\x00\x00\x00\xB8\x05""xxx????xx" /*dwAdress*/0x00401000,/*dwLen*/ 0x00861FFF); 
Credits dafür gehen ans Gamedeception Forum, ich weiß leider nimmer wie der User heißt der es geschrieben hat.

Edit: war wohl zu langsam und der Code ist übrigens fürs Injecten da, wie man daran sieht das er mit Pointern Arbeitet :-)
Bot_interesierter is offline  
Thanks
1 User
Old 03/15/2009, 21:09   #4
 
Atheuz's Avatar
 
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
Quote:
Originally Posted by Bot_interesierter View Post
der Code ist übrigens fürs Injecten da, wie man daran sieht das er mit Pointern Arbeitet :-)
Ich hatte leider den Post auf GD nichtmehr gefunden, hatte nurnoch diese version (:
Atheuz is offline  
Thanks
1 User
Old 03/15/2009, 21:44   #5
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
danke euch beiden
__wadim is offline  
Reply


Similar Threads Similar Threads
On / Off funktion hilfe ;) gesucht ^^
08/31/2010 - WarRock - 0 Replies
ich check nicht so ganze die on/off funktion in einen nomenue könnte hilfe gebrauchen ;) ist das soweit richtig? oder eher so eine funktion?
Hilfe bei Funktion beenden
04/21/2010 - AutoIt - 1 Replies
Hi, Ich schreibe an einem Programm... eigentlich sollte ich ja wissen, wie das geht, doch ich bekomms net hin. Ich will eine Shcleife aufrufen und sobald ich dann den "Beenden" Button klicke soll sich die Schleife beenden. Hier der Code:
Ranking mit Such-Funktion !Hilfe!
02/02/2010 - Metin2 Private Server - 0 Replies
Hey, hat jemand ne Ahnung davon wie man ne Such Funktion scripted? weil ich hätte bei meiner ranking gerne so eine funktion dabei, damit man das lvl der spieler auch rausfinden kann^^ also wäre sehr nett von euch wenn ihr es versucht, da ich es nicht ganz hinbekomme^^ immer fehler.... MfG DraaaKe
C++ Attack funktion bitte um hilfe
11/04/2009 - C/C++ - 8 Replies
Hey Leute Sry falls die überschrift nicht ganz dem thema entspricht. Also ich möchte gerne eine attack funktion schreiben mit folgenden sachen. Er soll Mob angreifen (das ist einfach) Falls mehrere mobs mich angreifen, soll er weglaufen oder sich teleportieren (noch nicht gelöst).
Hilfe bei ner Funktion
11/04/2006 - General Coding - 10 Replies
Hallo, ich musste für jemanden ne funktion schreiben, die prüft ob ne zahl unter 100 liegt soweit so gut hab ich folgenden code geschrieben: if zahl == 0 then zahlunter100; if zahl == 1 then zahlunter100; if zahl == 2 then zahlunter100; if zahl == 3 then zahlunter100; if zahl == 4 then zahlunter100;



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


Powered by vBulletin®
Copyright ©2000 - 2026, 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 ©2026 elitepvpers All Rights Reserved.