Metin2 GetCharMoney

01/17/2014 00:43 ~Caturix~#1
Hey Leute,

Ich wollte mir mal die char money zurück geben lassen.

Hier mal der asm code:
Code:
MOV ECX,DWORD PTR DS:[0x0FE54EC]
         MOV EAX,DWORD PTR DS:[ECX+4]
	 mov edx,DWORD PTR DS:[eax+10]
	 add ecx,04
	 push 0B
	 call edx
	 mov Money, edx
Könntet ihr mir helfen, wenn ja währe ich dankbar.

Mfg
01/17/2014 18:22 Roquan#2
Sorry, aber worum geht es bei dem Code?
01/18/2014 01:13 ~Caturix~#3
Ich kann c++^^
Ich will mir über den asm code mein yang zurückgeben lassen, mit dem charname hab ich es hinbekommen:
charname:

Aber mit dem yang nicht:
Code:
#include <Windows.h>

char* money;

char* Functionen::GetCharMoney()
{
	__asm
	{
				MOV ECX,DWORD PTR DS:[0x0FE54EC]
				MOV EAX,DWORD PTR DS:[ECX+4]
				ADD ECX,4
				PUSH 0xB
				CALL DWORD PTR DS:[EAX+0x10]
				MOV DWORD PTR SS:[ESP+0x8],EAX
				JMP DWORD PTR DS:[0x0E2A7EC]
				MOV Money,EAX
	}
	return Money;
}

void Functionen::SendChatPacket(char* Nachricht,int ChatType)
{
	__asm
{
	MOV ECX, SendChatPacketPointer
	PUSH ChatType
	PUSH Nachricht
    CALL SendChatPacketCall
}
}

BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{
 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
	 SendChatPacket(GetCharMoney() ,0);
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
  break;
 }
 return TRUE;
}
01/18/2014 09:50 Shigatu#4
Ich denke du sollst deine Frage in die C/C++ Sektion posten.
[Only registered and activated users can see links. Click Here To Register...]
01/18/2014 20:23 ​Tension#5
Ist ja auch kein Wunder.
Code:
MOV ECX,DWORD PTR DS:[0x0FE54EC]
MOV EAX,DWORD PTR DS:[ECX+4]
ADD ECX,4
PUSH 0xB
CALL DWORD PTR DS:[EAX+0x10]
MOV DWORD PTR SS:[ESP+0x8],EAX
JMP DWORD PTR DS:[0x0E2A7EC] //*!!*
MOV Money,EAX
Du springst zu einer Adresse also wird das
Code:
MOV Money, EAX
nicht erreicht.

Code:
mov ecx, dword ptr ds:[0x0FE65EC]
mov eax, dword ptr ds:[ecx+0x4]
add ecx, 0x4
push 0xB
call dword ptr ds:[eax+0x10]		//Hier wird ja anscheinend das Geld ausgelesen
mov dword ptr ss:[esp+0x8], eax     //Und hier in ESP+0x8 gespeichert was du aber eig. nicht brauchst.
mov Money, eax
neuer Code:
Code:
pushad
mov ecx, dword ptr ds:[0x0FE65EC]
mov eax, dword ptr ds:[ecx+0x4]
add ecx, 0x4
push 0xB
call dword ptr ds:[eax+0x10]
mov Money, eax
popad
Ich glaube aber mal das die Funktion keinen String wieder gibt oder? ( würde mal auf DWORD tippen )
Falls nicht musst du halt Money noch zu einem String machen aber das geht ja einfach mit sprintf oder so.
01/18/2014 21:20 ~Caturix~#6
Was macht pushad&popad

Der Neue Code geht auch nicht
01/18/2014 22:48 ​Tension#7
pushad - Pusht alles Register auf den Stack.
popad - Holt alle Register aus dem Stack zurück.

hast du schon einmal versucht einen Debugger zu verwenden?
Bzw. was passiert überhaupt?

Code:
char* Functionen::GetCharMoney()
{
	DWORD dwMoney = 0;
	char* szMoney = new char[MAX_PATH];
	_asm
	{
		pushad
		mov ecx, dword ptr ds:[0x0FE65EC]
		mov eax, dword ptr ds:[ecx+0x4]
		add ecx, 0x4
		push 0xB
		call dword ptr ds:[eax+0x10]
		mov dwMoney, eax
		popad
	}
	sprintf(szMoney, "%d", dwMoney); //Unschön aber geht
        return szMoney
}
01/18/2014 23:10 ~Caturix~#8
Also wenn ich mit CE Injecte dann steht: Failed to Inject
01/18/2014 23:12 ​Tension#9
Das hat nichts mit dem Code zutun sondern damit das du keine Rechte hast die Dll zu injecten o.ä .
01/18/2014 23:51 ~Caturix~#10
Nein wenn ich die function nicht aufrufe und nur so mache: m2.SendChackPacket("Hallo",0)
dann gehts, und das geht net:

Code:
char* Functionen::GetCharMoney()
{
	DWORD dwMoney = 0;
	char* szMoney = new char[MAX_PATH];
	_asm
	{
		pushad
		mov ecx, dword ptr ds:[0x0FE65EC]
		mov eax, dword ptr ds:[ecx+0x4]
		add ecx, 0x4
		push 0xB
		call dword ptr ds:[eax+0x10]
		mov dwMoney, eax
		popad
	}
	sprintf(szMoney, "%d", dwMoney); //Unschön aber geht
        return szMoney
}
01/19/2014 11:59 ​Tension#11
wie sieht denn die Funktion von dem Namen aus?
wie gesagt guck mit einem Debugger was da nicht funktioniert und behebe es dann.
01/19/2014 15:50 ~Caturix~#12
Das mit debugger hab ich schon versucht hier mal der asm code von dem namen:
MOV ECX,DWORD PTR DS:[0x0FE54EC]
MOV EAX,DWORD PTR DS:[ECX+4]
ADD ECX,4
CALL DWORD PTR DS:[EAX+0x14]
MOV CharName,EAX
01/19/2014 18:24 Omdi#13
Quote:
Originally Posted by ~Caturix~ View Post
Nein wenn ich die function nicht aufrufe und nur so mache: m2.SendChackPacket("Hallo",0)
Was passiert denn wenn du das so aufrufst?
Code:
m2.SendChatPacket(Functionen::GetCharMoney(), 0);)
01/19/2014 19:07 ~Caturix~#14
Hier mal die Main.cpp,Functionen.h,Functionen.cpp
01/26/2014 20:28 ~Caturix~#15
Kann wer helfen?