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

2022-11-30 02:27:20 +08:00
 gouchaoer

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

764 次点击
所在节点    问与答
4 条回复
CEBBCAT
2022-11-30 02:42:01 +08:00
可以。慢一点的方法是自学符号表、ELF 格式、汇编、函数调用方式。然后在合适的地方改写汇编即可。

但应该有工具,你搜搜看逆向工程,看看那些搞破解的人是咋做的
ysc3839
2022-11-30 03:55:36 +08:00
可以,这就是所谓的 inline hook ,直接修改函数头部的机器代码来 hook ,没有通用方法,需要针对不同的硬件指令集和系统 ABI/调用约定来设计方案。
jishuliu
2022-11-30 10:46:31 +08:00
可以看一下 Frida 的 Hook Native 函数,配合 IDA 分析后,进行内存 hook
gouchaoer
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX