逆向分析和脱壳的意义

xiaoeryu Lv5

这里是脱壳的一些碎碎念和FART脱壳机的使用流程

查壳

  • app解压看文件也能看出来是否加壳
  • 用Android killer等工具也能查看:AndroidManifest.xml里面有入口包名,但是找不到这个文件可能是dex加壳了当然也可能是解析错误,一半都可以看到包名特征(这类工具还有:GDA、jadx。。。)
  • 现在国内应用商城大部分应用都加壳了,除了一些大型应用和对效率要求比较高的应用,googleplay倒是没有强制要求加壳。苹果商店加的是苹果的壳,自动脱壳机就能脱。

逆向

  • 逆向分析过程中的点:
    1. 持之以恒的精神:更多的时候是死磕专业安全人员编写的代码。
    2. 耐心:因为分析的东西比较多包括混淆、加壳、so文件等等保护手段。尽量在每次分析过程中都有所提高,而不是去进行一些重复的工作。
  • 一些时候安全软件可能会把加壳的应用识别为木马
  • 一些书籍:
    • 非虫《Android软件安全与逆向分析》(对逆向分析怎么做有一个大概的流程)
    • 姜维《Android应用安全防护和逆向分析》(偏向应用方面,对加壳的手段为什么这么加壳有一定的了解,以及未来的发展前景有一定估计)
    • 邓凡平《深入理解Android:Java虚拟机ART》(难度比较大:可以先看能看懂的地方。主要从源码的角度去看ART的实现,如果能看懂这本书,那么ART对于我们来说也就是一些C/C++代码了可以很轻松的进行定制来跟踪记录app的运行轨迹可以做自己的应用沙盒来辅助逆向分析可以事半功倍)
  • 一定要会正向开发才能做好逆向分析,比如什么是四大组件?app的运行流程?等等。。
  • 攻防一体,只有先懂得了加壳原理才知道为什么别人这么脱壳,甚至是定制属于自己的脱壳手段,写一个类似于FART的脱壳工具
  • 逆向分析的一般流程:
    1. 使用自动化检测工具检测apk是否加壳,或者用反编译工具判断是否加壳
    2. 如果加壳,需要对apk进行脱壳
    3. 使用jeb、jadx、apktool等反编译工具对apk进行反编译
    4. 先依据静态分析中得到的关键字符串、关键api调用等方法快速定位需要分析的关键函数和流程
    5. 如果依据简单的字符串、关键api无法快速定位,这时候apk可能是用了字符串加密、反射调用等手段,此时可结合hook、动态调试等
    6. 定位到关键函数后,再根据是java实现还是jni实现进行一步步分析,如果是java实现的话往往根据静态的分析就能得出结果,如果是在so中的函数那么分析难度会较大一些。

使用FART脱壳机进行脱壳

制作脱壳机

  • 本次脱壳机设备:nexus5

  • 制作脱壳机流程

    1. 先进入bootloader

      adb reboot bootloader

    2. 执行FART的对应设备型号的镜像刷入脱壳机

      • 执行镜像中的flash-all.bat文件

使用脱壳机

  • 直接安装apk,并执行就可以了

    • 需要注意的点

      1. 是本次使用的脱壳机镜像需要在手机设置里面给app读写读写文件权限
      2. 测试的时候有个app没有文件读写的功能,所以没法给读写权限所以脱壳失败,因为没法写入到存储卡
      3. 这个版本的脱壳机将脱壳文件写在了**/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 进行许可。
评论