【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
一、动态加载
动态加载 : 调用 Java 类时 , 使用到的时候 , 才从 DEX 字节码文件中加载对应的字节码类 ;
热修复 , DEX 加壳 , 插件化 , 都必须使用动态加载技术 ;
动态加载 的 Java 类只能完成一般的函数调用 , 如果加载的是一个 Activity 组件类 , 加载的类不具有组件生命周期的特性 , 不能当做正常的组件使用 ;
如果要正常使用 动态加载 的组件类 , 则需要对类加载器修正 , 有 2 2 2 种修正方法 ;
- 替换 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 进行加壳 ;
相关文章
- android onresume函数,Android界面跳转时候onDestroy和onResume的调用顺序
- android 常用加密,分享一下Android各种类型的加密
- android图片资源加密,Android平台图像文件加密
- android自定义滑块解锁,android 滑动解锁
- Android UI布局优化之ViewStub[通俗易懂]
- GB28181状态信息报送解读及Android端国标设备接入技术实现
- 2018年Unity结合Android SDK下载安装及配置教程
- android sdk安装过程,图文详解Android 3.0 SDK安装教程
- android定时器取消,Android定时器崩溃取消
- android toast全屏,Android Toast实现全屏显示
- android系统中toast是什么_Android个人资料简单布局
- android触摸屏事件,Android Touch事件分析
- android的toast提示_android studio unknown host
- android应用程序_chrome Android
- 用新技术 “派生” 动听旋律 | Android 开发者故事
- Android 渐变圆环,圆形进度条效果实现
- 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
- 【错误记录】Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1. )
- 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- 【Android Gradle 插件】PackagingOptions 配置 ③ ( merges 属性配置 | excludes 属性配置 )
- 【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
- [android] 实现返回键操作思路详解手机开发
- Android技术特点(优缺点)详解手机开发
- 64位谷歌浏览器安卓版终于正式发布 但仅支持Android 10+和8GB+内存
- CyanogenMod 想要从 Android 剥离掉 Google 的部分
- 为什么Android的图片质量没有iOS的高?
- android实现自动关机的具体方法
- 在android中实现类似uc和墨迹天气的左右拖动效果
- Android从系统Gallery获取图片具体实现