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

举报
韩曙亮 发表于 2022/01/11 23:01:45 2022/01/11
【摘要】 文章目录 一、加壳技术识别二、VMP 加壳示例三、Dex2C 加壳示例 一、加壳技术识别 加壳技术识别的必要性 : 拿到 APK 文件后 , 如果想要分析其 DEX...





一、加壳技术识别



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

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


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

每个加壳的应用必然使用 DEX 整体加固 , 然后在该基础上 , 使用 函数抽取 , VMP , Dex2C 中的一种加壳技术 , 也有可能使用 3 3 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 动态库 ;

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/121893380

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。