|
|
// _CRC.cpp: implementation of the _CRC class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Jmp_hook.h"
/*#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif*/
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DWORD dwHSDllAddress = 0;
void *g_pEXEMirror = NULL;
DWORD dwExeMirrorStart;
DWORD dwExeMirrorEnd;
DWORD dwExeMirrorSize;
DWORD HookAddr_Hs_Crc;
CHookApi_Jmp hook_Hs_Crc;
void __declspec(naked) _stdcall HookFunc_Hs_Crc()
{
hook_Hs_Crc.StopHook();
while (TRUE)
{
Sleep(3000);
if (::FindWindow(TEXT(" opKart Client"),NULL) == NULL) break;
}
//exit(0);
}
DWORD HookAddr_Game_Crc;
DWORD HookAddr_Game_Crc_END;
CHookApi_Jmp hook_Game_Crc;
void __declspec(naked) _stdcall HookFunc_Game_Crc()
{
_asm
{
mov ecx,0
add ecx,edx
push ecx
cmp ecx,[dwExeMirrorStart]
jl J1
cmp ecx,[dwExeMirrorEnd]
jg J1
sub ecx,[dwExeMirrorStart]
add ecx,[g_pEXEMirror]
add al, [ecx]
pop ecx
jmp J2
J1:
pop ecx
add al, [ecx]
J2:
push [HookAddr_Game_Crc]
add dword ptr[esp], 0x9
ret
}
}
LPBYTE pSrcCrcCode;
LPBYTE pDestCrcCode;
LPBYTE pSrcCrc2Code;
LPBYTE pDestCrc2Code;
DWORD HookAddr_Game_Crc2;
CHookApi_Jmp hook_Game_Crc2;
DWORD dwTest;
void __declspec(naked) _stdcall HookFunc_Game_Crc2()
{
_asm
{
pushad
}
memcpy((LPBYTE)HookAddr_Game_Crc,pSrcCrcCode,6);
memcpy((LPBYTE)HookAddr_Game_Crc2,pSrcCrc2Code,6);
_asm
{
popad
}
_asm
{
push dword ptr [edx]
pushad
}
memcpy((LPBYTE)HookAddr_Game_Crc,pDestCrcCode,6);
memcpy((LPBYTE)HookAddr_Game_Crc2,pDestCrc2Code,6);
_asm
{
popad
push 0x00cf9d40
ret
}
}
void _HookCRCInit()
{
dwExeMirrorStart = 0x00401000;
dwExeMirrorEnd = 0x00A50000;
dwExeMirrorSize = dwExeMirrorEnd - dwExeMirrorStart;
//HS 检测内存区,改用内存映射
HANDLE hMapFile = NULL;
hMapFile = CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
PAGE_EXECUTE_READWRITE,
0,
dwExeMirrorSize,
TEXT("FILEKART"));
if (NULL == hMapFile)
{
return;
}
g_pEXEMirror = MapViewOfFile( //映射到本进程的地址空间
hMapFile,
FILE_MAP_READ|FILE_MAP_WRITE,
0,
0,
0);
memcpy((BYTE*)g_pEXEMirror, (BYTE*)dwExeMirrorStart, dwExeMirrorSize);
DWORD hEhsvcModule = NULL;
hEhsvcModule = (DWORD)GetModuleHandle(TEXT("ehsvc.dll"));
HookAddr_Hs_Crc = hEhsvcModule + 0x00251e9;//0x0025242;//0x0022162;//0x0022072
//hook_Hs_Crc = new CHookApi_Jmp;
//hook_Hs_Crc.Initial(HookAddr_Hs_Crc, (DWORD)HookFunc_Hs_Crc);
//hook_Hs_Crc.StartHook();
pSrcCrcCode = new BYTE[6];
pDestCrcCode = new BYTE[6];
pSrcCrc2Code = new BYTE[6];
pDestCrc2Code = new BYTE[6];
HookAddr_Game_Crc = 0x00DD680F;
//hook_Game_Crc = new CHookApi_Jmp();
hook_Game_Crc.Initial(HookAddr_Game_Crc,(DWORD)HookFunc_Game_Crc);
//.......源码多不能挣个发上来不过大体思路还是看得懂的 需要的可以加入我们论坛群号跟我要.... 有C语言版的哦 看起来不乱很清晰
CloseHandle(hMapFile);
}
void _UnHookCRC()
{
DWORD hEhsvcModule = NULL;
hEhsvcModule = (DWORD)GetModuleHandle(TEXT("ehsvc.dll"));
hook_Hs_Crc.StopHook();
return;
}
|
|