参考
https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.E3QzcI&articleid=373
hooking linux与android
框架非常多,hook native,jni和java层的函数,但是需要研究原理,可以阅读开源框架的代码,比如xpose。
原生层hook
其实无论是hook还是调试都离不开ptrace这个system call
自己实现了个交叉编译make脚本,见同期博客
hook1获取目标系统调用
这个是获取目标信息
hook1:
用ps命令找到目标进程的pid。./hook1 xx 即可。原理就是用ptrace附着进程。 具体见代码注释,printf本质就是调用write这个系统调用,参数为流,内容,大小。
hook2更改目标内存
这个是更改目标内存
hook3动态执行sleep()函数
这个是调用用远程已有模块执行
hook4利用Ptrace动态加载so并执行自定义函数
这个失败了。
hook4:
inject.c:
关于arm的regs
pt_regs结构的定义:
还有一篇下暂时暂停,因为hook4不成功,且需要其成功
注入4不成功的原因是我的测试系统android>7.0其添加了加载so白名单,只有应用包内的so与系统白名单的so可以加载。因此加载失败
解决方案:
- 自己实现so加载,稳定但工作量太大
- 先注入修改linker,再加载-可行
后续可以继续参考蒸米的文章实现