最近玩新奇迹世界,发现里面加速挂满天飞(满天飞好啊,说明大家都在用,也就说明很公平,呵呵)。
从朋友那里拿来一个加速挂,发现里面有很多的木马病毒 无语了。
我主要逆向了加速挂的部分,其他的没仔细看,
然后自己照着写了一个加速挂,用着相当的放心啊,哈哈,
步骤:
1、通过窗口名和类名找到游戏窗口句柄,然后得到窗口的线程id,最后用SetWindowsHookEx设置键盘钩子。
HOOK_API BOOL SetHookWindowEx( IN LPCTSTR lpClassName, IN LPCTSTR lpWindowName )
{
if( NULL == lpClassName && NULL == lpWindowName )
return FALSE;
HWND hWnd = ::FindWindow( lpClassName, lpWindowName );
if( NULL != hWnd )
return SetHookWindow( GetWindowThreadProcessId( hWnd, NULL ) );
return FALSE;
}
HOOK_API BOOL SetHookWindow( IN DWORD dwThreadID )
{
HHOOK hHook = SetWindowsHookEx( WH_KEYBOARD, KeyboardProc, AfxGetInstanceHandle(), dwThreadID );
if( NULL != hHook )
{
g_hHook = hHook;
return TRUE;
}
return FALSE;
}
2、在钩子响应函数里调用SetTimer来替换定时器。
LRESULT CALLBACK KeyboardProc( int nCode,
WPARAM wParam,
LPARAM lParam
)
{
CallNextHookEx( NULL, nCode, wParam, lParam );
if( g_bIsHook )
{
if( g_bIsSetTimer )
{
if( wParam == VK_F5 ) // F5加移动速度
g_dwCurMoveSpeed += STEP_OF_MOVESPEED;
if( wParam == VK_F6 && g_dwCurMoveSpeed > 0 ) // F6减移动速度
g_dwCurMoveSpeed -= STEP_OF_MOVESPEED;
if( wParam == VK_F9 ) // F9加攻击速度
g_dwCurAttackSpeed += STEP_OF_ATTACKSPEED;
if( wParam == VK_F10 && g_dwCurAttackSpeed > 0 ) // F10减攻击速度
g_dwCurAttackSpeed -= STEP_OF_ATTACKSPEED;
}
}
else
{
g_bIsHook = TRUE;
g_dwCurMoveSpeed = DEFAULT_OF_MOVESPEED;
g_dwCurAttackSpeed = DEFAULT_OF_ATTACKSPEED;
SetTimer( 0, 0, 1000, (TIMERPROC)TimerProc );
g_bIsSetTimer = TRUE;
}
return 0;
}
3、在定时器回调函数里设置加速
VOID CALLBACK TimerProc( HWND hwnd,
UINT uMsg,
UINT_PTR idEvent,
DWORD dwTime
)
{
// 修改游戏中移动速度和攻击速度的变量,这里需要根据具体的游戏来设置。
PDWORD pTemp = (PDWORD)0x86A204;
pTemp = (PDWORD)( *pTemp + 0x0f34 );
DWORD dwTemp = *pTemp;
pTemp = (PDWORD)( dwTemp + 0x428 );
*pTemp = g_dwCurMoveSpeed;
pTemp = (PDWORD)( dwTemp + 0x444 );
*pTemp = g_dwCurAttackSpeed;
}