Submit Search
Upload
Android混淆技巧与反混淆 小波
•
0 likes
•
368 views
正炎 高
Follow
Android混淆技巧与反混淆 小波
Read less
Read more
Technology
Report
Share
Report
Share
1 of 34
Download now
Download to read offline
Recommended
这是在RubyConfChina2017上的演讲,如何使用机器学习的方法来识别色情表单。 1. 三个阶段分别是:人工识别 -> 关键字匹配 -> 机器学习 2. 介绍了使用机器学习的三个方面:特征提取 -> 算法选择 -> 结果评估。 3. 金数据在实战中的一些数据
金数据是如何鉴黄的
金数据是如何鉴黄的
Peng Jiang
Android 攻防部分
淺談Android app之攻防思維
淺談Android app之攻防思維
National Cheng Kung University
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
1. How and Why to write good code? 2. Coding standard based on ZendFramework and real world practise. 3. PHP programming skills from daily coding. 4. Some security tips 5. Some optimization tips
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
Ho Kim
Java DSL与动态代码生成技术的应用的上半部分,主题为DSL的需求与实现;主要从内部、外部DSL的示例与实现出发,探讨在java中创建DSL这一话题,并附带一些工具介绍
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
悦 温
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
yiditushe
.
3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究
Hsiao Tim
前端基础知识回顾
前端基础知识回顾
Wu tianhao
Recommended
这是在RubyConfChina2017上的演讲,如何使用机器学习的方法来识别色情表单。 1. 三个阶段分别是:人工识别 -> 关键字匹配 -> 机器学习 2. 介绍了使用机器学习的三个方面:特征提取 -> 算法选择 -> 结果评估。 3. 金数据在实战中的一些数据
金数据是如何鉴黄的
金数据是如何鉴黄的
Peng Jiang
Android 攻防部分
淺談Android app之攻防思維
淺談Android app之攻防思維
National Cheng Kung University
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
1. How and Why to write good code? 2. Coding standard based on ZendFramework and real world practise. 3. PHP programming skills from daily coding. 4. Some security tips 5. Some optimization tips
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
Ho Kim
Java DSL与动态代码生成技术的应用的上半部分,主题为DSL的需求与实现;主要从内部、外部DSL的示例与实现出发,探讨在java中创建DSL这一话题,并附带一些工具介绍
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
悦 温
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
yiditushe
.
3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究
Hsiao Tim
前端基础知识回顾
前端基础知识回顾
Wu tianhao
Javascript
Javascript
Ryan Chung
Huangjing renren
Huangjing renren
d0nn9n
Ajax框架:Dwr》实战(包括整合)
Ajax框架:Dwr》实战(包括整合)
yiditushe
第0次JVM源码阅读活动 分享目标 * 让VM相关基础知识尚浅的人找到阅读HotSpot VM源码之外的学习JVM的路径 * 让并不真的对VM内部实现细节感兴趣的人不必在源码上耗费精力 * 为后续活动做准备 * 确定活动周期、形式、目标受众 * 吸引同好报名分享阅读VM源码的经验
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
相關範例可參考 https://github.com/billchungiii/twMVC43Samples
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
twMVC
a brief view of google protocol buffers.
Google protocol buffers简析
Google protocol buffers简析
wavefly
蔡学镛 (现任支付宝架构师) 分享 PPT 制作经验. 学镛有多年技术演讲经验,在PPT(简报)设计上有独到之秘。 其中半部分术语已经转化为大陆习惯。个别词汇未转换,望读者周知。
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
Dahui Feng
Javascript primer plus
Javascript primer plus
Dongxu Yao
高性能Lamp程序设计 付超群
高性能Lamp程序设计 付超群
高性能Lamp程序设计 付超群
Shaoning Pan
一种跨语言、跨平台的高性能分布式远程调用解决方案
高性能远程调用解决方案
高性能远程调用解决方案
Ady Liu
2008/05/17 TWJUG slides
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
koji lin
TypeScript 是一個可以編譯成 JavaScript 的中繼語言,擁有強型別、支援編譯時期型別檢查、完整 VS2012 開發工具整合、微軟官方支援的語言,在未來,或許你會日夜與他為伍。 本次在「微軟實戰課程日」分享的「Type script 開發實戰」還包含了「JavaScript 物件導向觀念入門」等重要觀念,學習起來後將能更有助於理解 TypeScript 所帶來的優勢。
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
velocity china 2011 by 54chen
互联网创业服务器运维工具集
互联网创业服务器运维工具集
zhen chen
在衝動想栽進 React 的當下,請先且慢!還有很多你必須先學的知識,否則會摔得。。。很重。共勉之,前端世界就是狂。
前端爆肝之旅+React上山前的小專案心得分享
前端爆肝之旅+React上山前的小專案心得分享
Yao Nien Chung
Lamp高性能设计
Lamp高性能设计
锐 张
Nosql及其主要产品简介
Nosql及其主要产品简介
振林 谭
Jvm内存管理基础
Jvm内存管理基础
wang hongjiang
《云原生训练营--Go 语言特性》 1. 为什么需要另外一种语言? 2. Go 语言编译环境设置 3. 控制结构 4. Go 语言常用数据结构 5. Go 语言函数调用 6. 常用语法 7. 多线程 • 深入理解 channel • 基于 channel 编写一个生产者消费者程序
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
电子杂志(试刊)
电子杂志(试刊)
ProCharm
2011 Java TWO
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
bitcoin security
Analyzingbitcoinsecurity
Analyzingbitcoinsecurity
正炎 高
bitcoin
比特币分叉相关
比特币分叉相关
正炎 高
More Related Content
Similar to Android混淆技巧与反混淆 小波
Javascript
Javascript
Ryan Chung
Huangjing renren
Huangjing renren
d0nn9n
Ajax框架:Dwr》实战(包括整合)
Ajax框架:Dwr》实战(包括整合)
yiditushe
第0次JVM源码阅读活动 分享目标 * 让VM相关基础知识尚浅的人找到阅读HotSpot VM源码之外的学习JVM的路径 * 让并不真的对VM内部实现细节感兴趣的人不必在源码上耗费精力 * 为后续活动做准备 * 确定活动周期、形式、目标受众 * 吸引同好报名分享阅读VM源码的经验
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
相關範例可參考 https://github.com/billchungiii/twMVC43Samples
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
twMVC
a brief view of google protocol buffers.
Google protocol buffers简析
Google protocol buffers简析
wavefly
蔡学镛 (现任支付宝架构师) 分享 PPT 制作经验. 学镛有多年技术演讲经验,在PPT(简报)设计上有独到之秘。 其中半部分术语已经转化为大陆习惯。个别词汇未转换,望读者周知。
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
Dahui Feng
Javascript primer plus
Javascript primer plus
Dongxu Yao
高性能Lamp程序设计 付超群
高性能Lamp程序设计 付超群
高性能Lamp程序设计 付超群
Shaoning Pan
一种跨语言、跨平台的高性能分布式远程调用解决方案
高性能远程调用解决方案
高性能远程调用解决方案
Ady Liu
2008/05/17 TWJUG slides
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
koji lin
TypeScript 是一個可以編譯成 JavaScript 的中繼語言,擁有強型別、支援編譯時期型別檢查、完整 VS2012 開發工具整合、微軟官方支援的語言,在未來,或許你會日夜與他為伍。 本次在「微軟實戰課程日」分享的「Type script 開發實戰」還包含了「JavaScript 物件導向觀念入門」等重要觀念,學習起來後將能更有助於理解 TypeScript 所帶來的優勢。
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
velocity china 2011 by 54chen
互联网创业服务器运维工具集
互联网创业服务器运维工具集
zhen chen
在衝動想栽進 React 的當下,請先且慢!還有很多你必須先學的知識,否則會摔得。。。很重。共勉之,前端世界就是狂。
前端爆肝之旅+React上山前的小專案心得分享
前端爆肝之旅+React上山前的小專案心得分享
Yao Nien Chung
Lamp高性能设计
Lamp高性能设计
锐 张
Nosql及其主要产品简介
Nosql及其主要产品简介
振林 谭
Jvm内存管理基础
Jvm内存管理基础
wang hongjiang
《云原生训练营--Go 语言特性》 1. 为什么需要另外一种语言? 2. Go 语言编译环境设置 3. 控制结构 4. Go 语言常用数据结构 5. Go 语言函数调用 6. 常用语法 7. 多线程 • 深入理解 channel • 基于 channel 编写一个生产者消费者程序
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
电子杂志(试刊)
电子杂志(试刊)
ProCharm
2011 Java TWO
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
Similar to Android混淆技巧与反混淆 小波
(20)
Javascript
Javascript
Huangjing renren
Huangjing renren
Ajax框架:Dwr》实战(包括整合)
Ajax框架:Dwr》实战(包括整合)
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
Google protocol buffers简析
Google protocol buffers简析
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
Javascript primer plus
Javascript primer plus
高性能Lamp程序设计 付超群
高性能Lamp程序设计 付超群
高性能远程调用解决方案
高性能远程调用解决方案
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
互联网创业服务器运维工具集
互联网创业服务器运维工具集
前端爆肝之旅+React上山前的小專案心得分享
前端爆肝之旅+React上山前的小專案心得分享
Lamp高性能设计
Lamp高性能设计
Nosql及其主要产品简介
Nosql及其主要产品简介
Jvm内存管理基础
Jvm内存管理基础
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
电子杂志(试刊)
电子杂志(试刊)
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
More from 正炎 高
bitcoin security
Analyzingbitcoinsecurity
Analyzingbitcoinsecurity
正炎 高
bitcoin
比特币分叉相关
比特币分叉相关
正炎 高
吕伟Qcon
他山之石可以攻御
他山之石可以攻御
正炎 高
MVVM,react,vue.js
Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚
正炎 高
前端的自我修养
一个前端的自我修养 Winter
一个前端的自我修养 Winter
正炎 高
第二届前端开发者年度大会,前端性能与安全
下一代Web前端技术 陈子舜
下一代Web前端技术 陈子舜
正炎 高
软件安全开发周期
Ch04 secure software development_lifecycle
Ch04 secure software development_lifecycle
正炎 高
Android 软件安全攻防研究现状 claud isf2012
Android 软件安全攻防研究现状 claud isf2012
Android 软件安全攻防研究现状 claud isf2012
正炎 高
安卓软件漏洞修复与检测技术研究-zhangyuan
安卓软件漏洞修复与检测技术研究-zhangyuan
安卓软件漏洞修复与检测技术研究-zhangyuan
正炎 高
移动客户端恶意行为分析系统
移动客户端恶意行为分析系统
移动客户端恶意行为分析系统
正炎 高
Android软件安全审计及漏洞修复经验谈.宋申雷
Android软件安全审计及漏洞修复经验谈.宋申雷
Android软件安全审计及漏洞修复经验谈.宋申雷
正炎 高
基于大数据的Web攻击溯源
基于大数据的Web攻击溯源
基于大数据的Web攻击溯源
正炎 高
钱林松-专业逆向人才培养模式探讨与实践 - 21日上午分论坛2
钱林松-专业逆向人才培养模式探讨与实践 - 21日上午分论坛2
钱林松-专业逆向人才培养模式探讨与实践 - 21日上午分论坛2
正炎 高
http://git.oschina.net/signup?inviter=dubuqingfeng
网易蜂巢容器公有云的docker实践
网易蜂巢容器公有云的docker实践
正炎 高
当当网Docker应用实践
当当网Docker应用实践
当当网Docker应用实践
正炎 高
包含技术架构,功能演示等部分
圈圈App
圈圈App
正炎 高
More from 正炎 高
(16)
Analyzingbitcoinsecurity
Analyzingbitcoinsecurity
比特币分叉相关
比特币分叉相关
他山之石可以攻御
他山之石可以攻御
Mvvm及其组件体系@杨文坚
Mvvm及其组件体系@杨文坚
一个前端的自我修养 Winter
一个前端的自我修养 Winter
下一代Web前端技术 陈子舜
下一代Web前端技术 陈子舜
Ch04 secure software development_lifecycle
Ch04 secure software development_lifecycle
Android 软件安全攻防研究现状 claud isf2012
Android 软件安全攻防研究现状 claud isf2012
安卓软件漏洞修复与检测技术研究-zhangyuan
安卓软件漏洞修复与检测技术研究-zhangyuan
移动客户端恶意行为分析系统
移动客户端恶意行为分析系统
Android软件安全审计及漏洞修复经验谈.宋申雷
Android软件安全审计及漏洞修复经验谈.宋申雷
基于大数据的Web攻击溯源
基于大数据的Web攻击溯源
钱林松-专业逆向人才培养模式探讨与实践 - 21日上午分论坛2
钱林松-专业逆向人才培养模式探讨与实践 - 21日上午分论坛2
网易蜂巢容器公有云的docker实践
网易蜂巢容器公有云的docker实践
当当网Docker应用实践
当当网Docker应用实践
圈圈App
圈圈App
Android混淆技巧与反混淆 小波
1.
dac519c3b5927f2762a2fa6a94b630f44ad9d11f Android 混淆技巧与反混淆
2.
# Image from: http://www.usmile.at/sites/default/files/publications/201306_obf_report_0.pdf 小波 Bob
Pan 混淆 反混淆 dex2jar 加固 脱壳 pxb1988@gmail.com About Me
3.
# 不冲突, 可联⽤用! 混淆VS加固 混淆 • 将代码变得难以阅读 •
配置复杂 需要开发配合 加固 • 隐藏代码 • 对抗自动化工具 • 反调试/反篡改/反注入 • 一键搞定 不需要开发配合
4.
# Ref: http://www.saikoa.com/comparison-proguard-and-dexguard 工具 • ProGuard •
DexGuard
5.
# 缺点: λ 接⼝口相关的名字⽆无法替换 λ 反射很难⾃自动识别 优点: λ 代码可读性差 λ 减少文件大小 名字替换 • 替换类名 • 替换函数名 •
替换成员名 • 替换所有引用
6.
# • 超长名字 oooooooooooooo... • 找茬 Oo0o0OO00oooOOo0oo ijijijjiiiJiIIjii •
__$$_$$$$__$$_ • java语法关键字 int int = 5; • Unicode • ȷava u0237 • CJK字符 • 难以阅读字符 • 盲文点字模型 2800-28FF 名字替换:奇葩的名字
7.
# -dontshrink -dontoptimize -dontusemixedcaseclassnames -keepattributes *Annotation* # ⼏几⼤大组件 -keep
public class * extends Activity/Application/... ... #其他keep, 这⾥里略去 -dontwarn ** -printmapping mapping0.txt -injars obad-dex2jar.jar -outjars aaa.jar -libraryjars android.jar 名字替换:如何对付奇葩 ? • 相对来说'abc'是比较好阅读的 • Proguard 再混淆一次!
8.
# 处理前 处理后 名字替换:结果比较
9.
# 名字替换:如何对付abc ? •
没办法自动化, 只能靠阅读代码 • 高富帅 JEB • 普通大众 Proguard
10.
# λ 1. ⽣生成默认的mapping文件 -dontshrink -dontoptimize -injars aaa.jar -libraryjars
android.jar -keep class * -printmapping mapping1.txt com.android.system.admin.x -> com.android.system.admin.x: java.lang.String a -> a java.lang.String d -> d int e -> e ... Proguard配置 Mapping文件 名字替换: Proguard重命名
11.
# λ 2. 修改mapping文件, 重新运行Proguard -dontshrink -dontoptimize -injars
aaa.jar -outjars bbb.jar -libraryjars android.jar -applymapping mapping1.txt com.android.system.admin.x -> ...ObadSQLiteOpenHelper: android.database.sqlite.SQLiteDatabase f -> database byte[] g -> encoded_data_array java.lang.String a(int,int,int) -> decrypt Proguard配置 Mapping文件 名字替换: Proguard重命名
12.
# Proguard重命名结果
13.
# 再混淆一次 ⾃自动化重命名 a → Clz_a b
→ fld_b c → mtd_c d → Clz_d_List ⾃自动化分析 Source Enum ACC_BRIDGE Getter/setter 识别开源SDK ⾃自动反编译 ⼿手⼯工调整 ⼿手⼯工分析代码 + 源码在⼿手 日志 toString 反混淆大项目(名字恢复)
14.
# • 将字符串在运行时恢复 • DexGuard •
String a(int, int, int) • Other • String a(String) 优点: λ 静态看不到字符串 缺点: λ 内存消耗增加 λ 性能降低 Class.forName(a(130, 1, -10)) .getMethod(a(53, 19, -21), Class.forName(a(79, 1, -11))) .invoke(j, instance); 字符串加密
15.
# getstatic System.out LDC “hello
world!” invokevirtual println(String) getstatic System.out sipush 130 sipush 1 sipush -10 invokestatic a(int,int,int) invokevirtual println(String) System.out.println(“hello world!”); 字符串加密:简单实现 • Java bytecode 使用LDC指令加载字符串 • 替换对应的LDC指令即可实现加密
16.
# λ 使用'==' ⽐比较字符串 void fa(){ fb(“1.0”); } void
fb(String version) { if(version == “1.0”){ print(“yes!”); } } void fa(){ fb(new String(...)); } void fb(String version) { if(version == new String(...)){ print(“yes!”); } } 条件成立, 打印yes 条件不成立, 什么都没有 λ 解决办法: 使用'equals' ⽐比较字符串 字符串加密:带来的问题
17.
# private static String
decrypt(int n, int n2, int n3) { … } String a = decrypt(-20, 842, -576); 解决办法: 找到对应的函数和参数, 反射调⽤用, 将结果写回. 字符串加密: 如何应对? • 静态函数 • 返回值是String • 解密函数没有对外引用 • 参数是固定值
18.
# 解密前 解密后 注:t.q(...)也是解密函数 字符串解密结果
19.
# 反射替换 • 将函数替换为等价的反射API调用 String
c = "abc".substring(2,3); String c = (String)Class.forName("java.lang.String") .getMethod("substring", int.class, int.class) .invoke("abc", 2, 3) 优点: λ 与字符加密串结合效果更佳 缺点: λ 代码⼤大⼩小增加 λ 性能降低
20.
# Local Stack Opcode ldc
"abc" “abc” sipush 2 “abc”, 2 sipush 3 “abc”, 2, 3 invokevirtual substring(II) String c = "abc".substring(2,3); 1. 将Stack的数据保存到Local 2. 构建Class对象 3. 构建Method对象 4. 重新加载Local中的值到Stack 5. 调⽤用invoke函数 思路: 反射替换: 简单实现
21.
# Local Stack Opcode “abc”,
2, 3 astore 1, istore 2, istore 3 “abc”, 2, 3 ldc “java.lang.String” invokestatic Class.forName “abc”, 2, 3 String.class ldc “substring”, ... #构建参数类型 invokevirtual Class.getMethod “abc”, 2, 3 substring aload 1, iload 2, iload 3, “abc”, 2, 3 substring, “abc”, [2, 3] invokevirtual Method.invoke() String a=”abc”; int b=2; int c=3; String c = (String)Class.forName("java.lang.String") .getMethod("substring", int.class, int.class) .invoke(a, b, c) 等价于 反射替换: 简单实现
22.
# • 1. 将所有的Class.forName恢复成class对象 String
c = (String)Class.forName("java.lang.String") .getMethod("substring", int.class, int.class) .invoke("abc", 2, 3) String c = (String)String.class .getMethod("substring", int.class, int.class) .invoke("abc", 2, 3) 反射替换:如何处理?
23.
# 反射替换:如何处理? • 2.
将getMethod恢复成对应对象 String c = (String)String.class .getMethod("substring", int.class, int.class) .invoke("abc", 2, 3) String c = (String) [String.substring(II)] .invoke("abc", 2, 3) 表示一个Method对象
24.
# • 3. 将invoke函数展开 String
c = (String) [String.substring(II)] .invoke("abc", 2, 3) String c = (String) ”abc”.substring(2,3) 反射替换:如何处理?
25.
# 清理前: 清理后: 清理反射结果
26.
# 日志清除 • 清理android日志输出代码 •
实现原理 Ref: http://stackoverflow.com/questions/5553146/disable-logcat-output-completely-in-release-android-app/5553290#5553290 -assumenosideeffects class android.util.Log { public static *** d(...); public static *** w(...); public static *** v(...); public static *** i(...); }
27.
# Ref: http://stackoverflow.com/questions/22713166/removing-log-calls-with-proguard-leaves-behind-stringbuilders new StringBuilder("version
is: ").append(n); Log.d(“tag”, “version is ” + version ); 原因: “version is” + version 会被转换成 new StringBuilder(“version is ”).append(version).toString(). 而Proguard只负责删除Log.d的函数调⽤用, 没有删除StringBuilder相关的代码 清理后: 源代码: 日志清除: Proguard缺陷
28.
# Ref: http://www.android-decompiler.com/blog/2013/04/07/dexguards-assets-encryption/ 优点: λ 隐藏资源于⽆无形 缺点: λ 必须调⽤用AssetManager.open() λ 性能降低 • 将apk中asset目录的文件加密,
使用前解密 Asset加密
29.
# InputStream is =
this.getAssets().open(); Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding"); cipher.init(DECRYPT_MODE, /* key */); return new CipherInputStream(is, cipher).available(); 等价于 Asset加密: 原理 • 拦截open函数 返回解密流
30.
# 原理: AndroidManifest中同时包含ResourceId和namespace/name信息. 而Android部分使用ResourceId查找对应的xml标签. 这部分的namespace/name信息是多余的, 可以删除. AndroidManifest混淆 • namespace和name信息被清除
31.
# AndroidManifest恢复 • 根据ResourceId恢复namesapce/name •
Apktool已经支持读取 • axml工具也可以
32.
# 混淆项 恢复 是否可⾃自动化
难度 名字替换 人工恢复 X 999999999 日志清除 X X X 字符串加密 静态分析+动态运 ⾏行 可以 5 反射替换 静态分析 可以 4 Assert加密 可以恢复 半⾃自动化 2 XML混淆 可以恢复 现成⼯工具 1 小结
33.
# 混淆建议 • 减少-keep的数量 •
SDK • JNI代码 • 反射 • 序列化/反序列化 • 清除其他线索 • 清除SourceFile • 避免日志输出 • 混用混淆项 • 写烂代码 • 加固jaq.taobao.com
34.
pxb1988@gmail.com Q & A
Download now