📄 inject_hook.cpp
字号:
// inject_hook.cpp : 定义 DLL 的初始化例程。
//
#include "stdafx.h"
#include "inject_hook.h"
#include "Main.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CMain *p_Main = NULL; //主面板指针
BOOL bMainVisible = TRUE; //主面板是否可见
DWORD dwThreadID=0,dwProcessID=0; //游戏主程序线程ID和进程ID
HANDLE hProcess=0; //游戏主程序进程句柄
UINT NP_CreateDialog(LPVOID lpParam); //创建主面板线程
//UINT NP_Free_npggNT(LPVOID lpParam);
//
// 注意!
//
// 如果此 DLL 动态链接到 MFC
// DLL,从此 DLL 导出并
// 调入 MFC 的任何函数在函数的最前面
// 都必须添加 AFX_MANAGE_STATE 宏。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
//
// Cinject_hookApp
BEGIN_MESSAGE_MAP(Cinject_hookApp, CWinApp)
END_MESSAGE_MAP()
// Cinject_hookApp 构造
Cinject_hookApp::Cinject_hookApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 Cinject_hookApp 对象
Cinject_hookApp theApp;
// Cinject_hookApp 初始化
BOOL Cinject_hookApp::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}
/*
* 函数介绍:安装Hook,注入NP保护的游戏
* 输入参数:无
* 输出参数:无
* 返回值 :成功返回TRUE,失败返回FALSE
*/
extern "C" BOOL PASCAL EXPORT InstallHook()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
char OutMessBuff[100];
HHOOK hHook;
dwThreadID = GetWindowThreadProcessId(FindWindow(0,"twelvesky")/*FindWindow("Renderer","Dekaron")*/,0);
// GetWindowThreadProcessId(FindWindow(0,"twelvesky"),&dwProcessID);
/*
sprintf(OutMessBuff,"ThreadID=%08x,ProcessId=%08x",dwThreadID,dwProcessID);
OutputDebugString(OutMessBuff);
*/
//安装WH_GETMESSAGE钩子
hHook = SetWindowsHookEx(WH_GETMESSAGE, Hook_GETMESSAGE_Proc, theApp.m_hInstance, dwThreadID);
if (NULL == hHook)
{
char OutMessBuff[100];
sprintf(OutMessBuff,"SetWindowsHookEx-- 错误代码:%d,HookProc=%08x,ThreadID=%08x",GetLastError(),(DWORD)Hook_GETMESSAGE_Proc,dwThreadID);
OutputDebugString(OutMessBuff);
return FALSE;
}
sprintf(OutMessBuff,"(WH_GETMESSAGE)hHook=%08x",(DWORD)hHook);
OutputDebugString(OutMessBuff);
//安装WH_KEYBOARD钩子
hHook = SetWindowsHookEx(WH_KEYBOARD, Hook_KEYBOARD_Proc, theApp.m_hInstance, dwThreadID);
if (NULL == hHook)
{
char OutMessBuff[100];
sprintf(OutMessBuff,"SetWindowsHookEx-- 错误代码:%d,HookProc=%08x,ThreadID=%08x",GetLastError(),(DWORD)Hook_GETMESSAGE_Proc,dwThreadID);
OutputDebugString(OutMessBuff);
return FALSE;
}
sprintf(OutMessBuff,"(WH_KEYBOARD)hHook=%08x",(DWORD)hHook);
OutputDebugString(OutMessBuff);
return TRUE;
}
/*
* 函数介绍:键盘消息回调函数(WH_KEYBOARD)
* 输入参数:int nCode,WPARAM wParam,LPARAM lParam(系统传进来的)
* 输出参数:无
* 返回值 :无
*/
LRESULT WINAPI Hook_KEYBOARD_Proc(int nCode,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (lParam & 0x80000000)
{
if(wParam == 120)
{
if(p_Main == NULL)
{
AfxBeginThread(NP_CreateDialog ,THREAD_PRIORITY_NORMAL);
}//创建非模态对话框
else
{
bMainVisible = TRUE;
p_Main->ShowWindow(SW_SHOW);
}//显示非模态对话框
}//按下F9
}
return CallNextHookEx(NULL,nCode,wParam,lParam);
}
/*
UINT NP_Free_npggNT(LPVOID lpParam)
{
while (1)
{
HMODULE hMod = GetModuleHandle("npggNT.des");
if (hMod != NULL)
{
FreeLibrary(hMod);
OutputDebugString("找到npggNT.des,释放完毕!");
return FALSE;
}
Sleep(10);
}
return TRUE;
}
*/
/*
* 函数介绍:创建对话框线程
* 输入参数:lpParam 没有用到
* 输出参数:无
* 返回值 :对话框被销毁,返回FALSE
*/
UINT NP_CreateDialog(LPVOID lpParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
p_Main = new CMain;
p_Main->Create(IDD_MAIN);
p_Main->ShowWindow(SW_SHOW);
MSG msg;
BOOL bRet;
//对付十二之天,抢回焦点
while ((bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
p_Main->DestroyWindow();
p_Main = NULL;
return FALSE;
}
else
{
if ( !p_Main->IsWindowVisible())
{
if (bMainVisible)
{
p_Main->ShowWindow(SW_SHOW);
}
else
{
p_Main->ShowWindow(SW_HIDE);
}
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return TRUE;
}
/*
* 函数介绍:WH_GETMESSAGE消息回调函数
* 输入参数:int nCode,WPARAM wParam,LPARAM lParam(系统传进来的)
* 输出参数:无
* 返回值 :无
*/
LRESULT WINAPI Hook_GETMESSAGE_Proc(int nCode,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return CallNextHookEx(NULL,nCode,wParam,lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -