- 对本书的赞誉
- 前言
- 基础篇
- 第 1 章 Android 中锁屏密码加密算法分析
- 第 2 章 Android 中 NDK 开发
- 第 3 章 Android 中开发与逆向常用命令总结
- 第 4 章 so 文件格式解析
- 第 5 章 AndroidManifest.xml 文件格式解析
- 第 6 章 resource.arsc 文件格式解析
- 第 7 章 dex 文件格式解析
- 防护篇
- 第 8 章 Android 应用安全防护的基本策略
- 第 9 章 Android 中常用权限分析
- 第 10 章 Android 中的 run-as 命令
- 第 11 章 Android 中的 allowBackup 属性
- 第 12 章 Android 中的签名机制
- 第 13 章 Android 应用加固原理
- 第 14 章 Android 中的 so 加固原理
- 工具篇
- 第 15 章 Android 逆向分析基础
- 第 16 章 反编译神器 apktool 和 Jadx
- 第 17 章 Hook 神器 Xposed
- 第 18 章 脱壳神器 ZjDroid
- 第 19 章 Native 层 Hook 神器 Cydia Substrate
- 操作篇
- 第 20 章 静态方式逆向应用
- 第 21 章 动态调试 smali 源码
- 第 22 章 IDA 工具调试 so 源码
- 第 23 章 逆向加固应用
- 第 24 章 逆向应用经典案例分析
- 第 25 章 Android 中常见漏洞分析
- 第 26 章 文件加密病毒 Wannacry 样本分析
13.1 加固原理解析
下面就来看一下 Android 中加固的原理,如图 13-1 所示。
图 13-1 加固结构图
在加固的过程中需要三个对象:
·需要加密的 apk(源 apk)
·自己的壳程序 apk(负责解密 apk 工作)
·加密工具(将源 apk 进行加密和壳 dex 合并成新的 dex)
加固的主要步骤:拿到需要加密的 apk(源 apk)和自己的壳程序 apk,然后用加密算法对源 apk 进行加密,再将壳 apk 进行合并得到新的 dex 文件,最后替换壳程序中的 dex 文件即可,得到新的 apk,那么这个新的 apk 也叫作脱壳程序 apk。它已经不是一个完整意义上的 apk 程序了,它的主要工作是:负责解密源 apk,然后加载 apk,让其正常运行起来。
在这个过程中可能需要了解的一个知识是:如何将源 apk 和壳 apk 进行合并成新的 dex。这就需要了解 dex 文件的格式了。在第 7 章中已经详细介绍了 dex 文件格式了,下面就来简单回顾一下 dex 文件的格式。
主要来看一下 dex 文件的头部信息,其实 dex 文件和 class 文件的格式分析原理都是一样的,它们都有固定的格式,现在反编译的一些工具如下所示:
·jd-gui:可以查看 jar 中的类,其实它就是解析 class 文件,只要了解 class 文件的格式就可以。
·dex2jar:将 dex 文件转化成 jar,原理也是一样的,只要知道 dex 文件的格式,能够解析出 dex 文件中的类信息就可以了。
当然在分析这个文件的时候,最重要的还是头部信息,它是一个文件的开始部分,也是索引部分,内部信息很重要,如图 13-2 所示。
图 13-2 dex 文件头部结构图
只要关注图中标记的三个部分:
1)checksum:文件校验码,使用 alder32 算法校验文件除去 maigc、checksum 外余下的所有文件区域,用于检查文件错误。
2)signature:使用 SHA-1 算法 hash 除去 magic、checksum 和 signature 外余下的所有文件区域,用于唯一识别本文件。
3)file_size:dex 文件的大小。
为什么说只需要关注这三个字段呢?因为需要将一个文件(加密之后的源 apk)写入到 dex 文件中,那么肯定需要修改文件校验码(checksum)。因为它检查文件是否有错误。signature 也是一样,也是唯一识别文件的算法。还需要修改 dex 文件的大小。
不过这里还需要一个操作,就是标注一下加密的 apk 的大小,因为在脱壳的时候,需要知道 apk 的大小,才能正确得到 apk。那么这个值放到哪呢?直接放到文件的末尾就可以了。
总结一下需要做的步骤:修改 dex 的三个文件头,将源 apk 的大小追加到新的 dex 末尾就可以了。修改之后得到新的 dex 文件样式如图 13-3 所示。
图 13-3 apk 加固原理图
知道原理后就来看代码实现,这里有三个项目:
·源程序项目(需要加密的 apk)
·加壳项目(对源 apk 进行加密,和脱壳项目的 dex 进行合并)
·脱壳项目(解密源 apk 和加载 apk)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论