实际项目如果要用到hook,这个部分花费的时间应该比单纯hook跳转的实现要大得多。在不考虑并发和效率的情况下,当hook函数中要调用原函数时,可以考虑临时恢复hook,并在调用完成后再次hook来解决。但是始终是相当不优雅的实现。 关于线程处理 修改hook目标的指令时,和x86平台下一样,也需要注意有可能某些线程刚好执行到被...
实际项目如果要用到hook,这个部分花费的时间应该比单纯hook跳转的实现要大得多。在不考虑并发和效率的情况下,当hook函数中要调用原函数时,可以考虑临时恢复hook,并在调用完成后再次hook来解决。但是始终是相当不优雅的实现。 关于线程处理 修改hook目标的指令时,和x86平台下一样,也需要注意有可能某些线程刚好执行到被...
__system_property_get函数,第二个参数既是入参也做返回参数的情况无法正确hook,可以hook到,但是回调原函数,无论是使用第二个参数还是new参数均无法得到值,所以肯定哪里存在bug。 一个函数只能被hook一次,再次hook调用原函数(备份的第一个hook函数)崩溃,所以两次hook不能再调用原函数。 基于以上种种情况,可能还是自...
hook_precall函数实现Thumb或者Arm模式被inline Hook目标函数指令的恢复即实现函数inline Hook的恢复还原;hook_postcall函数实现Thumb或者Arm指令模式inline Hook目标函数的指令覆盖即实现目标函数的再次inline Hook,hook_cacheflush函数调用Android系统的私有系统调用__...
Android Inline_Hook https://github.com/GToad/Android_Inline_Hook_ARM64 有32和64的实现,但是是分离的,要用的话还要自己把两份代码合并在一起。 缺点:1、不支持函数替换(即hook后不执行原函数),现在只能修改参数寄存器,无法修改返回值。2、不支持定义同类型的hook函数来接受处理参数,只能通过修改寄存器的方式...
基本原理是在目标函数执行区域中插入Jump指令,使得cpu跳转到我们的hook函数(shellcode)中。如果我们的hook函数和原目标函数的签名不一致,还需额外保存寄存器信息,跳转回原函数时恢复寄存器信息。inline hook原理虽简单,但是实现起来需要处理的细节很多,因为是直接去改so,所以和指令平台强相关,armv7,armv8,arm64,x86, ...
Android_Inline_Hook https://github.com/GToad/Android_Inline_Hook_ARM64 有32和64的实现,但是是分离的,要用的话还要自己把两份代码合并在一起。 缺点: 1、不支持函数替换(即hook后不执行原函数),现在只能修改参数寄存器,无法修改返回值。 2、不支持定义同类型...
Android Inline_Hook https://github.com/GToad/Android_Inline_Hook_ARM64 有32和64的实现,但是是分离的,要用的话还要自己把两份代码合并在一起。 缺点:1、不支持函数替换(即hook后不执行原函数),现在只能修改参数寄存器,无法修改返回值。2、不支持定义同类型的hook函数来接受处理参数,只能通过修改寄存器的方式...
图1. Inline Hook原理图 如图1所示,Inline Hook的核心原理。这里说明一下几个关键点: (1) 跳转指令的构建、从原指令跳转过去的底层桩函数,涉及系统汇编层,和Inline Hook的平台关系较大,既是ARM和THUMB、X86等均都有所不同;64位和32位也有所不同。本文实现以32位的ARM为样例实现。
5.Unicorn hook技术 Unicore是一款非常优秀的跨平台模拟执行框架,该框架可以跨平台执行Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64)等指令集的原生程序,通过模拟CPU,可以实现很多强大的功能,也可以实现函数级别的Hook。 参考资料:...