zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

【Android 逆向】加壳技术识别 ( VMP 加壳示例 | Dex2C 加壳示例 )

Android识别技术 示例 逆向 加壳 VMP
2023-06-13 09:18:00 时间

文章目录

一、加壳技术识别


加壳技术识别的必要性 : 拿到 APK 文件后 , 如果想要分析其 DEX 文件 , 需要先 识别出该 APK 是使用的什么技术进行的加壳 , 如果该 APK 只是使用了整体保护 , 只需要将内存中的 DEX 文件 DUMP 下来即可 ; 如果该 APK 使用了 VMP 加壳 , 则需要逆向分析解释器 ;

只有识别出加壳的方式 , 才能有针对的进行脱壳 ;

上一篇博客 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 ) 中介绍了几种常用的加壳技术 ;

每个加壳的应用必然使用 DEX 整体加固 , 然后在该基础上 , 使用 函数抽取 , VMP , Dex2C 中的一种加壳技术 , 也有可能使用

3

者中的多种加壳技术 , 进行混合加壳 ;

整体加固 就是对 DEX 文件进行 整体加密 , https://blog.csdn.net/shulianghan/category_10559800.html 专栏就实现了一个 DEX 整体加固的示例 ;

函数抽取特征 : 获取到加壳后的 DEX 文件 , 其函数体是无效的 ;

VMP / Dex2C 加壳特征 : 获取到 DEX 文件后 , Java 函数变为 Native 函数 ;

二、VMP 加壳示例


推荐一个 VMP 加壳程序 ADVMP ;

VMP 的核心原理是 自定义 Dalvik 和 ART 解释器 , 解释器解释 Smali 指令流 ; 该解释器是 VMP 加壳的核心原理 ;

解释器可以使用 Java 实现 , 也可以使用 C 实现 , 使用 Java 实现更容易被破解 ; 因此 , 解释器一般使用 C 实现 , 为了保护解释器不被快速定位 , 一般会使用 OLLVM 技术对解释器进行保护 , 增加逆向的难度 ;

三、Dex2C 加壳示例


推荐一个 Dex2C 加壳程序 dcc ;

Dex2C 加壳特征 : 获取到 DEX 文件后 , 其中被保护的函数 , 由 Java 函数变为了 Native 函数 ;

传统的编译原理 : 将代码进行词法 , 句法分析 , 生成二进制汇编代码 , 也就是机器码 ;

Dex2C 中, 将 Java 代码进行词法 , 句法分析 , 生成对应的 C / C++ 文件 , 然后交叉编译为 SO 动态库 ;