DEX文件混淆加密
来源:互联网 发布:知满天和中公哪个好 编辑:程序博客网 时间:2024/06/07 20:04
0x00 前言
混淆加密主要是为了隐藏 dex 文件中关键的代码,力度从轻到重包括:静态变量的隐藏、函数的重复定义、函数的隐藏、以及整个类的隐藏。混淆后的 dex 文件依旧可以通过 dex2jar jade 等工具的反编译成 Java 源码,但是里面关键的代码已经看不到了。
java 效果图:
smali 效果图:
源码地址和使用说明在 github 上 hidex-hack
0x01 dex格式分析
dex 文件格式在上一篇有进行了比较详细的介绍,具体可看dex文件格式分析,这里简单的介绍一下整个 dex 文件的布局。
1.header(dex头部)
header 概述了整个 dex 文件的分布情况,包括了:magic, checksum, signature, file_size, header_size, endian_tag,link, map, string_ids, type_ids, proto_ids, field_ids, method_ids, class_defs, data。
- checksum 和 signature 是校验值,修改后需要对其进行修复
- string_ids, type_ids, proto_ids, field_ids, method_ids 作为类型数组节区(我瞎起的)保存了不同类型的值
- class_defs 存储了类的定义也是我们修改的重点
- data 是数据存储区,包括所有的数据
2.类型数组节区
类型数组节区包括了string_ids, type_ids, proto_ids, field_ids, method_ids。分别表示:字符串,类型,函数签名,属性,函数。每个节区都保存了对应类型数据数组,可以用 010Editor 分析二进制文件数据。
属性示例:
3.类定义
类定义是修改的重点,这里保存了所有类的结构,也是整个 dex 文件中结构最复杂的部分。其中包括了:静态属性变量、成员数形变量,虚函数,直接函数,静态函数等数据。
0x02 实现功能
通过分析 dex 文件格式,现在可以实现的混淆加密主要包括四种:
- 静态变量隐藏
- 函数重复定义
- 函数隐藏
- 类定义隐藏
四种混淆加密的实现方式都是通过修改 class_def 结构体中字段实现的。可以通过 json 格式了解一下 class_def 的结构(这里只列出来要用到的字段):
12345678910111213141516171819
{"class_def": {"class_idx": 01"static_values_off": 000,"class_data_off": 001,"class_data": {"direct_methods_size": 001,"virtual_methods_size": 002,"virtual_methods":[{"code_off": 003},{"code_off": 004}]}}}
字段含义:
- class_idx: 类名序号,值是type_ids的一个index
- class_def: 类定义结构体
- static_values_off: 静态变量值偏移
- class_data_off: 类定义偏移
- class_data: 类定义结构体
- direct_methods_size: 直接函数个数
- virtual_methods_size: 虚函数个数
- virtual_methods: 虚函数结构体
- code_off: 函数代码偏移
通过上面的字段介绍其实很容易得到四个功能的实现方案,下面一个一个介绍。
1.静态变量隐藏
static_vaules_off 保存了每个类中静态变量的值的偏移量,指向 data 区里的一个列表,格式为encode_array_item,如果没有此项内容,该值为0。所以要实现静态变量赋值隐藏只需要将 static_values_off 值修改为0。
实现效果:
这里的静态数组数据没有成功隐藏,因为我也不知道怎么搞。
- DEX文件混淆加密
- Android中的ClassLoader与dex文件加密实现分析
- Android中的ClassLoader与dex文件加密实现分析
- android studio 混淆 多dex
- 转帖 3DEX加密
- 转帖 3DEX加密
- 3DEX加密
- Gradle插件--dex加密
- DEX加密效果分析
- 针对移动应用加密的问题,如何加密.DEX文件呢?
- Android代码混淆加密配置(Proguard文件解析)
- XenoCodeXenoCode 加密加密 .NET混淆.NET混淆
- 【Android】打包过程:生成自动代码->编译->(混淆)->dex文件->生成资源文件->打apk包->(签名)->对齐
- JS 加密和混淆
- C# MD5加密+混淆
- JAVA 代码混淆,加密。
- 如何混淆加密源码
- php代码混淆加密
- 【Docker安装】- Ubuntu14.04安装最新版Docker-1.9.1
- 360脱壳-native函数还原笔记-2017-06-25
- 简述生成式对抗网络 GAN
- 1754 I Hate It(线段树求区间最大值)
- 【David Silver强化学习公开课之一】强化学习入门
- DEX文件混淆加密
- JavaScript之正则表达式验证邮箱,手机号码,身份证,网址,QQ,邮政编码,中文
- KMP算法中Next数组及改进后的nextval数组的求法
- [高频] 一.Interview Style
- OpenGl绘制基本单元注解
- 生活中的ISBN码和身份证号码的校验
- 二分法求一元二次方程的根
- 使用jersey2.X发布rest服务
- [内核源码][编译] 关于openssl/opensslv.h错误的解决方案