用的动态代{过}{滤}理技术,fourbrother大咖出品的kstools。在那个时候,我针对这个出了一个检测,
就是任何被Java动态代{过}{滤}理的接口,它的父类都是Proxy。还有直接到native层去获取Apk路径,然后手动
解析签名信息。kstools机制就是在attachBaseContext函数里面优先替换掉系统PMS服务。
大概2-3年前,又有了更先进的Hook技术,爱加密的加固机制除了壳以外,还有一层工厂类AppComponentFactory,
在Apk整个解密运行的生命周期中,都会对其进行监控。
到了今天,我看到了终极Hook方案:Hook系统调用。应用seccomp机制,像proot、VirtualApp、Ratel平头哥等等。
我们知道,Hook方式有root和免root,root可以做到全局Hook,免重打包。免root可以做到单进程Hook,需要重打包,
但重打包最重要的就是IO Redirect,要过掉各种文件校验和签名校验。涉及到open函数,它们底层都是openat系统调用,
seccomp可以拦截系统调用,然后把path参数改一下就行了。
其实发展到今天,文件校验最安全的也就做到内联svc,后面是检测Hook与防检测的对抗的舞台了,理论上做到了系统调用
级别的Hook,可以完全过掉所有的检测,只是更新迭代的问题和时间问题了。
但是在所有的检测方案中,只有一种是最难过掉和Mock的,那就是不直接依赖系统API的检测方式。
比如反调试:我们可以检测一段代码的执行时间,然后另外开启一个子线程去计时,监控。这种
反调试方法在360加固里面有所体现,它的检测时间是3S,这个我记忆犹新。
当然这里也有兼容性的问题了,安全做到一定层级,肯定会丢失一定的稳定性与兼容性。
Hook做到一定的层级,也丢失一定的稳定性与兼容性。就是采用它们之间的平衡交叉点。
我是一位做IT技术支持的(运维),Android安全与逆向始终是我的爱好,可以说只懂一些上层的东西,
也学了一些皮毛的汇编知识,也就是一个玩家的身份,在这里也向各位小伙伴和大咖学习到了很多技术与知识。
如果你有任何建议意见或者想法都可以提出来和我交流进步。
参考:
检测PMS是否被Hook
对Inline Hook,Got Hook和SVC Hook一些检测的浅谈
一种可以规避大部分去签名校验的方法
IO重定向检测,APK签名校验
另外附上一个测试Demo:
https://www.123pan.com/s/lN7UVv-pbYJ
IMG_20230226_205533.jpg (51.55 KB, 下载次数: 0)
下载附件
2023-2-26 21:00 上传
Screenshot_2023-02-26-20-54-54-533_com.ysh.hookap.jpg (157.28 KB, 下载次数: 0)
下载附件
2023-2-26 21:00 上传
Screenshot_2023-02-26-20-54-56-500_com.ysh.hookap.jpg (136.84 KB, 下载次数: 0)
下载附件
2023-2-26 21:00 上传