返回介绍

13.1 加固原理解析

发布于 2024-10-10 22:32:18 字数 1847 浏览 0 评论 0 收藏 0

下面就来看一下 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文