我制作了一个控制台来测试IsDebuggerPresent,并试图更改其输出。 DLL之前 存储器区域中注入:DLL后http://imageshack.us/photo/my-images/842/hso7.jpg/ 存储器区域中注入:http://imageshack.us/photo/my-images/59/i1jw.jpg/使用DLL注入Asm to C++
祝用C在004116D5从JE 004116DE地址(选择的灰度地址)改变到JNZ/JNE 004116DE ++。
DWORD asmAddy = 0x004116D5;
#define Naked __declspec(naked)
Naked void changeasm()
{
_asm
{
jnz 0x004116DE
}
}
的DllMain下,我用微软的Detours 1.5
DetourFunction((PBYTE)asmAddy,(PBYTE)changeasm);
图像后
,好像它跳到注入dll.Can人的记忆帮助我吗?我已经改变使用OllyDbg的操作码,它工作正常。
感谢您的答复。我发现使用谷歌Detours工作通过将一个jmp放置在我想要挂钩的地址,因此在后映像中有一个jmp而不是jnz/jne,然后它的地址跳转到我的函数(解释为什么它是注入的DLL中的地址)。然而,我的目标是像你说的那样做,但不写入内存字节,而是直接使用asm来更改它。 – Imaginarys
地址已分配。 如果您尝试写入受保护的内存,则只能对其进行更改。 在你看来,asm不会成为这里的“特殊解决方案”。 – icbytes
cdmh提到,如果修改dll,地址可能会改变。虽然这在某种程度上是正确的,但您可以也可能应该使用EnumerateProcessModules来查找要写入的代码的模块基址。这也将避免ASLR问题。 – XtrmJosh