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
für die filter-function
oder ihr köntet BP hooks benutzen
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
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
}
}
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 );
}