外挂之路_游戏钩子注入_调用窗口
跟MFC的dll基本一样,只不过是在dll中创建一个窗体
BOOL CmfcdllApp::InitInstance() { CWinApp::InitInstance(); AFX_MANAGE_STATE(AfxGetStaticModuleState()); AfxMessageBox(L"我是动态链接库入口点"); return TRUE; } BOOL CmfcdllApp::ExitInstance() { CWinApp::ExitInstance(); AFX_MANAGE_STATE(AfxGetStaticModuleState());/* AfxMessageBox(L"我是动态链接库出口点"); */ //释放资源 if(mydlg1){ delete mydlg1; mydlg1 = NULL; } return TRUE; } extern "C" __declspec(dllexport) int add(int a,int b)//我是导出函数 { return a+b; } int sub(int a,int b) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); AfxMessageBox(L"我是sub方法"); return a-b; } LRESULT CALLBACK Gameproc(int nCode,WPARAM wParam, LPARAM lParam) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); PMSG pMsg = (PMSG)lParam; if(pMsg->message == WM_KEYUP) { if(pMsg->wParam == VK_HOME)//如果是HOME键 { if(mydlg1 == NULL) { mydlg1 = new myDlg(); mydlg1->Create(IDD_DIALOG1); mydlg1->ShowWindow(TRUE); } else { if(mydlg1->IsWindowVisible()) mydlg1->ShowWindow(FALSE); else mydlg1->ShowWindow(TRUE); } } } return CallNextHookEx(0,nCode,wParam,lParam); } void setHook() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); HWND gameh=FindWindow(NULL,L"145sdf"); if (gameh==0) { AfxMessageBox(L"未找到游戏"); return; } DWORD tid=::GetWindowThreadProcessId(gameh,NULL); ::SetWindowsHookEx(WH_GETMESSAGE,Gameproc,::GetModuleHandle(L"mfcdll.dll"),tid); }
窗体代码:
void myDlg::OnBnClickedButton1() { int abc = 120354; _asm{ mov eax,abc mov ebx,0x00486150 mov [ebx],eax } }
把dll注入到游戏进程的好处就是,可以直接用内联汇编访问游戏中的数据,
测试dll代码:
BOOL CmydllTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 HMODULE hdd=LoadLibrary(L"mfcdll.dll");//加载动态链接库 sub=(xxxx*)GetProcAddress(hdd,"setHook");//获得动态链接库里面的函数指针 if (sub) { ::AfxMessageBox(L"加载成功"); } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CmydllTestDlg::OnBnClickedButton1() { sub(); }
游戏代码:
.版本 2 .程序集 窗口程序集1 .程序集变量 zz, 整数型 .子程序 _按钮1_被单击 zz = zz + 125 编辑框1.内容 = 到文本 (zz)

浙公网安备 33010602011771号