【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )

简介: 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )

文章目录

一、动态加载

二、第一代加壳技术 ( DEX 整体加固 )

三、第二代加壳技术 ( 函数抽取 )

四、第三代加壳技术 ( Java 函数 -> Native 函数 )

五、so 动态库加壳





一、动态加载


动态加载 : 调用 Java 类时 , 使用到的时候 , 才从 DEX 字节码文件中加载对应的字节码类 ;



热修复 , DEX 加壳 , 插件化 , 都必须使用动态加载技术 ;



动态加载 的 Java 类只能完成一般的函数调用 , 如果加载的是一个 Activity 组件类 , 加载的类不具有组件生命周期的特性 , 不能当做正常的组件使用 ;


如果要正常使用 动态加载 的组件类 , 则需要对类加载器修正 , 有 2 22 种修正方法 ;


替换 LoadedApk 的类加载器 : 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 )

在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader : 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )





二、第一代加壳技术 ( DEX 整体加固 )


第一代加壳技术 :


DEX 字节码文件整体加密

使用自定义 DexClassLoader 加载 DEX 文件

第一代壳的特征 : 在内存中 , DEX 文件是整体的连续的内存块 , 如果找到了 DEX 文件的起始地址 , 可以很容易将整个 DEX 文件 dump 下来 ;


DEX 脱壳加载方案 :


文件加载 : 通过监控文件访问记录 , 也可以找到 DEX 文件 ;

内存加载 : 内存中的 DEX 文件是完整的 , 也可以从内存中加载 DEX 文件 ;


保护粒度是 DEX 整体文件 ;






三、第二代加壳技术 ( 函数抽取 )


第二代加壳技术 对 DEX 文件整体进行了保护 , 将其中的 关键代码抽取到外部 , DEX 加载到内存中后 , 不是完整的 DEX 文件 , 即使将整个 DEX 文件 DUMP 下来之后 , 其中的一些被抽取出来的关键代码无法看到 , 也就是 DEX 文件中的关键类或方法是空的 ;


第二代壳的特征是 内存中的 DEX 数据不是连续的 ;


DexHunter 工具 可以遍历内存中所有类信息 , 将 DEX 完整的拼接出来 , 得到一个完整的 DEX 类 ;



保护的粒度由 DEX 细化为每个函数 ; 破解者可以将 DEX 文件拿到 , 但是其中的关键函数是空的 ;






四、第三代加壳技术 ( Java 函数 -> Native 函数 )


第三代加壳技术 : 将 Java 函数转为 Native 函数 ;


VMP 加壳

Dex2C / Java2C

该类型的加壳保护效果是最强的 , 多数加固厂商的此类加壳都是需要付费的 ;






五、so 动态库加壳


so 动态库加壳 :


基于 init , init_array , JNI_Onload 函数进行加壳 ;

基于 自定义 linker 进行加壳 ;


目录
相关文章
|
3月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术深度对比
【10月更文挑战第18天】 在智能手机操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两种系统的技术特点、优势以及它们之间的主要差异,帮助读者更好地理解这两个平台的独特之处。
67 0
|
2月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
146 2
|
2月前
|
安全 搜索推荐 Android开发
揭秘iOS与安卓系统的差异:一场技术与哲学的较量
在智能手机的世界里,iOS和Android无疑是两大巨头,它们不仅定义了操作系统的标准,也深刻影响了全球数亿用户的日常生活。本文旨在探讨这两个平台在设计理念、用户体验、生态系统及安全性等方面的本质区别,揭示它们背后的技术哲学和市场策略。通过对比分析,我们将发现,选择iOS或Android,不仅仅是选择一个操作系统,更是选择了一种生活方式和技术信仰。
|
3月前
|
安全 Android开发 iOS开发
iOS与安卓:技术生态的双雄争霸
在当今数字化时代,智能手机操作系统的竞争愈发激烈。iOS和安卓作为两大主流平台,各自拥有独特的技术优势和市场地位。本文将从技术架构、用户体验、安全性以及开发者支持四个方面,深入探讨iOS与安卓之间的差异,并分析它们如何塑造了今天的移动技术生态。无论是追求极致体验的苹果用户,还是享受开放自由的安卓粉丝,了解这两大系统的内在逻辑对于把握未来趋势至关重要。
|
3月前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
2月前
|
搜索推荐 安全 Android开发
安卓与iOS的哲学对话:技术生态中的选择与命运
【10月更文挑战第24天】 在智能设备的世界里,安卓和iOS不仅是操作系统的简单对立,它们代表了不同的技术哲学和生态策略。本文将探讨这两种系统背后的设计理念、用户体验差异以及它们如何塑造我们的数字生活,从而引发对于“我们如何选择技术”这一命题的深入思考。
|
2月前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
61 0
|
XML Android开发 数据格式
Android 动态加载布局
  由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot 。不过美工提供的界面图完全用不上tabhot ,所以想到了动态加载的方法来解决这一需求。在这里我整理了一下,写了一个 DEMO 希望大家以后少走点弯路。
1217 0
|
Android开发
Android动态加载布局
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48351659 最近一直比较忙,博客没及时写。
860 0