1.Java动态代{过}{滤}理PMS(Java层去除签名校验)。
2.应用appComponentFormactory机制,配合Inline Hook框架对Java层的Get Apk Path、getPackageInfo实现Hook。
3.使用Inline Hook 或 Got Hook 去Hook Native层的open函数,这种是在open Apk时进行重定向,
并没有修改获取Apk Path时的值。第2部分修改了获取Apk Path时的值,可以配合使用。
4.应用内存扫描或者Ptrace+Seccomp机制去Hook系统调用,比如openat,Seccomp机制去拦截,
然后Ptrace去修改R1(arm32)寄存器的值。
总得来说,目前App普遍都使用了内联汇编方法去手动解析CERT.RSA。这种只能使用第三种Hook方法
去实现IO Redirect,了,到了层级,就只能去做一些检测了,比如Apk Inode,其实所有的检测无非
围绕/proc/self/maps这个文件做文章。可以考虑对maps进行fake,这种方法需要配合dlopen,dlsym
,open函数实现maps数据的动态变化。另外就是尽量使用那种不直接依赖系统API的方式去做检测。
比如inode的检测话,去拦截stat,fstat相关系统调用就行了,所以不能直接只使用系统API方式去检测。
比如NP管理器Eirv去签名,就是使用了proot框架,Hook了openat系统调用,可以在github上看看
proot的代码和原理与实现,移植到Android平台的话,github上也有现成的repository。
proot : https://github.com/termux/proot
这里附上一个Demo,重定向检测方式综合了三种小检测,你可以测试你的Hook程序的健壮性。
攻与防都是相对的,没有什么绝对的安全,都是在对抗中,彼此相互进步。
如果你有任何建议意见或者想法都可以提出来和我交流进步。
DemoApk:
https://www.123pan.com/s/lN7UVv-pbYJ
IMG_20230226_205533.jpg (51.55 KB, 下载次数: 0)
下载附件
2023-2-26 20:59 上传
Screenshot_2023-02-26-20-54-54-533_com.ysh.hookap.jpg (157.28 KB, 下载次数: 0)
下载附件
2023-2-26 20:59 上传
Screenshot_2023-02-26-20-54-56-500_com.ysh.hookap.jpg (136.84 KB, 下载次数: 0)
下载附件
2023-2-26 20:59 上传
参考:
对Android Hook技术的一些浅谈
对Inline Hook,Got Hook和SVC Hook一些检测的浅谈