0

0

安卓APP逆向分析与保护机制是怎样的

WBOY

WBOY

发布时间:2023-05-20 16:20:35

|

1828人浏览过

|

来源于亿速云

转载

想知道android app常见的保护方法及其对应的逆向分析方法吗?

在本次分享中,探讨了多个方面的安卓APP安全,包括混淆代码、整体Dex加固、拆分Dex加固和虚拟机加固。这些内容已经成为国内近几年Android App安全保护中的一个主要趋势。

一、混淆代码

Java代码是非常容易反编译的,作为一种跨平台的、解释型语言,Java 源代码被编译成中间“字节码”存储于class文件中。由于需要跨平台,这些字节码中包含大量语义信息,容易被反编译成Java源代码。开发人员通常会对编译好的class文件进行混淆以更好地保护Java源代码。

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。ProGuard是一个开源项目,它能对字节码进行混淆、体积缩减和优化等处理。

Proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节:

安卓APP逆向分析与保护机制是怎样的

压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute);优化(Optimize):对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

在分享中,钟亚平展示了利用Proguard,对Dex2jar进行反编译处理后的Apk效果示例:

安卓APP逆向分析与保护机制是怎样的 
Proguard处理后

安卓APP逆向分析与保护机制是怎样的    

Proguard混淆器不仅能够保护代码,而且能够精简编译后的程序大小,减少内存占用。

混淆代码逆向分析

钟亚平分享了一个名为DEGUADR的国外工具,它使用统计方法来解混淆代码,以便反编译。尽管这个工具的准确性不是100%,但它仍能部分地帮助反编译代码。

安卓APP逆向分析与保护机制是怎样的    

使用DEGUADR解混淆的示例:

安卓APP逆向分析与保护机制是怎样的    

com.xxxxx.common.util.CryptoUtil网站也提供了一种反编译服务,如下所示:

java.lang.String a(byte[]) -> encodeToStringjava.lang.String a(byte[],boolean,java.lang.String) -> a byte[] a(byte[],byte[]) -> encrypt byte[] b(byte[]) -> getKey byte[] b(byte[],byte[]) -> decrypt byte[] d(java.lang.String) -> getKey java.lang.String a(byte,char[]) -> a java.lang.String a(java.io.File) -> getHash java.lang.String a(java.lang.String) -> c java.lang.String b(java.lang.String) -> encode

二、整体Dex加固

随着安全技术的不断发展,新的“加固技术”已经出现,用以加强Android的保护强度。DEX加固是对DEX文件进行加壳防护,防止被静态反编译工具破解而泄露源码,最刚开始出现的是整体加固技术方案。

安卓APP逆向分析与保护机制是怎样的    

整体加固技术的原理如上所示,包括替换application/classes.dex、解密/动态加载原classes.dex、调用原application相关方法、将原application对象/名称设置到系统内部相关变量四大环节。其中最为关键的一步就是解密/动态加载原classes.dex,通过加密编译好的最终dex源码文件,然后在一个新项目中用新项目的application启动来解密原项目代码并加载到内存中,再把当前进程替换为解密后的代码,能够很好地隐藏源码并防止直接性的反编译。

整体Dex加固逆向分析

整体Dex加固逆向分析有两种常用的方法。其一是在内存中暴力搜索 dex\n035,再 dump。以下是在32位系统中的效果示例:

安卓APP逆向分析与保护机制是怎样的    

另一种方法就是通过HookdvmDexFileOpenPartial(void* addr, int len, DvmDex**)。

三、拆分Dex加固

随着业务规模发展到一定程度,不断地加入新功能、添加新的类库,代码在急剧膨胀的同时,相应的apk包的大小也急剧增加,那么简单的整体加固方案就不能很好地满足安全需求,在整体加固方案之外又出现了拆分加固的技术方案。

安卓APP逆向分析与保护机制是怎样的    

但是如上所示,dex文件在加固时,针对中间缺失的一部分数据会以解密后的数据来替换,有的时候这种拆分替换也会导致数据不准确。需要了解dex文件的数据结构,才能确定应该拆分哪种类型的数据。

Dex文件结构极为复杂,以下图示选取了其中较为重要的内容。事实上,dex文件是一个以class为核心组装起来的文件,其中最重要的是classdata和classcode两部分,有其特定的接口和指令数据,选取这两部分来拆分的话,即使拆分出来也不会泄露class数据和字节码数据,反编译出来也不完整,安全性较高。

安卓APP逆向分析与保护机制是怎样的    
   

拆分Dex加固逆向分析

对于dex拆分加固的逆向分析,如下所示,可以用classdata替换从而组装成新的dex文件,虽然和原来的dex文件不会完全一致,但也在一定程度上复原了被拆分数据的样子。

Emergent Drums
Emergent Drums

使用Emergent Drums生成独特的鼓样本,全部免版税。

下载

安卓APP逆向分析与保护机制是怎样的        
   

但要注意的是,这种方法仅适用于被拆分出去的数据变形一次性完成,也就是说,在有其他保护思路的情况下尽量避免使用,而且即使有需要也尽量选在用到这个类的时候才去恢复。

此外还有一个更底层一些的工具dexhunter,这个工具较为前卫,但同时也有一些局限性,譬如部分指令数据会被优化,形成的代码界面不是很美观等等。

安卓APP逆向分析与保护机制是怎样的        
   

四、虚拟机加固

对字节进行处理是虚拟机加固的一种方式,也可看作是dex拆分加固的一种。下面是一个经过虚拟机加固处理的常规的Android系统代码

安卓APP逆向分析与保护机制是怎样的        
   

以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会变形成为之前的字节码,安全系数较高。

虚拟机加固逆向分析—HOOK JNI 接口

这种方式下的逆向分析,一方面可以通过HOOK JNI 接口来实现,它有两种实现方式。

其一是类成员/静态变量操作相关接口,比如:

GetStaticDoubleFieldSetStaticDoubleField GetDoubleField SetDoubleField … 

(byte, object, int,long…)

其二是反射调用类方法,比如:

CallVoidMethodACallBooleanMethodA CallShortMethodA CallObjectMethodA …

CallStaticVoidMethodACallStaticBooleanMethodA CallStaticShortMethodA CallStaticObjectMethodA …

(byte, int, long,double …)

CallObjectMethodA(JNIEnv* env, jobject object, jmethoID method, …) 

安卓APP逆向分析与保护机制是怎样的 
通过HOOKJNI 接口实现虚拟机加固逆向分析

使用HOOK JNI接口可以了解APP大致的调用流程,无需进行底层逆向。但是对于复杂的调用过程,或者虚拟化方法数量较多的情况,这种逆向分析手段看起来会比较混乱;对于不需要返射到Java层执行的指令,如算术、逻辑运算等,则无法监控到。

虚拟机加固逆向分析—分析指令操作码映射

另一方面,也可以通过分析指令操作码映射来逆向分析。以下方法可以在使用相同加固版本或映射关系的情况下采用:

安卓APP逆向分析与保护机制是怎样的                        
                   

但在实际情况中,每次加固时的映射关系都是随机变化的,如下所示,这种情况下就无法直接建立映射关系。

安卓APP逆向分析与保护机制是怎样的                        
                   

不依赖于操作码的映射关系只与虚拟机结构有关,所以需要根据偏移关系建立映射关系,从而进行逆向分析。

安卓APP逆向分析与保护机制是怎样的                        
                   

安卓APP逆向分析与保护机制是怎样的                        
                   

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

6

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

6

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

8

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

14

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

17

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

130

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

208

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 74.7万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号