|
You last visited: Today at 06:06
Advertisement
find pattern funktion.. hilfe
Discussion on find pattern funktion.. hilfe within the General Coding forum part of the Coders Den category.
03/15/2009, 19:01
|
#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.
|
|
|
03/15/2009, 20:56
|
#2
|
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
|
Quote:
Originally Posted by __wadim
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.
|
|
|
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 char* pData, const unsigned char* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask )
return false;
return (*szMask) == 0;
}
unsigned long dwFindPattern( unsigned char *bMask,char * szMask, unsigned long dw_Address, unsigned long dw_Len)
{
for(unsigned long i=0; i < dw_Len; i++)
if( bDataCompare( (unsigned char*)( dw_Address+i ),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 :-)
|
|
|
03/15/2009, 21:09
|
#4
|
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
|
Quote:
Originally Posted by Bot_interesierter
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 (:
|
|
|
03/15/2009, 21:44
|
#5
|
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
|
danke euch beiden
|
|
|
 |
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.
|
|