⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inject_hook.cpp

📁 内存扫描的源代码,自己建一个注入进程工具就可以实现进程内的内存扫描
💻 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 + -