Value auf Offsets und Basepointer ausgeben lassen

08/04/2016 14:35 Bombasticx3#1
Hey yo ihr Coder,

folgendes:

Ich habe die Offsets und den Basepointer, Statische Adresse, Base Adresse (was ich nicht alles heute schon als Bezeichnugn dafür gesehen habe) aus einem Spiel ausgelesen.

Code:
DWORD Pointer = 0x041BDEC;
DWORD Offset1 = 0xAC;
DWORD Offset2 = 0x4C;
Diese wollte ich nun damit lesbar machen:

Code:
cout << "Value " << (*(WORD*)((*(DWORD*)((*(DWORD*)Pointer) + Offset1)) + Offset2)); //2 Offsets
Doch wenn ich die .dll injecte wird mir nur gesagt, dass sie nicht injected werden kann.
Wenn ich aber etwas andres aus der Konsole ausgeben lassen wie cout << "Hallo" << endl; kann ich sie ganz normal injecten.

Hätte wer eine Idee wieso?


MfG Bombasticx3
08/04/2016 15:13 BladeTiger12#2
Versuch erstmal nen neuen Thread aufzurufen:
Dann solltes es klappen :D.

Code:
#include <iostream>
#include <windows.h>

using namespace std;

DWORD Pointer = 0x041BDEC;
DWORD Offset1 = 0xAC;
DWORD Offset2 = 0x4C;

//Wird gerade eh nicht genutzt
DWORD WINAPI Main(LPVOID)
{
	FILE *stream;
	AllocConsole();
	freopen_s(&stream, "CONOUT$", "w+", stdout);
	freopen_s(&stream, "CONIN$", "r", stdin);

	int i;
	cout << "Value " << (*(WORD*)((*(DWORD*)((*(DWORD*)Pointer) + Offset1)) + Offset2)); //2 Offsets
	return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  reason,
	LPVOID lpReserved
)
{
	switch (reason)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(0, 0, Main, 0, 0, 0);
		break;
	}
	return TRUE;
}
08/04/2016 15:27 Bombasticx3#3

Immer noch nen Crash :/

Im Debugger bekomme ich ne Acces Violation reading location xxx.

aufgeräumt:

Code:
#include <iostream>
#include <Windows.h>

using namespace std;

DWORD Pointer = 0x041BDEC;
DWORD Offset1 = 0xAC;
DWORD Offset2 = 0x4C;

DWORD WINAPI Main(LPVOID)
{
	FILE *stream;
	AllocConsole();
	freopen_s(&stream, "CONOUT$,","w+",stdout);
	freopen_s(&stream, "CONIN$", "r", stdin);
	cout << "Value " << (*(WORD*)((*(DWORD*)((*(DWORD*)Pointer) + Offset1)) + Offset2));
	return 0;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  reason,
                       LPVOID lpReserved
					 )
{
	switch (reason)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(0,0,Main,0,0,0);
		break;
	}
	return TRUE;
}
08/04/2016 15:35 BladeTiger12#4
Ich habe gerade das ganze selbst gesucht.
Deine "Statische Addresse" stimmt nur halbwegs. So müsste es aussehen.


Wie es aussehen müsste, sieht man hier:

Da du nur die "Addresse" danach genommen hast, fehlt dieses "NosTaleX.dat/.exe...".

Das bekommst du wenn du eine DLL benutzt einfach über:
Code:
DWORD Pointer = (DWORD)GetModuleHandleA(0) + 0x041BDEC;
Optional wenn es mal nicht der "exe'n Name" da steht macht man einfach:
(Was du in diesem Falle nicht brauchst) (Sowas wie: Client.dll + 0x44444)
Code:
DWORD Pointer = (DWORD)GetModuleHandleA("Client.dll") + 0x44444;
08/04/2016 15:41 Bombasticx3#5
Quote:
Originally Posted by BladeTiger12 View Post
Ich habe gerade das ganze selbst gesucht.
Deine "Statische Addresse" stimmt nur halbwegs. So müsste es aussehen.


Wie es aussehen müsste, sieht man hier:

Da du nur die "Addresse" danach genommen hast, fehlt dieses "NosTaleX.dat/.exe...".

Das bekommst du wenn du eine DLL benutzt einfach über:
Code:
DWORD Pointer = (DWORD)GetModuleHandleA(0) + 0x041BDEC;
Optional wenn es mal nicht der "exe'n Name" da steht macht man einfach:
(Was du in diesem Falle nicht brauchst) (Sowas wie: Client.dll + 0x44444)
Code:
DWORD Pointer = (DWORD)GetModuleHandleA("Client.dll") + 0x44444;
Ah danke.
Auf die Idee hätte ich auch selber kommen können.
Aber irgendwann so viel gelesen und jeder sagt was andres, dann ist man auch verwirrt.