Find Pattern

10/09/2013 10:55 Doktor.#1
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?
[Only registered and activated users can see links. Click Here To Register...]

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 :D

Danke schon mal an alle die sich die mühe machen mir zu helfen. :)


Gruß


Skype: mariusgill2
10/09/2013 11:17 Doktor.#2
Was fürn Skinpack, das ist Windows 8 ganz normal ohne Skinpack^^.
10/09/2013 14:40 th0rex#3
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 ​Tension#4
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 snow#5
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 MrSm!th#6
Quote:
Originally Posted by snow911 View Post
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 buFFy!#7
Man kann auch einfach versuchen zu verstehen was diese Funktionen überhaupt machen.
Der Rest ist dann nämlich selbsterklärend!