前言
安卓操作系统目前在中国乃至世界范围内占据主流,大量互联网、市政、金融、O2O、出租车等公司及部门将业务依托于App的方式交付给最终用户,这些App真的安全吗?前有各类爬虫软件对票务、市政企业个人信息等App内容的疯狂抓取,后有拼多多被薅数十亿羊毛的事件,因此App的安全、逆向工程及自动化利用技术越来越受到App开发者的关注。
自从Frida于2014年年末问世以来,迅速在全球安全社区掀起了“Frida热潮”,借助Frida动态修改内存的特性实现了快速逆向和算法调用功能,安卓应用安全分析和对抗技术从未像如今这样成熟和自动化。
作为安卓应用安全测评工程师,或者大数据平台采集工程师,逆向研究员对于App的逆向分析研究及其算法的还原和接口调用的热爱仿佛是刻在骨子里的。
与逆向技术的发展相对应的是,很多大型软件和平台的开发者也逐渐把算法藏得越来越深,越来越难以逆向。这里面最具有代表性的是强混淆框架Ollvm和Arm层的虚拟机保护技术Vmp,前者注重增加算法本身的复杂度,后者通过增加一套中间层将算法保护起来,使得逆向工作变得更加困难,显然,逆不出中间层也就还原不出算法。
面对这种情况我们该如何应对呢?解决办法是采用黑盒调用的方式,忽略算法的具体细节,使用Frida把SO加载起来,直接调用里面的算法得到计算结果,构造出正确的参数,将封包传给服务器。也可以将调用过程封装成API暴露给同事使用,甚至搭建计算集群,加快运行速度,提高运行效率。本书详细地介绍了基于Frida和Xposed的算法批量调用和转发实践,并给出了具体的案例分析。
如果App对Frida或Xposed进行了检测,我们还可以采用编译安卓源码的方式打造属于自己的抓包沙箱。对于系统来说,由于App的全部代码都是依赖系统去完成执行的,因此无论是加固App在运行时的脱壳,还是App发送和接收数据包,对于系统本身来说App的行为都是没有隐私的。换句话说,如果在系统层或者更底层对App的行为进行监控,App的很多关键信息就会暴露在“阳光”之下一览无余。之后可以直接修改系统源码,使用r0capture工具为Hook的那些API中加入一份日志,即可把处于明文状态的包打印出来,从而实现无法对抗的抓包系统沙箱。
Frida以其简洁的接口和强大的功能迅速俘获了安卓应用安全研究员以及爬虫研究员的芳心,成为逆向工作中的绝对主力,笔者也有幸在Frida普及的浪潮中做了一些总结和分享,建立了自己的社群,与大家一起跟随Frida的更新脚步共同成长和进步。
本书翔实地介绍了如何安装和使用Frida、基本的环境搭建、Frida-tools、Frida脚本、Frida API、批量自动化Trace和分析、RPC远程方法调用,并包含大量App逆向与协议分析案例实战,此外,还介绍了更加稳定的框架Xposed的使用方法,以及从安卓源码开始定制属于自己的抓包沙箱,打造无法被绕过的抓包环境等内容。
本书技术新颖,案例丰富,注重实操,适合以下人员阅读:
· 安卓应用安全工程师。
· 安卓逆向分析工程师。
· 爬虫工程师。
· 大数据收集和分析工程师。
在本书完稿时,Frida版本更新到15,安卓也即将推出版本12,不过请读者放心,本书中的代码可以在特定版本的Frida和安卓中成功运行。
安卓逆向是一门实践性极强的学科,读者在动手实践的过程中难免会产生各式各样的疑问,因此笔者特地准备了GitHub仓库更新和勘误,读者如有疑问可以到仓库的issue页面提出,笔者会尽力解答和修复。笔者的GitHub:https://github.com/r0ysue/AndroidFridaSeniorBook。
最后,在这里感谢笔者的父母,感谢中科院信工所的Simpler,感谢看雪学院和段钢先生,感谢寒冰冷月、imyang,感谢xiaow、bxl、寄予蓝、白龙,感谢葫芦娃、智障、NWMonster、非虫,成就属于你们。
陈佳林
2022年1月