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

查看 133|回复 9
作者:LivedForward   
目前一键去除文件校验总共大致分为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


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一些检测的浅谈

浅谈, 下载次数

lianquke   

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

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

感谢分享,学习下!
大山猫ed   

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

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

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

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

感谢分享思路
mt50802   

这个不错,支持楼主
您需要登录后才可以回帖 登录 | 立即注册

返回顶部