仅注入作弊DLL失效,需同时注入依赖DLL,求排查VS设置问题
问题描述
我出于学习目的使用digital-sdk源码,之前只注入作弊DLL就能正常运行。但修改Visual Studio设置并把源码复制到其他文件夹后,单独注入作弊DLL不再生效,必须同时注入编译生成的所有DLL才能正常工作。试了其他注入器也没用,怀疑是项目/Visual Studio设置出问题,其他项目运行正常。
相关代码
DWORD WINAPI HackThread(HMODULE hModule) { AllocConsole(); FILE* f; freopen_s(&f, "CONOUT$", "w", stdout); //My Stuff bla bla.. while (!GetAsyncKeyState(VK_END) & 1) { Sleep(20); } if (f) fclose(f); FreeConsole(); FreeLibraryAndExitThread(hModule, 0); return 0; } BOOL APIENTRY DllMain( HMODULE hmodule, DWORD reason_for_call, LPVOID reserved ) { if ( reason_for_call != DLL_PROCESS_ATTACH ) return FALSE; DisableThreadLibraryCalls( hmodule ); std::thread( instance ).detach( ); return TRUE; }
排查方向
- 依赖项链接方式变更:检查项目属性中
C/C++ -> 代码生成 -> 运行库,看是否从静态链接的/MT改成了动态链接的/MD;再看链接器 -> 输入 -> 附加依赖项,确认是否新增了需要动态加载的外部库。如果是动态链接,作弊DLL运行时必须依赖这些额外DLL才能加载。 - 输出目录与依赖路径问题:复制源码后,编译生成的依赖DLL可能没和作弊DLL在同一目录。Windows加载DLL时会按固定路径查找依赖,若依赖DLL不在进程当前目录、系统目录等位置,就会加载失败。可以把所有生成的DLL放到同一目录再尝试注入,或者检查
生成事件 -> 后期生成事件里的复制脚本,确认路径是否因源码迁移失效。 - 项目引用配置失效:如果作弊DLL项目引用了digital-sdk的其他子项目,复制后引用路径可能错误。进入
项目 -> 引用,确认引用的项目路径正确,且引用属性里的复制本地设为True,确保编译时依赖DLL会被复制到输出目录。 - 线程启动代码错误:注意到DllMain里启动的是
std::thread( instance ).detach(),但你的线程函数是HackThread,函数名不匹配。这会导致DLL加载后根本没启动预期的线程,看起来像是“无效”。应该改成std::thread(HackThread, hmodule).detach(),先修正这个代码错误再测试。
内容的提问来源于stack exchange,提问作者Pandorax
相关产品推荐
相关产品推荐

