LivedForward 发表于 2022-12-13 15:43

对一键去签名[文件]校验的浅谈

本帖最后由 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一些检测的浅谈

怜渠客 发表于 2022-12-13 22:56

第二点“应用appComponentFormactory机制,对Apk Path、getPackageInfo实现Hook。”建议改成:
利用内置hook框架,如sandhook、lsplant 进行Java层函数hook,包括签名函数、文件函数。其实appComponentFormactory机制用得没那么多

逐雅斋 发表于 2022-12-13 16:28

不明觉厉,感谢分享,学习下!

大山猫ed 发表于 2022-12-13 18:50

这个办法很可行啊我去试试

ilvjyw 发表于 2022-12-13 19:25


这个办法很可行啊我去试试

lhlking 发表于 2022-12-13 20:49

倒底签名能否保证程序的正规性?

Tonyha7 发表于 2022-12-13 22:25

有点小问题 安卓13原包打开就检测到打开apk文件被重定向了

Triflingmat 发表于 2022-12-13 22:33

感谢分享思路

mt50802 发表于 2022-12-13 22:55

这个不错,支持楼主

dou520dou 发表于 2022-12-14 07:51

下载试试,感谢分享
页: [1] 2 3 4 5
查看完整版本: 对一键去签名[文件]校验的浅谈