V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gouchaoer
V2EX  ›  问与答

可以 hook 二进制中定义的函数么?

  •  
  •   gouchaoer · 2022-11-30 02:27:20 +08:00 via Android · 982 次点击
    这是一个创建于 725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如在 main.cc 中定义了 void foo()函数,然后 main.cc 被编译成 a.out 。现在我没有 main.cc 源码,只有 a.out 和 foo 函数定义,请问我可以 hook 二进制 a.out 中的 foo 函数么?

    CEBBCAT
        1
    CEBBCAT  
       2022-11-30 02:42:01 +08:00 via iPhone
    可以。慢一点的方法是自学符号表、ELF 格式、汇编、函数调用方式。然后在合适的地方改写汇编即可。

    但应该有工具,你搜搜看逆向工程,看看那些搞破解的人是咋做的
    ysc3839
        2
    ysc3839  
       2022-11-30 03:55:36 +08:00
    可以,这就是所谓的 inline hook ,直接修改函数头部的机器代码来 hook ,没有通用方法,需要针对不同的硬件指令集和系统 ABI/调用约定来设计方案。
    jishuliu
        3
    jishuliu  
       2022-11-30 10:46:31 +08:00
    可以看一下 Frida 的 Hook Native 函数,配合 IDA 分析后,进行内存 hook
    gouchaoer
        4
    gouchaoer  
    OP
       2022-11-30 14:02:42 +08:00
    @CEBBCAT
    @ysc3839
    @jishuliu
    我在 github 上找到一个叫 dobby 的库,试了一下发现如果是外部 so 的函数,就能 hook ;但是如果是 main.cc 中的函数,就无法 hook ,感觉怪怪的,能帮忙看看么: https://github.com/jmpews/Dobby/issues/203
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2436 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:22 · PVG 10:22 · LAX 18:22 · JFK 21:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.