本帖最后由 博弟弟丶 于 2021-10-18 23:46 编辑
[C++] 纯文本查看 复制代码 #include <iostream>
#include"Proc.h"
#include"men.h"
int main()
{
HANDLE hpross = 0;
uintptr_t modoubase = 0, localplayerPtr = 0, healthaddr = 0;//定义无符号整数多个变量
bool Bhealth = false, Bammo = false, Brecoil = false;//定义多个bool的变量
const int newValue = 1337;//常量1337
DWORD hporssID = GetProdid(L"ac_client.exe");//遍历这个进程exe获取到ID
if (hporssID)
{
hpross = OpenProcess(PROCESS_ALL_ACCESS, NULL, hporssID);//打开进程 最高权限
modoubase = GetModuleBaseAddress(hporssID, L"ac_client.exe"); //获取这个exe的模块地址
localplayerPtr = modoubase + 0x1958D4;//exe模块+偏移
healthaddr = FindDMAAddy(hpross, localplayerPtr, { 0x188 });//寻取多级指针 直到成功为止
}
else
{
std::cout << "没有找到该进程按回车键结束!" << std::endl;
getchar();
return 0;
}
DWORD dwExit = 0;
while (GetExitCodeProcess(hpross,&dwExit)&& dwExit==STILL_ACTIVE)//获取一个已中断进程的退出代码 非零表示成功
{
if (GetAsyncKeyState(VK_NUMPAD1)& 1)//热键1
{
Bhealth = !Bhealth;
}
if (GetAsyncKeyState(VK_NUMPAD2) & 1)//热键2
{
Bammo = !Bammo;
if (Bammo)
{
men::PatchEx((BYTE*)(modoubase + 0xC962c), (BYTE*)"\xFF\x06", 2, hpross);//相当于内存中 字节FF 06 这个子弹增加还是比较简单的 就一条指令 FF 06 dec [eax] 递减1
}
else
{
men::PatchEx((BYTE*)(modoubase + 0xC962c), (BYTE*)"\xFF\x0E", 2, hpross);//相当于内存中更改后的字节 FF 0E FF OE inc [eax] 递增 1
}
}
if (GetAsyncKeyState(VK_NUMPAD3) & 1)//热键3 这里说一下 按下3 则返回原始字节以关闭2 hack 这里无后座需要逆向一下 本人功力不足 所以就没
{
Brecoil = !Brecoil;
if (Brecoil)
{
men::NopEx((BYTE*)(modoubase + 0x63749), 10, hpross);//这里就相当于nop 10个字节
}
else
{
men::PatchEx((BYTE*)(modoubase + 0x63749), (BYTE*)"\x50\x8d\x4c\x24\x1c\x51\x8b\xce\xff\xd2", 10, hpross);//相当于恢复nop 也是10个字节
}
}
if (GetAsyncKeyState(VK_INSERT) & 1)
{
return 0;
}
if (Brecoil)
{
men::PatchEx((BYTE*)healthaddr,(BYTE*)&newValue,sizeof(newValue), hpross);
}
Sleep(10);
}
return 0;
}
|