void
InitSpeedHack()
{
DWORD
ndbase_speed;
DWORD
i;
DWORD
kernel32base;
DWORD
WINMMbase;
DWORD
ntdllbase;
DWORD
kernel_GetTickCount;
DWORD
WINMMtimeGetTime;
DWORD
ntdll_RtlqueryPerf;
DWORD
kernel_GetTick64;
CString szbuff;
wchar_t
szpid[10];
nhHero = g_dm->FindWindow(NULL,_T(
"游戏名"
));
DWORD
pid = g_dm->GetWindowProcessId(nhHero);
_itow(pid,szpid,10);
szbuff = L
"inject 2 <c:\\1.dll> "
;
szbuff = szbuff + szpid;
szbuff = szbuff + L
" 0 1"
;
OutputDebugStringW(L
"InitSpeedHack"
);
i = g_dm->DmGuard(1,szbuff.GetBuffer());
dbg_print(i);
wchar_t
* szsign = L
"55 89 E5 B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? A3"
;
wchar_t
wszbuff[4]={0};
CString szresult=L
""
;
CString csbuff,szback;
for
(i=0;i<0xf;i++)
{
if
(i<10)
{ wszbuff[0]=i+48;
}
else
{
wszbuff[0]=i+55;
}
csbuff = wszbuff;
szback = csbuff + L
"0000000-"
+ csbuff + L
"FFFFFFF"
;
szresult = g_dm->FindData(nhHero,szback,szsign);
OutputDebugStringW(szresult.GetBuffer());
if
(szresult!=
""
)
{
break
;
}
}
ndbase_speed = wcstoul(szresult.GetBuffer(),0,16);
ndbase_speed = ndbase_speed-0x204F0;
dbg_print(ndbase_speed);
speedhackversion_QueryPerformanceCounter = ndbase_speed+0x20440;
speedhackversion_GetTickCount64 = ndbase_speed+0x000203B0 ;
speedhackversion_GetTickCount = ndbase_speed+0x00020330;
realQueryPerformanceCounter = ndbase_speed+0x0002D950;
realGetTickCount64 = ndbase_speed+0x0002D940;
realGetTickCount = ndbase_speed+0x0002D930;
InitializeSpeedhack = ndbase_speed+0x000204F0;
kernel32base = g_dm->GetModuleBaseAddr(nhHero,L
"kernel32.dll"
);
kernel_GetTickCount = kernel32base+0x1110C;
kernel_GetTick64 = kernel32base+0x2EEC8;
WINMMbase = g_dm->GetModuleBaseAddr(nhHero,L
"WINMM.dll"
);
WINMMtimeGetTime = WINMMbase+0x26E0;
ntdllbase = g_dm->GetModuleBaseAddr(nhHero,L
"ntdll.dll"
);
ntdll_RtlqueryPerf = ntdllbase+0x388C4;
inlineHook(kernel_GetTickCount,speedhackversion_GetTickCount,realGetTickCount,0);
inlineHook(WINMMtimeGetTime,speedhackversion_GetTickCount,0,0);
inlineHook(ntdll_RtlqueryPerf,speedhackversion_QueryPerformanceCounter,realQueryPerformanceCounter,1);
inlineHook(kernel_GetTick64,speedhackversion_GetTickCount64,realGetTickCount64,0);
}
void
3被加速()
{
if
(InitializeSpeedhack==0)
{
checkspeedhack();
}
wchar_t
wsbuff[10];
CString csbuff;
float
fchange=3.0;
_itow(*(PDWORD)&fchange,wsbuff,16);
csbuff = L
"push "
;
csbuff =csbuff + wsbuff;
OutputDebugStringW(csbuff);
g_dm->AsmAdd(csbuff);
_itow(InitializeSpeedhack,wsbuff,16);
csbuff = L
"call "
;
csbuff = csbuff + wsbuff;
OutputDebugStringW(csbuff);
g_dm->AsmAdd(csbuff);
g_dm->AsmCall(nhHero,1);
g_dm->AsmClear();
}