对Android Hook技术的一些浅谈
本帖最后由 LivedForward 于 2023-2-26 21:00 编辑Android Hook技术发展到今天,可以说是登峰造极了。差不多在五六年前,那个时候还是刚刚出来PMS Hook,
用的动态代{过}{滤}理技术,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
说白了,移动端安全防护就是把Windows端那一系列从应用层防护到内核层防护的发展过程,重复了一次,只不过移动端一般到了驱动就终止了,做不了更底层
windows不同的是驱动层还可以继续往下做安全。
最开始不重视安全,到安全做到位,大概也得经历10年左右,pc端,移动端,都一样的
什么hook,加壳保护,二进制混淆,vmp,其实都一样的 谢谢分享学习了 3秒,时间没记错吧,这得多长 谢谢分享学习了 感谢分享 总结的不错,我有个红米10a,没找到方法root进行后续研究,实在不知道买什么新手机做root比较好。 我想学无从入手 谢谢楼主,又了解了一个技术 谢谢分享学习了
感谢分享谢谢!