如何去壳脱壳

去壳=去掉加固的壳=脱壳

脱壳机制原理

  • smali层:只做了一些简单的混淆
  • Native 层:
    • 和如下内容相关
      • 各种so库
        • 比如libdvm.so
      • 对应着内部函数调用:
        • .init
        • .init_array
        • JNI_Onload
      • 分析修改ELF头信息
      • sub_xxx函数
        • 比如:sub_78614CD0
      • R2寄存器
      • 最后分析出:
        • ClassLoader
        • loadDex
        • multidex
    • (作者)QEver
      • 写的一个IDA的脚本=一个dex脱壳脚本
      • 配合kill方法,可以实现脱绝大部分运行于dalvik上的dex壳
        • 可以dump导出正确的dex文件

脱壳注意事项和说明

不是所有的加固的安卓apk都能成功脱壳的。

比如,康美通的安卓apk:

  • 老版本v2.0.7:没有加固,可以直接用Jadx反编译得到源码的
  • 新版本v4.4.0:是360加固保加固的,用FDex2也无法导出dex,无法破解

总结出来就是:

  • 没有加固的:直接用Jadx即可导出源码
    • 比如老旧的Android的apk,很多都没有加固
      • 不管你怎么混淆都很容易被人分析得干干净净
  • 部分加密不强的:可以脱壳
    • 包括
      • 老一代免费360加固保
      • 爱加密(收费)
      • 娜迦加固(收费)
    • FDex2可以脱壳
      • 可以hook导出dex,再dex转jar,jar转java源码
  • 腾讯乐固新一代360加固保:没法脱壳
    • 即使用FDex2也无法脱壳无法破解,无法得到dex文件
      • 其中新一代的360加固保:用art模式+dex2oat相关机制,或许可以破解
        • 后续研究
          • 【未解决】用ART,oat,dex2oat相关机制去破解新一代360、腾讯等安卓apk的加固

对于使用加固方案的建议和结论

  • 免费版的加固可以防止大多数只会反编译的小白
    • 对于普通攻击者还是很有效果的
    • 对于会用工具脱壳的,还是没太大用途的
  • 除非用更加高级的,收费版的加固服务
    • 估计就很难破解,很难脱壳了
  • 如果真的想要彻底防止别人破解
    • 除了考虑(用更高级的)加固方式
    • 还要花精力在app的业务逻辑层面,权限校验等方面,防止被破解

results matching ""

    No results matching ""