Android apk加固、加壳免费解决方案(包括dex文件,so文件加密)

文章目录

    • 概要
    • 整体加固流程
      • 前提文件准备
      • 真正的流程(关键过程)
    • 技术名词解释
    • 技术细节
    • 小结

概要

看到这篇文章,相信你肯定对apk加固有一定的了解,那就废话不多说,直接上流程。

整体加固流程

前提文件准备

  1. 待加固的apk,例如 app-old.apk(肯定都有)
  2. 脱壳文件,例如 shell.aar(后面介绍,该文件的作用)

真正的流程(关键过程)

  1. 解压待加固的app-old.apk 到 unzipApk 文件夹中;
  2. 解压脱壳文件shell.aar 到 unzipAar 文件夹中;
  3. 对 unzipApk 文件夹 中的 dex 文件,so文件(部分so文件不能加密*(例如已经加密的so,二次加密后可能在加载so时会报错)*,可以遍历时单独跳过),加密后单独存放到同一个文件夹,以便以脱壳时,进行解密,加密结束后,把原文件删除;
  4. 在unzipAar 文件中,找到脱壳用到的jar包(classes.jar),转成dex文件,并且命名位“classes.dex”,存放到unzipApk 文件夹根目录中,非常重要,app启动的时候会默认加载classes.dex这个文件,该文件中,有自定义的脱壳Application,进行解密dex,so文件等,然后把解密后的文件,手动加载到内存中;
  5. 加壳操作已完成,对 unzipApk 文件重新打包;
  6. 对新打包好的apk,重新资源混淆;
  7. 对资源混淆后的apk,重新对齐操作;
  8. 对对齐操作后的apk,重新签名;
  9. 加壳完成。

技术名词解释

上面的过程会用到的一些工具

例如:

  • 解压apk:apktool
  • 加密方式: 可以采用对称加密 aes等
  • jar转dex工具, dx
  • 重新打包:apktool
  • 资源重新混淆:AndResGuard-cli
  • 对齐工具:zipalignPath
  • 签名工具:apksigner

技术细节

shell.aar

  1. 可以创建module,也可以单独创建项目生成,shell中,主要就是自定义Application,例如ShellApplication,主app的AndroidManifest.xml中
  2. 主app的AndroidManifest.xml中 需要配置meta-data,配置真正的主app的Application,
  3. 在ShellApplication的 attachBaseContext(Context base) 方法中,进行脱壳,解密dex,so文件,并且加载到内存中;
  4. 最后,通过meta-data拿到真实的项目的Application,进行替换,从而运行真正的Application。

小结

整个过程还是非常复杂的,博主已经完全实现整个流程,并且用在了自己的项目中。如果你也想自己加固自己的项目,可以评论,遇到任何问题,博主很乐意与你一起探讨。共同学习,进步。

以上内容,我只写了大致流程,如果你真正想自己尝试,欢迎评论区交流 。

你可能感兴趣的:(android,安全)