逆向分析和脱壳的意义
这里是脱壳的一些碎碎念和FART脱壳机的使用流程
查壳
- app解压看文件也能看出来是否加壳
- 用Android killer等工具也能查看:AndroidManifest.xml里面有入口包名,但是找不到这个文件可能是dex加壳了当然也可能是解析错误,一半都可以看到包名特征(这类工具还有:GDA、jadx。。。)
- 现在国内应用商城大部分应用都加壳了,除了一些大型应用和对效率要求比较高的应用,googleplay倒是没有强制要求加壳。苹果商店加的是苹果的壳,自动脱壳机就能脱。
逆向
- 逆向分析过程中的点:
- 持之以恒的精神:更多的时候是死磕专业安全人员编写的代码。
- 耐心:因为分析的东西比较多包括混淆、加壳、so文件等等保护手段。尽量在每次分析过程中都有所提高,而不是去进行一些重复的工作。
- 一些时候安全软件可能会把加壳的应用识别为木马
- 一些书籍:
- 非虫《Android软件安全与逆向分析》(对逆向分析怎么做有一个大概的流程)
- 姜维《Android应用安全防护和逆向分析》(偏向应用方面,对加壳的手段为什么这么加壳有一定的了解,以及未来的发展前景有一定估计)
- 邓凡平《深入理解Android:Java虚拟机ART》(难度比较大:可以先看能看懂的地方。主要从源码的角度去看ART的实现,如果能看懂这本书,那么ART对于我们来说也就是一些C/C++代码了可以很轻松的进行定制来跟踪记录app的运行轨迹可以做自己的应用沙盒来辅助逆向分析可以事半功倍)
- 一定要会正向开发才能做好逆向分析,比如什么是四大组件?app的运行流程?等等。。
- 攻防一体,只有先懂得了加壳原理才知道为什么别人这么脱壳,甚至是定制属于自己的脱壳手段,写一个类似于FART的脱壳工具
- 逆向分析的一般流程:
- 使用自动化检测工具检测apk是否加壳,或者用反编译工具判断是否加壳
- 如果加壳,需要对apk进行脱壳
- 使用jeb、jadx、apktool等反编译工具对apk进行反编译
- 先依据静态分析中得到的关键字符串、关键api调用等方法快速定位需要分析的关键函数和流程
- 如果依据简单的字符串、关键api无法快速定位,这时候apk可能是用了字符串加密、反射调用等手段,此时可结合hook、动态调试等
- 定位到关键函数后,再根据是java实现还是jni实现进行一步步分析,如果是java实现的话往往根据静态的分析就能得出结果,如果是在so中的函数那么分析难度会较大一些。
使用FART脱壳机进行脱壳
制作脱壳机
本次脱壳机设备:nexus5
制作脱壳机流程
先进入bootloader
adb reboot bootloader
执行FART的对应设备型号的镜像刷入脱壳机
- 执行镜像中的flash-all.bat文件
使用脱壳机
直接安装apk,并执行就可以了
需要注意的点
- 是本次使用的脱壳机镜像需要在手机设置里面给app读写读写文件权限
- 测试的时候有个app没有文件读写的功能,所以没法给读写权限所以脱壳失败,因为没法写入到存储卡
- 这个版本的脱壳机将脱壳文件写在了**/sdcard/fart/**目录下
如果权限正常执行apk后就会在**/sdcard/fart/**目录下生成脱壳后的文件
脱壳出来的dex的魔术头可能会被抹掉导致反编译工具不识别
- 有这种情况就打开一个正常的dex文件,把它的前八个字节替换过来就好了
- 标题: 逆向分析和脱壳的意义
- 作者: xiaoeryu
- 创建于 : 2023-08-19 09:30:26
- 更新于 : 2023-08-26 17:10:23
- 链接: https://github.com/xiaoeryu/2023/08/19/逆向分析和脱壳的意义/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论