Fail 发表于 2020-9-5 00:34:12

糖豆人辅助逆源


   这个辅助貌似N天前拿到的了,现已被和谐。当时还原出来了c++代码,由于也是没有加壳,看起来和源码并无太大区别,本质原理就是遍历内存搜索浮点数9.5(人物移动速度),然后将其保存到vector,调用writeprocmemory api 写入更快的速度(比9.5大的值)实现外挂功能,写入9.5还原速度,执行效率相当堪忧,好的方法是找到人物移动速度基址,直接改,因为遍历内存搜索太慢了。这里就不贴汇编代码的分析了,基本上就是一些Api的调用,push 参数 call。贴出部分代码,总滴来说就是一个学习的过程。

代码:

bool sFindGame() {//寻找游戏 遍历内存 搜索浮点数9.5
      speed.clear();
      DWORD fpid = GetProcessIDFromName(_T("FallGuys_client.exe"));//进程名取ID
      if (fpid == 0)
      {
                AfxMessageBox(_T("没有发现游戏进程! 先运行游戏"));
                return 0;
      }
      fHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, fpid);//取得进程句柄
      MEMORY_BASIC_INFORMATION MemInfo;
      for (static size_t address; VirtualQueryEx(fHandle, (LPVOID)address, &MemInfo, sizeof(MemInfo)); address += MemInfo.RegionSize)
      { //查询内存地址信息然后遍历搜索浮点数9.5 ,搜索到之后保存
                if (MemInfo.State != MEM_COMMIT)
                {
                        continue;
                }
                std::vector <float> memory(MemInfo.RegionSize);//定义一个动态数组
                if (!ReadProcessMemory(fHandle, (LPVOID)address, &memory, MemInfo.RegionSize, 0))//读取内存赋值给动态数组
                {
                        continue;
                }
                size_t size = MemInfo.RegionSize / sizeof(float); //内存取域大小除以浮点长度 即遍历次数
                for (size_t i = 0; i < size; i++)
                {
                        if (memory == 9.5f)
                        {
                              speed.push_back(address + (i * sizeof(float)));//搜到浮点数9.5然后保存到全局变量
                        }

                }
      }
}
void SetSpeed(float sp) {//这个函数就是写入移动速度数值

      for (size_t x = 0; x < speed.size(); x++) {
                WriteProcessMemory(fHandle, (LPVOID)speed,&sp, sizeof(sp), NULL);

      }
}
页: [1]
查看完整版本: 糖豆人辅助逆源