技术文章

了解最新技术文章

当前位置:首页>技术文章>技术文章
全部 5 常见问题 0 技术文章 5

逆向 Android 应用程序保护器,第 2 部分 - 资产和代码加密

时间:2022-10-21   访问量:1088

资产加密

资产可以加密,同时结合其他技术,例如类加密(在几个备受瞩目的应用程序中看到)和字节码混淆(控制流混淆、字符串加密、反射 API 访问)。随着大多数字节码混淆被自动清理,资产通过以下方式被访问:

紫色和青色标记代表自动解密的代码。资产解密器方法被重命名为“dec”,它提供了一个FilterInputStream透明地解密内容的方法。
DecryptorFilterStream(重命名)工厂方法

DecryptorFilterStream对象实现了TEA(微型加密算法)的变体,以实现简单性和出色的性能1着称。

请注意 Q_w 的复杂生成,而不是对直接 0x9E37 进行硬编码。顺便说一句,RC5 和 RC6 也使用该常数的变体。
read()一次解密和缓冲 64 位数据。解密循环由可变数量的轮组成,介于 5 和 16 之间。请注意,Q_w 用作乘数而不是偏移量,正如 TEA/XTEA 通常所做的那样。

假设加密和解密算法可能并不总是与这个相同,这似乎是合理的。此应用程序保护器在其保护层中广泛使用多态性,在保护阶段,加密原语可能是用户选择的,也可能是半随机选择的。

JEB 可以在整个代码中自动模拟并提取资产,事实上,这就是下一节中描述的加密类被提取以进行分析的方式。但是,此功能在当前的 JEB Release 版本中不存在。由于绝大多数用途都是合法的,我们认为此时为数据和代码提供一键式自动解密器是不必要的,并且会危及一些知名供应商的应用程序安全。

类加密

正如在最近的多个应用程序中所看到的那样,类加密的工作原理如下:

下图总结了这种机制:

类加密机制

由于受保护的应用程序使用广泛的 RASP(运行时应用程序自我保护)工具来验证它们运行的环境,因此 CL 和 CP 的动态检索可能会很困难。在此分析中,它是由 JEB 静态检索的。

下面,一些客户端代码使用 CM 创建一个加密类对象 CP 并在其上执行一个方法。一切都是通过反射完成的。项目被重命名以提高清晰度。

加密类加载和虚方法调用

CM 是一个重类,高度混淆。理解它的第一步是:

启用自动解密和自动取消反射后,结果非常可读。以下是几个片段:

加载后会删除解密的文件。在旧设备上,加载是用DexFile在较新的设备上,它是使用InMemoryDexClassLoader.
在这种情况下,第一个加密的 JAR 文件(包含 CL)存储为“/e.”。
在这种情况下,第二个加密的 JAR 文件(保存 CP 和相关文件)存储为“/f.”。
该应用程序包含另外两对,(“/a.”,“/b.”)和(“/c.”,“/d.”)

一旦检索到这些附加文件,就可以轻松地将这些附加文件“添加”到您的 JEB 项目的当前 DEX 单元IDexUnit.addDex()中。切换到终端片段,激活 Python 解释器 ( use py),然后发出如下命令:

使用 Jython 将代码添加到现有 DEX 单元
bnz类 (CL) 是受保护类 (CP) 的类加载器

受保护的类 CP 和其他相关类,存储在“/f”中。包含... 防篡改验证码,这是 RASP 设施的一部分!在查看的其他实例中,受保护的类包含:加密资产管理器、自定义代码、API 密钥映射、更多 RASP 代码等。

全应用加密

“完全”加密通过对应用程序的几乎所有类进行加密,将类加密发挥到了极致。生成一个自定义Application对象,它只是重载attachBaseContext()在执行时,将调用加密的类管理器来解密并加载“原始”应用程序(所有其他保护措施仍然适用)。

用于提供完整程序加密的自定义应用程序对象。

请注意,活动也可以加密。在上述情况下,主要活动是加密 jar 的一部分。

结论

这就是第 2 部分的内容。我们专注于加密功能。两者都为愿意加倍努力检索原始资产和字节码的逆向工程师提供了相对有限的保护。


上一篇:逆向 Android 应用程序保护器,第 3 部分 - 代码虚拟化

下一篇:没有了!

发表评论:

评论记录:

未查询到任何数据!

在线咨询

点击这里给我发消息 售前咨询专员

点击这里给我发消息 售后服务专员

在线咨询

免费通话

24小时免费咨询

请输入您的联系电话,座机请加区号

免费通话

微信扫一扫

微信联系
返回顶部