游戏代码教程零基础(游戏辅助--获取人物属性代码编写)
一、在上节课DLL注入窗口我们已经实现了注入dll,这节课我们利用线程注入
DWORD WINAPI 窗口函数地址(LPVOID arg)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DLLTEST dt;
dt.DoModal();
FreeLibraryAndExitThread(theApp.m_hInstance, 123);//自动卸载dll
return 1;
}
BOOL CMFCDLLApp::InitInstance()
{
CWinApp::InitInstance();
DWORD 线程ID = 0;
::CreateThread(0, 0, 窗口函数地址, 0, 0, &线程ID);
return TRUE;
}
二、在窗口添加三个按钮,分别实现调试信息输出、解绑调试信息,获取护甲值
DWORD 读地址(UINT_PTR 地址)
{
__try
{
return *(DWORD*)地址;
}
__except (1)
{
return 0;
}
}
VOID CALLBACK 护甲(HWND h, UINT arg2, UINT_PTR arg3_id, DWORD time)
{
KillTimer(h, 11111);
const char* 参数1 = "player";
UINT_PTR 返回值 = 0;
UINT_PTR 函数地址 = 0x60C1F0;
__asm
{
push 参数1
call 函数地址
add esp, 4
mov 返回值, eax
}
DWORD 护甲 = 读地址(读地址(返回值 0xD0) 0x174);
char buf[256];
sprintf_s(buf, "护甲=%d\r\n",护甲);
printf(buf);
};
void DLLTEST::OnBnClickedButton1()
{
HWND 游戏窗口句柄 = FindWindowA("GxWindowClassD3d", "魔兽世界");
::SetTimer(游戏窗口句柄, 11111, 1, 护甲);
}
void DLLTEST::OnBnClickedButton2()
{
AllocConsole();
FILE* file = 0;
freopen_s(&file, "CONOUT$", "w t", stdout);
}
void DLLTEST::OnBnClickedGbtsck()
{
FreeConsole();
}
三、查看效果
四、完整项目下载地址
关注下方公众号编程有你,回复20220504
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com