Pointer Ändert sich nach Neustart?

04/05/2011 23:36 Kronasify#1
Hey ich wette diesen Thread gabs schon öfter aber ich hab nichts gefunden was mich weiter gebracht hat.

Ich habe nun bei einem game Einen Pointer für erstellt der auch soweit so gut funktioniert also dürfte es somit auch der richtige sein =3

Doch immer wenn ich das Spiel Verlasse ("zur Lobby") Oder das spiel beende Is der Pointer zunichte "p->????????"

Ich benutzte Atm Cheate engine.

Ich bin mal so vorgegangen

-Adresse Rausgesucht
-Herausgefunden was in die Adresse schreibt
-0072B315 - 29 08 - sub [eax],ecx
-Dann steht da ja Die Adresse für den Pointer
In meinem Fall 04E775BC
-New Scan und hacken bei Hex
-Pointer adresse eingegeben

-Add adress manuality
-Hacken bei pointer und die neue adresse eingetragen
-bei Offset(Hex) eine 0
Und dann kam die Value der Hex adresse von oben raus

ty^^
04/06/2011 01:32 P-a-i-n#2
Wenn es ein richtiger Pointer ist dann ist er "Grün" sonst Cheat Tabels oder auch Code Caves schreiben.

[Only registered and activated users can see links. Click Here To Register...]
04/06/2011 12:04 Kronasify#3
Hey habe mir jetzt mal ein script zusammen gebastelt

Quote:
[ENABLE]

059D2574: #Cave Adresse#
mov eax,63
add [01005194],eax

04F675B4: #Normale Adresse#
jmp 059D2574
nop

[DISABLE]
04F675B4:
add [01005194],eax
Jedoch habe ich hier wieder das selbe problem die cave adresse ändert sich ständig sowie die adresse die eig verändert werden soll ?^^
04/06/2011 15:21 yihaaa#4
Musste sehen das du das dynamisch bekommst. Versuchs mal mit einer .dll injection und um die richtigen Adressen zu bekommen nimm die dwFindPattern-Methode. Diese findest du auf [Only registered and activated users can see links. Click Here To Register...].

MfG
04/06/2011 21:08 Kronasify#5
Quote:
Originally Posted by yihaaa View Post
Musste sehen das du das dynamisch bekommst. Versuchs mal mit einer .dll injection und um die richtigen Adressen zu bekommen nimm die dwFindPattern-Methode. Diese findest du auf [Only registered and activated users can see links. Click Here To Register...].

MfG
Ok Danke dir das Mit dem Dll ist neuland für mich werd mich aber mal rannsetzen

was meinst du mit dynamisch kann mir darunter nix vorstellen

Und dir richtige adresse hab ich doch sie ändert sich nur jedes mal^^
04/06/2011 22:05 yihaaa#6
Ja, die Adressen ändern sich. Aber die Bytes ( z.B. JMP 401010 ) bleibt ja immer gleich. Mit dem dwFindPlattern kannst du nach Strukturen suchen. Somit findest du auch das richtige Offset. Ist etwas schwer zu erklären. Wenn das mit der *.dll alles neu für dich ist, wird es schwierig. Versuch dich erst mal an einen Programm wo die Offsets immer gleich sind. Wenn noch Fragen sind kannste gerne fragen.

MfG
04/07/2011 00:04 Kronasify#7
Hey ja ich bins schon wieder sry^^

Ich habe jetzt durch die macht von Google eine Dll mit C++ erstellt.

Nun bei dem part wo ich die Adressen eingeben soll
Quote:
#define Playerpointer 0x00C93348
#define Z_Offset 0x00000128
Wollte ich fragen wie ich das umschreiben soll das dies mit bytes funktioniert . (also das er die adresse mithilfe der bytes sucht und dann verändert )

Zu disem dwFindPattern habe ich gegoogelt und auf der verlinkten seite nachgeschaut aber nix wirkliches gefunden (=garnichts^^)

Ps: Kann ich nicht einfach die Bytes aus Cheat Enginge benutzen? (siehe Bild)
[Only registered and activated users can see links. Click Here To Register...]
Und was ist mit dem Playerpointer gemeint?
Sont hab ich eig alles verstanden glaube ich
04/07/2011 14:07 yihaaa#8
Ich würde dir raten OllyDBG zu benutzen da du für dwFindPattern eine OllyPulgin benutzten kannst.[Only registered and activated users can see links. Click Here To Register...]
Du hast den Fehler gemacht die Adressen wieder fest zu definieren.

Hier erst mal die dwFindPattern Funktion von GD:
Code:
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( DWORD dwAddress, DWORD dwLen, BYTE* bMask, char* szMask )
{
	for ( DWORD i = 0; i < dwLen; i++ )
	{
		if ( bDataCompare( (BYTE* )( dwAddress + i ), bMask, szMask ) )
		{
			return ( DWORD )( dwAddress + i );
		}
	}
	return 0;
}
Dann musst du noch eins wissen und zwar das Handle von den Module. Ich habe das mit einen Snapshot gemacht.
So kannst du dir die richtigen Adressen holen:

Code:
	LPMODULEENTRY32 lpsModule = GetModuleInfo( GetCurrentProcessId( ), "Test.exe" );

	PBYTE pb = ( PBYTE )"\x76\x08\xF3\x0F\x11\x05\x00\x00\x00\x00";

	DWORD Addr = dwFindPattern( ( DWORD )lpsModule->modBaseAddr, lpsModule->modBaseSize, pb, "xxxxxx????" );
Wenn was nicht klar ist, dann frag nochmal nach.

MfG