对一键去签名[文件]校验的浅谈
本帖最后由 LivedForward 于 2023-2-26 20:59 编辑目前一键去除文件校验总共大致分为4个层级:
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
参考:
对Android Hook技术的一些浅谈
对Inline Hook,Got Hook和SVC Hook一些检测的浅谈 第二点“应用appComponentFormactory机制,对Apk Path、getPackageInfo实现Hook。”建议改成:
利用内置hook框架,如sandhook、lsplant 进行Java层函数hook,包括签名函数、文件函数。其实appComponentFormactory机制用得没那么多 不明觉厉,感谢分享,学习下! 这个办法很可行啊我去试试
这个办法很可行啊我去试试 倒底签名能否保证程序的正规性? 有点小问题 安卓13原包打开就检测到打开apk文件被重定向了 感谢分享思路 这个不错,支持楼主 下载试试,感谢分享