frida native层 hook的思路技巧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了frida native层 hook的思路技巧相关的知识,希望对你有一定的参考价值。
参考技术A frida的native层记录一下学到的技巧
对于hook native层时,静态分析so后发现有些方法字段啥的,跟踪链太长,进程跳转太过于导致无法向上,有时直接不知道从何处分析。
首先日志打开,这个是必须的,大部分的日志都是由一个字段来控制,找到这个字段修改它,在打印的日志的中,你会发现惊喜。
有的关键日志在并没有被打印出来,思路又陷入的僵局。
可以尝试hook libart.so 拿到jni的一些函数的值
比如findclass, getcharutf8String等等。
打印这个的函数值时,顺便打印下调用栈。
图片来自大佬的GitHub
https://github.com/lasting-yang/frida_hook_libart
frida inlineHook 中,有时候hook一些寄存器,会报错,这是因为他的指令又长又短,在32位中会常见,64位中都是长指令比较稳定不会报错。
如果你的是32位还报错,你可以向上或者向下的地址hook,观察你要hook的寄存器是否在其他的地址也能拿到值。
有的时候hook一些so时,so还未加载,到时地址是null的,在低版本中你可以hook dlopen, Module.findExportByName(null, 'dlopen');
在这个so被加载后再进行hook。dlopen,是底层用来加载so的函数;在高版本中hook android_dlopen_ext,;
有的时候修改参数的type 为JNIEnv* 时,修改失败(目前我没碰见,看到就记录下),可以导入jni.h来解决这个问题,还有一个简单方法是
shift+f11 打开loaded type libraries
然后右键 选择load type libaray,打开下面的窗口,选择Android arm就可以了
pass-----待记录
以上是关于frida native层 hook的思路技巧的主要内容,如果未能解决你的问题,请参考以下文章