|
You last visited: Today at 21:39
Advertisement
Find Pattern
Discussion on Find Pattern within the C/C++ forum part of the Coders Den category.
10/09/2013, 10:55
|
#1
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Find Pattern
Hey, komm nach Tagen langen herum googlen immer noch nicht mit Find Pattern zurecht.
1. Frage
Was auf dem Screen ist alles wichtig dafür, bzw. fehlt da noch etwas relevantes?
2. Frage
Mein Code sieht bisher so aus, was fehlt dort damit ich den Wert meiner HP auslesen kann, bzw. kann ich überhaupt den Code mit den Infos ausn Screen vollenden?
Code:
#include "stdafx.h"
bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask )
return false;
return (*szMask) == NULL;
}
DWORD dwFindPattern(HANDLE hProcess, DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
DWORD const dwBytesToRead = 0xFFFF;
BYTE bpBytesRead[dwBytesToRead];
DWORD lpNumberOfBytesRead;
for (unsigned int i=0;i<dwAddress - dwLen;i +=dwBytesToRead-strlen(szMask)){
ReadProcessMemory(hProcess,(LPCVOID)(dwAddress+i),bpBytesRead,dwBytesToRead,&lpNumberOfBytesRead);
for(DWORD j=0; j < dwBytesToRead-strlen(szMask)+1; j++)
if( bDataCompare( (BYTE*)( bpBytesRead+j ),bMask,szMask) )
return (DWORD)(dwAddress+i+j);
}
return 0;
}
int main()
{
HWND winNos = FindWindow( 0, "NosTale" );
int progId;
HANDLE hProg;
GetWindowThreadProcessId(winNos, (LPDWORD)&progId);
HANDLE hprog = OpenProcess( PROCESS_ALL_ACCESS, false, progId);
DWORD Adressbt = dwFindPattern(hprog, ???????, ???????, (BYTE*)"\x89\x43\x4C\x8B\x53\x48", "xxxxxx");
return 0;
}
3. Frage
Was kommt dort bei den Fragezeichen hin?
Code:
dwFindPattern(hprog, ???????, ???????, (BYTE*)"\x89\x43\x4C\x8B\x53\x48", "xxxxxx");
Suche jetzt schon seit 3 Tagen danach wie das richtig funktioniert, mir hat sogar jemand schon beim suchen geholfen, aber kam dennoch nichts raus womit wir das richtig kappiert haben. Hoffe diesmal wirds anders enden
Danke schon mal an alle die sich die mühe machen mir zu helfen.
Gruß
Skype: mariusgill2
|
|
|
10/09/2013, 11:17
|
#2
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Was fürn Skinpack, das ist Windows 8 ganz normal ohne Skinpack^^.
|
|
|
10/09/2013, 14:40
|
#3
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Zur 3. Frage : Erklärt doch die Definition für die Funk o.o einmal die Adresse von wo gesucht werden soll ( z.b. Base des Moduls) und einmal wie weit denn gesucht werden soll ( Länge )
|
|
|
10/09/2013, 17:40
|
#4
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
wird wohl
Code:
dwFindPattern(hprog,0x401000, 0x25A000, (BYTE*)"\x89\x43\x4C\x8B\x53\x48", "xxxxxx");
sein.
(steht doch alles beim SigMaker drinne)
|
|
|
10/09/2013, 17:59
|
#5
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
1) sollte soweit passen, Pattern ist da, Mask, Adresse und Length.
2) sollte ebenfalls soweit passen, es kann halt passieren, dass du durch das kleine Pattern mehrere Stellen im Code hast, die gefunden werden. Kann dann natürlich sein, dass die falsche Adresse rauskommt.
Ich nehmen an, deine HP sind da im Register? Dann wird dir das nichts bringen, da du dort nur Register findest. Du musst die Stelle finden, an der die (variable) Adresse in das Register, das später die Adresse modifiziert, geschrieben wird.
3) als erstes die Base Address, von der aus gesucht werden soll, das ist in deinem Falle die Base Address von Nostale + BaseOfCode, am Besten liest du die Adresse + die Prozess ID via Process32Next aus. Alternativ einfach die Base Address, die dir Olly da anzeigt, verwenden.
Danach wird noch die Length angegeben, die maximal abgesucht werden soll, das ist in deinem Falle ebenfalls das, was Olly ausgibt, 0x25a000.
|
|
|
10/09/2013, 19:12
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by snow911
1) sollte soweit passen, Pattern ist da, Mask, Adresse und Length.
2) sollte ebenfalls soweit passen, es kann halt passieren, dass du durch das kleine Pattern mehrere Stellen im Code hast, die gefunden werden. Kann dann natürlich sein, dass die falsche Adresse rauskommt.
Ich nehmen an, deine HP sind da im Register? Dann wird dir das nichts bringen, da du dort nur Register findest. Du musst die Stelle finden, an der die (variable) Adresse in das Register, das später die Adresse modifiziert, geschrieben wird.
3) als erstes die Base Address, von der aus gesucht werden soll, das ist in deinem Falle die Base Address von Nostale + BaseOfCode, am Besten liest du die Adresse + die Prozess ID via Process32Next aus. Alternativ einfach die Base Address, die dir Olly da anzeigt, verwenden.
Danach wird noch die Length angegeben, die maximal abgesucht werden soll, das ist in deinem Falle ebenfalls das, was Olly ausgibt, 0x25a000.
|
Man kann natürlich auch Code injizieren und das Register bearbeiten.
|
|
|
10/10/2013, 18:56
|
#7
|
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
|
Man kann auch einfach versuchen zu verstehen was diese Funktionen überhaupt machen.
Der Rest ist dann nämlich selbsterklärend!
|
|
|
 |
Similar Threads
|
[C++] Find Pattern Tutorial
04/07/2015 - Coding Tutorials - 17 Replies
Find Pattern Tutorial
Find Pattern wird dafür genutzt, bestimmte Funktionsadressen aus einem Prozess auszulesen.
Dazu wird der Byte-OpCode einer EXE, DLL, BIN oder dergleichen durchlaufen und nach einem vordefiniertem Byte-Muster durchsucht.
Am Anfang etwas Theorie:
Da die Find Pattern Funktion einen bestimmten Suchbereich erwartet muss dieser zuvor ausgelesen werden. Normalerweise wird immer von der Modulbase bis zum Code-Ende alles durchsucht. Dazu braucht man den Anfangswert (Base)...
|
Addylogger Pattern... How i can find it?
08/11/2012 - WarRock - 0 Replies
Hey dudes,
How i can find Patterns in OllyDBG? can someone explain that to me, please?
I already have a basic knowledge in OllyDBG.
Thank u :)
€: Or someone can give me a tut about that? I can´t find any tuts...
|
find pattern funktion.. hilfe
03/15/2009 - General Coding - 4 Replies
ich brauch mal etwas hilfe. 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.
DWORD dwFindPattern(DWORD dwStartAddress, DWORD dwEndAddress, BYTE *bMask, BYTE *bMask_O){
BYTE ScanCode_A = {};
/*
while(dwStartAddress < dwEndAddress){
ReadProcessMemory(hGW, (LPCVOID)dwStartAddress, &ScanCode_A, 1, 0);
if(ScanCode_A == bMask){
ReadProcessMemory(hGW, (LPCVOID)(dwStartAddress +...
|
All times are GMT +1. The time now is 21:39.
|
|