【问题标题】:Convert Assembly from Cheat Engine to C++将程序集从作弊引擎转换为 C++
【发布时间】:2021-12-02 21:35:36
【问题描述】:

我想为游戏编写汽车。我使用 Cheat Engine 并找到以下汇编代码:

push 014656DC
call 00633940
add esp,04
ret

我使用 Cheat Engine 将这段代码注入到应用程序中,并且它始终有效。

现在,我想使用 C++ 代码,所以我写了一个 DLL:

  • 头文件:
#ifdef DIVLIB_EXPORTS
#define DIVLIB_API __declspec(dllexport)
#else
#define DIVLIB_API __declspec(dllimport)
#endif

extern "C" {
    DIVLIB_API void ClickID();
}
  • 源文件:
void ClickID()
{
    _asm {
        push esi;
        push eax;
        mov esi, 0x014656DC;
        mov eax, 0x00633940;
        push esi;
        call eax;
        add esp, 0x04;
    }
}

我有 Main.exe 来调用这个 DLL

auto h_process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
char dll[] = "D:\\project\\DivHook\\divhook\\Debug\\divlib.dll";
HMODULE hinstDLL = LoadLibraryA(dll);
LPVOID LoadLibAddress = (LPVOID)GetProcAddress(hinstDLL, "ClickID");
LPVOID MemAlloc = (LPVOID)VirtualAllocEx(h_process, NULL, strlen(dll)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(h_process, (LPVOID)MemAlloc, dll, strlen(dll) + 1, NULL);
CreateRemoteThread(h_process, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddress, (LPVOID)MemAlloc, NULL, NULL);
CloseHandle(h_process);
VirtualFreeEx(h_process, (LPVOID)MemAlloc, 0, MEM_RELEASE | MEM_DECOMMIT);

但是,当Main.exe 运行时,我的游戏总是崩溃。

我用作弊引擎反复尝试了上述程序集,并确保它可以完美运行,但 C++ 代码总是崩溃。

【问题讨论】:

  • 如果您不检查返回码是否有错误,您将不得不通过艰难的方式找到错误。
  • 公平警告这是非常重要的,尤其是在具有 DEP 和 CFG 的现代系统上。 Cheatengine 可能会自行处理。手动操作会很丑。
  • 您提供的代码基本上是任意跳转。您确定每次程序运行时0x00633940 都有效吗?二进制文件很可能使用随机寻址。您尝试注入此代码的目的是什么?
  • 推送不需要弹窗?
  • 据我所知,您加载的 dll 不正确。我假设您在任意进程中注入它!?您将 dll 路径写入其他进程内存,但您不使用 LoadLibrary 加载它,而是在您自己的进程中使用 LoadLibrary。

标签: c++ cheat-engine


【解决方案1】:

好吧,将汇编转换为C++并不容易,实际上是不可能的,除非您可以反编译主可执行文件,否则您可以做到,但是要转换作弊引擎使用的汇编代码是不可能的。

您可以尝试通过使用注入游戏进程的 DLL 执行汇编代码来使其工作,但您需要管理其内存并为其提供某些指令。

首先尝试反编译主要的可执行文件,然后看看它会带给你什么。 一旦你找出指令是从哪一段源代码调用的,你就可以尝试通过再次使用 DLL 注入来对指令进行逆向工程,但至少你会知道该怎么做,但只是直接汇编成 C++ 不会发生。

【讨论】:

  • 虽然您的评论是相关的,而且我相信您是在讽刺,但请注意您的建议在某些法律领域可能是非法的,请参阅...en.wikipedia.org/wiki/Reverse_engineering
  • 啊,我猜这在某些地区是非法的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2018-12-03
  • 2015-04-21
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多