c++ - 如何使用 asm Hook C++ 函数

标签 c++ assembly hook reverse-engineering

我想挂接一个 C++ 函数。但是我不想用ms detours的trampoline机制,取而代之的是我想全面打补丁。我可以获得函数所在的 DLL 的句柄,并且我有正确的偏移量(imageBase stuff ...)。那么怎么钩呢?而且我不知道参数的数据类型(var_4 和 arg_0),或者不需要它们?一般来说,我想用我自己的函数替换以下函数(我的函数几乎相同,只有一行改变):

sub_39001A40    proc near

    var_4       = dword ptr -4
    arg_0       = dword ptr  4
        push    ecx
        cmp dword_392ADAB4, 0
        jnz short loc_39001A4F
        call    loc_39024840

loc_39001A4F:
        push    esi
        mov esi, [esp+8+arg_0]
        lea eax, [esp+8+var_4]
        push    eax
        push    esi
        call    dword_392ADA98
        mov ecx, [esp+10h+var_4]
        add esp, 8
        add dword_392ADA80, ecx
        adc dword_392ADA84, 0
        add dword_392ADA90, esi
        pop esi
        adc dword_392ADA94, 0
        add dword_392ADA7C, 1
        pop ecx
        retn
sub_39001A40    endp

糟糕的是,我只能 Hook 函数,我知道哪些名称是用 ms detours 的。我不能绕道钩住那些 asm 函数,因为我需要传递参数的数据类型来创建函数结构!

编辑::::

“绕行到底有什么问题?”

我写道:“我不想使用 ms detours 的 trampoline 机制,而不是我想完全修补它。”和“这很糟糕,我只能 Hook 函数,我知道这些函数的名称是用 ms detours 的。我不能用 detours Hook 那些 asm 函数,因为我需要传递的参数的数据类型来创建函数结构!”而且我没有 C++ 文件的源代码。我只有十六进制转储。

“蹦床是一个实际的技术术语 :) 我只是想知道为什么@lua 不能使用它。”

我写:再读一遍我的句子,如果你还不明白为什么,我的英语不好。

“仅覆盖命名函数应该可行,当然您可能需要重新实现整个 DLL(取决于它是否对您有任何进一步的用途)。鉴于您对汇编程序的掌握,您可能会使用十六进制编辑器来编辑(拷贝)您要破坏的原始 DLL。”

我想 Hook 函数,因为我不想编辑文件。我无法覆盖我的函数,因为我不知道参数的数据类型和函数的名称。

@asveikau:感谢您的真正帮助,但我不想使用蹦床机制,我想覆盖该功能。

最佳答案

一个好的技巧是用这个替换前几条指令:

push dword xxxx ; where xxx = new code location
ret

这有点像经过混淆的 jmp。我这样写是因为它的汇编版本很容易在运行时用你的指针替换 push 操作数。它组装成:

68 XX XX XX XX c3

其中“XX XX XX XX”是您的小端地址。

然后你可以创建一个“调用旧版本函数”的代码位置,其中前几条指令是你用上面的序列替换的指令,然后跳转到原始代码中的下一条有效指令。

关于c++ - 如何使用 asm Hook C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7223407/

相关文章:

c++ - 程序在读取所有结构成员之前终止

c++ - 通过函数 C++ 截断 char 数组

c++ - 为什么我们不能在 C++ 中进行三向比较?

c++ - 非常简单的 x64 程序集/C++ 应用程序中 Unresolved external 错误

c# - Hook 浏览器的选项卡更改事件

c++ - 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?

java - 为什么Java编译成汇编两次?

linux - 指令内存地址是否改变?

php - _tk WordPress 主题 : How to add a custom menu item like a button and search form?

php - Woocommerce 产品插件 按值过滤插件