DLL注入替换已知偏移量C ++的字符串
Posted
技术标签:
【中文标题】DLL注入替换已知偏移量C ++的字符串【英文标题】:DLL inject replace a string at known offset C++ 【发布时间】:2013-08-11 04:58:43 【问题描述】:简单的问题,我对 c++ 或 windows api 不是很好,但我设法编写了一个 dll 来注入。基本上我知道我想替换的行的内存偏移量。
来自 IDA: .text:0051CA30 推送 16D8h
从 REC 反编译: _push(5848);
5848 或 16D8h 只不过是从文件中读取的值。我想要做的就是挂钩偏移量并打印我自己的文本。这应该很简单,但我一生都无法弄清楚,我尝试的一切只会让程序崩溃。可悲的是,替换文件中的文本不是一种选择,因为它很容易被替换并用于作弊。
我对刚才提到的所有功能替换都使用了弯路,以防万一。
【问题讨论】:
是否有某些原因需要注入 DLL 而不是使用WriteProcessMemory
写入其内存?
我不必注入,但它必须与我的其他注入函数在同一个 dll 中。
【参考方案1】:
如果要替换目标进程中的字符串,可以在注入的 DLL 中使用以下 sn-p。
char* buffer = reinterpret_cast<char*>(base + 0x16D8);
size_t length = strlen(buffer) + 1;
char myStr[length] = "...";
DWORD oldProtect;
VirtualProtect(buffer, length, PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(buffer, myStr, length);
VirtualProtect(buffer, length, oldProtect, nullptr);
注意:新字符串的长度必须小于或等于原字符串的长度。
【讨论】:
如果可能有代码与字符串在同一页面上(一些编译器将只读常量放入代码段),请使用 PAGE_EXECUTE_READWRITE,以防在修补字符串时另一个线程执行代码。the value of variable "length" cannot be used as a constant
?以上是关于DLL注入替换已知偏移量C ++的字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用scanf从用户输入十六进制指令并将其保存在char中。 (C)