hooking lua_CFunctions

04/25/2008 10:10 Tingle#1
leute die damit was anfangen können ^^ hier schenk ich euch, ich danke kynox da er so freundlich war mir das mitzuteilen

2 parameters: eax = addresse von der CFunction, ecx = name das lua verwendet

Code:
00692440 > 55               PUSH EBP
00692441   8BEC             MOV EBP,ESP
00692443   56               PUSH ESI
00692444   E8 A7FFFFFF      CALL WoW.006923F0                        ; mov eax, L ( the lua_State )
00692449   8BF0             MOV ESI,EAX
0069244B   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]
0069244E   6A 00            PUSH 0
00692450   50               PUSH EAX
00692451   56               PUSH ESI
00692452   E8 39900200      CALL WoW.006BB490                        ; lua_pushcclosure
00692457   8B4D 08          MOV ECX,DWORD PTR SS:[EBP+8]
0069245A   51               PUSH ECX
0069245B   68 EED8FFFF      PUSH -2712
00692460   56               PUSH ESI
00692461   E8 EA940200      CALL WoW.006BB950                        ; lua_setfield ( lua_setglobal macro )
00692466   83C4 18          ADD ESP,18
00692469   5E               POP ESI
0069246A   5D               POP EBP
0069246B   C3               RETN
für die filter-function

Code:
LUA_DEF_OFUNC( DefaultServerLogin )
{
	WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwFSR, bOrigFrameScript_Register, 16, 0 );
	return ( (lua_CFunction)dwOrigDefaultServerLogin )( L );
}

LUA_DEF_OFUNC( EnterWorld )
{
	dwOrigFSR = (DWORD)DetourFunction( (PBYTE)dwFSR, (PBYTE)FrameScript_Register_Hook );
	return ( (lua_CFunction)dwOrigEnterWorld )( L );
}

void __declspec( naked ) FrameScript_Register_Hook()
{	
	_asm
	{
		mov cmpChar, ecx
		pushad
	}

	LUA_HOOK_FUNC( DefaultServerLogin )
	LUA_HOOK_FUNC( EnterWorld )

	_asm
	{
		popad

		push eax
		push ecx
		call dwOrigFSR
		add esp, 8

		retn
	}
}
oder ihr köntet BP hooks benutzen

Code:
SETBP( dwFSR )

LONG WINAPI LuaExceptionCallback( struct _EXCEPTION_POINTERS *ExceptionInfo )
{
	char * cmpBuf = (char*)ExceptionInfo->ContextRecord->Ecx;

	ExceptionInfo->ContextRecord->Eip = (DWORD)FSR_Continue;
	return EXCEPTION_CONTINUE_EXECUTION;
}


char * cmpBuf = "";
DWORD dwSaveEbp = 0;
void __declspec( naked ) FSR_Continue()
{
	_asm
	{
		push ebp         // first command of the register func
		mov cmpBuf, ecx
		pushad
	}

#define REDIRECT_LUA_FUNC( n ) if( !strcmp( cmpBuf, #n ) ){ _asm popad _asm mov dwSaveEbp, ebp _asm mov ebp, dword ptr ss:[ ESP+0xC ] 
															_asm mov dwOrig##n, ebp _asm mov ebp, lua_hook_##n _asm mov dword ptr ss:[ ESP+0xC ], ebp 
															_asm mov ebp, dwSaveEbp _asm pushad }

	REDIRECT_LUA_FUNC( GetTime )

	_asm
	{
		popad
		jmp dwJump // dwJump = 0x00692440+0x1
	}
}

#define LUA_DEFINE_FUNC( n ) DWORD dwOrig##n; int lua_hook_##n( lua_State * L )

LUA_DEFINE_FUNC(GetTime)
{
	return ( (lua_CFunction)dwOrigGetTime )( L );
}
04/25/2008 10:39 Reckoning#2
thanks und so, aber sowas wär lvl 2 find ich, nicht underground oder puplic :).
04/25/2008 12:06 Wurmi#3
die meisten hier können doch eh nichts damit anfangen denke ich mal :P so wie ich^^ deswege is es doch nicht so schlimm das es hier gepostet wurde :P

mfg
04/25/2008 12:49 Harko#4
Quote:
Originally Posted by Reckoning View Post
thanks und so, aber sowas wär lvl 2 find ich, nicht underground oder puplic :).
a: der quatsch ist outdated und nicht für wow 2.4.1/2.4
b: ohne kompletten Source-Code sind diese Bruchstücke eh keine Hilfe
c: gibt es einfachere Wege Funktionen zu hooken als über irgendwelchen WoW Code

Meine Vermutung liegt nah, der Thread Ersteller hat nicht die leiseste Ahnung was er überhaupt gepostet hat.
04/25/2008 14:02 Reckoning#5
ich glaub tingle antwortet nicht mehr auf flames
04/25/2008 14:18 bLuE2010#6
Quote:
Originally Posted by Harko View Post
a: der quatsch ist outdated und nicht für wow 2.4.1/2.4
b: ohne kompletten Source-Code sind diese Bruchstücke eh keine Hilfe
c: gibt es einfachere Wege Funktionen zu hooken als über irgendwelchen WoW Code

Meine Vermutung liegt nah, der Thread Ersteller hat nicht die leiseste Ahnung was er überhaupt gepostet hat.
und selbst wenn, immerhin postet er überhaupt etwas statt nur zu leechen und doof daherzuflamen
04/25/2008 14:28 Harko#7
Quote:
Originally Posted by bLuE2010 View Post
und selbst wenn, immerhin postet er überhaupt etwas statt nur zu leechen und doof daherzuflamen
glaub mir, in diesen Forum gibt es nichts was sich für mich zum leechen lohnt ; )

oh aber ich kann auch total sinnlos aus dem Zusammenhang gerissenen Code posten:

Code:
00687EF0 int __cdecl Lua_MoveForwardStart()
{
  GetMovementObject();
  if ( CheckScriptCertificate(0) )
    Movement(16, 1, lastUserInput, 0);
  return 0;
}
cool nicht? ist sogar aus der aktuellen wow.exe und nicht von einer von vor 2 Jahren. Nur total sinnlos... *an den Kopf fass*
04/25/2008 18:32 bLuE2010#8
Quote:
Originally Posted by Harko View Post
glaub mir, in diesen Forum gibt es nichts was sich für mich zum leechen lohnt ; )
dann sag mir warum es dich weiterhin hierher verschlägt?
04/25/2008 19:24 Reckoning#9
Quote:
On all my warlocks I just hotkey all my dots to random keys and then PVP by smashing my face into the keyboard while screaming "I AM THE LEETNESS!" -- Angat
haha ^^
04/26/2008 18:54 Bosin#10
Harko hat Recht, es ist schon extrem sinnlos sowas hier ohne Zusammenhang zu posten.

Doch dabei fällt mir noch etwas auf ... du hast das ganze einfach aus einem [Only registered and activated users can see links. Click Here To Register...] auf GD.net rauskopiert...
Kynox mag dir vielleicht nen Link dazu gegeben haben, jedoch war das keine Erlaubnis das einfach woanders zu posten und dann auch noch ohne gamedecption.net oder den Thread-Starter( mich ) zu erwähnen.
04/27/2008 07:15 Tingle#11
ja, nur ich wollte nicht das die seite so bekannt wird, wurde mir auch geraten die seite nicht mit anzuhengen