Skip to content

hook read函数status为19 #69

Answered by caikelun
jh459100806 asked this question in Q&A
Discussion options

You must be logged in to vote

19: https://github.com/bytedance/bhook/blob/main/doc/status_code.zh-CN.md#19

意思是:bytehook在替换GOT中的函数地址值之前,会检查一下GOT中的原值,预期是“这个原值通过dladdr获取到的信息中的函数名”与“你当前hook的函数名”是一致的,在你的例子中就是“read”。如果不一致,就说明很可能在你hook之前已经有人hook了这个函数,这时候bytehook不会再尝试hook这个函数。

这样设计的理由大概是:进程中每个函数符号的caller so对应的GOT表中的值,都是全局的信息,理论上所有的hook库(或者任意的native代码逻辑)都可以随时修改这个值,“修改”本身并没有什么技术难度,所以有时候一个进程中会出现很多hook库都在尝试去修改GOT中的值,这些hook/unhook的时序都是不受控制,这种情况作为app整体来说可能是不希望看到的。bytehook是希望作为一个统一的plt/got hook平台来管理这些hook行为,希望app中所有的plt/got hook都通过bytehook来完成,而不是成为app中又一个新的不受控制的hook参与者。

但是如果你的目的只是要“完成hook”,可以修改一下这里的代码,把verify的过程去掉,让bh_hook_manager_verify_got_value函数直接返回0就可以跳过上面说的检查:

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@jh459100806
Comment options

Answer selected by jh459100806
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants