APP加固攻防梳理

【Android 逆向】DEX 文件攻防:从主流反编译工具链到实战防护策略 本文深入探讨了Android DEX文件的攻防策略,详细解析了主流反编译工具链(如apktool、dex2jar、jadx)的使用技巧与实战案例。从基础混淆到DEX加密、代码虚拟化等高级防护手段,提供了六层防御策略的完整实施方案,并展望了反编译与防护技术的未来发展趋势。 阅读详情

作者:小道安全
转载地址:https://juejin.cn/post/7077121745697636359

背景

现在市面上对APP的安全合规管控越来越严格了,也就要求了APP在上架之前一定要做合规检测和加固处理。对APP就是加固的好处,可以提高APP的安全性,提高APP被逆向分析破解的门槛,同时通过加固保护可以提高过安全合规的检测。由于APP加固技术不断被攻破情况,因此加固技术也是不断在快速迭代的过程。现在市面上的加固产品的还是比较多的,并且各个加固技术产品都有其各自优缺点,但是加固产品的所采用技术去有很多共性的地方。下面就对加固和脱壳对抗方案做些梳理总结。

加固准备

APP加固主要是对APP中的dex文件、so文件、资源文件等进行保护,因此这边对这APP中的关键文件结构做简短梳理总结。

App文件的结构

Dex文件结构

SO文件结构

简单的APP加固原理的流程

加固的代码先运行,进行初始化工作;

加固的代码开始解密被保护的核心代码;

加固的代码开始加载解密后的核心代码;

加固的代码把控制权转交给核心代码。

第一代加固和脱壳

第一代加固技术主要做了进行对app的dex文件进行保护和做了一些简单的反调试保护。

Dex保护:

Dex文件整体加密、字符串加密、自定义DexClassLoader。

动态防护:

ptrace反调试、TracePid值校验反调试。

第一代加固的出现也同时出现各种对加固技术的攻破。从而出现了各种对抗加固的脱壳方法。

最突出的是直接从内存dump出dex完整结构脱壳原理:

程序在启动过程中,要保证程序正常运行,那么加固壳会自动解密受保护的dex文件并完成加载,基于这个子解密的原理,我可以选择在dex加载完成这个时机点,将其dump下来。从而实现第一层防护壳、加密壳的脱壳。

下面罗列几个脱壳方案

缓存脱壳法:

第一代的某些加固产品,安装包是加密压缩的,安装后回在data/dalvik-cache目录下生成解密的odex文件,这时候只需要获取odex文件进行做为分析的突破点。

内存 dump脱壳法

通过工具:IDA Pro + dumpDEX

1、通过/proc/%d/maps获取内存映射

2、在内存中查找关键字 dex.035或dex.036

3、手动dump查找到的数据。

动态调试脱壳法

1、通过基于IDA的android_server的代理方式进行附加app。

2、再IDA中下dvmDexFileOpenPartial 断点,确认要dump的起始地址和大小。

3、用ida的脚本方式进行dump出原始数据。

HOOK脱壳法

Hook脱壳法一般都是基于frida和xposed这两个框架进行做hook操作的。

这种hook脱壳法:先需要进行分析app应用,找到可以进行hook的函数,

然后在选择用的顺手的、适用的frida或xposed框架进行 hook。

(xposed是java编译,适用于java层hook;frida适用于java层和native层hook)。

通过对关键函数dvmDexFileOpenPartial进行hook实现脱壳。

也可以通过xposed框架hook ClassLoader的loadClass函数实现脱壳。

定制系统脱壳法

主要是通过修改系统源码中的关键函数,接着将修改后的源码重新编译并进行刷机。

例如通过修改系统dvmdexfileopenpartial函数的关键逻辑。在函数里面修改写入我们想要实现的功能。

第二代加固和脱壳

由于第一代加固是整体性加固的,因此只要dump到关键点后,就可以完整的获取到dex整个内容。由于第一代壳的缺点,随之而来的就是进行对APP中关键类的抽取技术。那么第二代加固主要进行如下的功能点。

DEX保护: DEX类抽取、DEX动态加载、SO动态加载

So保护:SO加密

动态防护: 反调试,防HOOK

资源文件保护:本地数据库保护、本地文件保护

脱壳技术方案

脱壳原理:

主动调用类中的每一个方法,并实现函数指令的还原

常见的加固厂商的指令抽取的实现方式主要又两大类,一种是指令代码在dex文件原便宜位置处还原,另外一种就是随机分配,通过修订偏移的方式,使程序在执行过程中通过修定的便宜找到函数指令;android程序在执行过程,使用到类时候,都需要进行加载,而在加载过程中,函数指令就会进行指令还原或修订函数指令指向的位置,我们可以利用这个时机,将代码拷贝到原代码位置,进而实现类抽取壳的脱壳。

下面罗列针对第二代加固的脱壳法

内存重组脱壳法

通过内存中dex文件的格式,找到完整的dex文件,将其组合到一起。

内存dump脱壳法

通过工具:IDA Pro + dumpDEX

1、通过/proc/%d/maps获取内存映射

2、在内存中查找关键字 dex.035或dex.036

3、手动dump查找到的数据。

也可以直接用frida中的dump脚本进行内存dump脱壳。

动态调试脱壳法

1、通过基于IDA的android_server的代理方式进行附加app。

2、再IDA中下dvmDexFileOpenPartial 断点,确认要dump的起始地址和大小。

3、用ida的脚本方式进行dump出原始数据。

HOOK脱壳法

Hook脱壳法一般都是基于frida和xposed这两个框架进行做hook操作的。

这种hook脱壳法:先需要进行分析app应用,找到可以进行hook的函数,

然后在选择用的顺手的、适用的frida或xposed框架进行 对关键函数hook。

(xposed是java编译,适用于java层hook;frida适用于java层和native层hook)。

通过对关键函数memcmp、dexFileParse进行hook实现脱壳。

也可以通过hook ClassLoader的loadClass函数实现脱壳。

定制系统脱壳法

主要是通过修改系统源码中的关键函数,接着将修改后的源码重新编译并进行刷机。

例如通过修改系统memcmp、dexFileParse函数的关键逻辑。在函数里面修改写入我们想要实现的功能。

第三代加固和脱壳

第三代加固方案主要进行对函数进行做抽取,并进行做动态加解密方式,下面罗列关键的加固技术点

DEX保护: DEX Method代码抽取、Dex Method动态解密

SO保护:SO加壳

动态防护:防内存dump、防系统核心库HOOK

资源文件保护:H5文件保护

APP函数抽取指令流程:

1、解析原始dex文件格式,保存所有方法的代码结构体信息。

2、通过传入需要置空指令的方法和类名,检索到其代码结构体信息。

3、通过方法的代码结构体信息获取指令个数和偏移地址,构造空指令集,然后覆盖原始指令。

4、重新计算dex文件的checksum和signature信息,回写到头部信息中。

脱壳方法:

HOOK脱壳法

通过利用frida框架进行hook关键函数DexFile,OpenFile、dexFindClass等关键函数实现脱壳。

定制系统脱壳法

通过修改系统源码中的关键函数如DexFile、OpenFile、dexFindClass函数的关键逻辑,然后进行重编系统。

在ART中通过修改定制dex2oat法进行脱壳。

第四代加固和脱壳

现在市面上强度最强加固方案实属代码虚拟化保护的方案。通过将程序的代码编译为虚拟机指令也就是虚拟机代码(也就是自定义的代码集),通过虚拟机cpu解释并执行的一种方式。

下面罗列下关键的加固技术点

DEX保护:代码VMP虚拟化保护

SO保护:基于llvm的SO文件保护(ELF VMP)

脱壳方案

HOOK脱壳法

可以基于frida框架进行针对不同虚拟机(dalvik和art)实现进行hook。

定制系统脱壳法

总结

利用frida脱壳方法:

1、通过找到DexFile对象(art虚拟机是DexFile对象,dalvik虚拟机下是DexFile结构体),获取到DEX文件的起始地址和大小,然后dump下来。

常见能够找到DexFile对象的函数有LoadMethod、ResolveMethod函数等,能直接获取到DEX起始地址和大小的常见函数有openMemory、dexparse、dexFileParse、dvmDexFileOpenPartial等函数。frida_unpack便是其中的代表作。

2、利用frida的搜索内存,通过匹配DEX文件的特征,例如DEX文件的文件头中的魔法值—dex.035或dex.036这个特征。frida-Dexdump便是这种脱壳方法的代表作。

自定义系统和定制的android设备方法:

1、采用定制的android的rom,可以有效对抗市场中所有的加密壳、类抽取类型的壳;相比开源的脱壳工具,大体都是基于hook框架,例如frida、Xposed;目前大多加固厂商已经对hook框架,以及脱壳框架的特征进行了安全检测,这会导致app启动失败,从而实现脱壳失败,而通过自定义的rom,没有依赖hook框架,也就没有相关框架特征代码标志,所以脱壳成功率会比较高。

2、采用定制android硬件设备优势,基于android的开源性,google公司每次发布新版的rom,都会率先在Pixel、Nexus系列的设备上最早应用,这也导致大部分安全从业者为了提升工作效率,间隔的采用自定义ROM实现方式,在市场中开源脱壳ROM,大多是需要刷Nexus、Pixel系列机型,这也使得大多加固厂商对这Nexus、Pixel系列机型做特殊,更深层次的安全防护检测,以此保证程序在运行过程中的安全性。通过定制android硬件设备,没有Nexus、pixel设备相关特征,更能提高脱壳的成功率。

App安全攻防实战:逆向分析与加固技术深度解析 在移动应用开发领域,逆向工程与代码加固是保障App安全的核心技术。逆向工程通过静态分析和动态分析,深入理解应用内部逻辑与数据流,帮助开发者发现潜在漏洞与风险点。其技术价值在于从攻击者视角审视自身防御体系,提升应用抗攻击能力。在实际应用场景中,逆向分析常用于安全审计、漏洞挖掘与竞品研究,而加固技术则通过代码混淆、反调试等手段增加攻击门槛。本文聚焦于Frida动态插桩与SSL Pinning绕过等热词技术,结合实战案例,系统阐述如何构建有效的App安全防线。 阅读详情

相关推荐

Android应用免费加固方案实战:从ProGuard到Obfuscator-LLVM的攻防组合拳

在移动应用开发领域,代码保护是保障应用安全的核心环节。其基本原理是通过混淆、加密和运行时保护等技术,增加逆向工程和恶意篡改的难度,从而保护知识产权和用户数据。这项技术的核心价值在于,它能有效抵御自动化破解工具和常见的静态分析,是应用上架前满足安全合规要求的基础防线。在实际工程中,开发者常面临成本与防护强度的权衡。针对这一痛点,结合使用ProGuard/R8进行基础Java代码混淆,并将核心算法通过Obfuscator-LLVM编译到Native层进行深度混淆,构成了一个高性价比的技术组合。这种方案尤其适用于

weixin_34005090的博客 388

Android加固平台推荐(五星)

目前我使用的是360加固来用来加固,然后加固完成,使用的是爱加密来加密。这样的组合还不错。现在的360加固的加密要收费,之前是免费的加固与加密一起,现在要开vip才可加密,但是加固还是老样子免费。喜欢就喜欢吧,喜欢没有理由。

zxz_zxz_zxz的博客 2万+

【Android 教程系列第 30 篇】为什么要为 App 应用加固 ?如何为 App 应用加固 ?

一:为什么要为 App 应用加固 ? 二:如何为 App 应用加固 ? 三:加固后为什么要重新签名 ?

“Allen Su”的博客 7055

移动安全之 APP 加固:保障移动应用安全的重要手段

无论是从防御者的角度防止 APP 被攻击,还是从攻击者的角度尝试突破加固措施,都体现了 APP 加固在移动安全领域的重要性。在 APP 与服务器之间的通信中,如果使用 https 协议,要对 SSL 证书进行校验,确保通信的安全性。对 APP 中的时间戳进行验证,确保数据的时效性和真实性。在 APP 进行一些敏感操作时,如登录、转账等,要对环境进行清场,确保没有恶意程序在后台运行,影响操作的安全性。对于 APP 中的手势密码,要将其作为一个全局的标志,在 APP 的各个相关模块中进行统一的管理和验证。

m0_57836225的博客 4998

从ESP/ABS选型看轮速传感器:为什么你的车用了AK+PWM+7/14mA三种协议?

本文深入解析了汽车轮速传感器的三种主流协议(7/14mA电流型、PWM型和AK协议型)及其混合应用场景。通过对比不同协议的技术特点、成本效益和工程挑战,揭示了现代车辆采用多种传感器协议背后的设计逻辑,包括成本控制、性能平衡和冗余设计等关键因素。

weixin_29266679的博客 534

Transformer时序预测避坑指南:TFT在风电场的5个实战经验

本文分享了Temporal Fusion Transformer在风电场功率预测中的五个实战经验,涵盖数据预处理、模型调优、显存优化、注意力机制解读及在线部署。针对风电数据噪声大、概念漂移等挑战,提供了从构建数据质量标签到高效超参调优的具体方案,并强调利用Transformer架构的可解释性进行业务洞察,助力实现稳健的工业级时序预测。

bert9linguist的博客 462

【干货分享】uniapp做的安卓App如何加固

本工具用于对android加固后的apk进行重新签名。版本文件备注Windows版apk签名工具压缩包.exe该版本包含Java运行环境,不需要额外安装。通用版Adoptium。本工具依照Apache 2.0协议开源,可以在这里查看源码。使用说明下载签名工具dx-signer.jar,双击运行。选择输入apk、aab文件。选择签名的key文件,并输入key密码。选择重签后apk、aab的路径,以apk结束。如:D:\sign.apk点击“签名”按钮,等待即可签名完成。

dingxiang234的博客 3674

95.qt qml-诺谦通用可扩展多功能QML界面

如下图所示:自带一个功能界面,可以通过功能界面添加不同功能,并且可以固定到顶部水平导航栏中,对于N多小功能的项目而言,非常方便,这样用户就可以根据自己喜好来使用自己常用的功能了。

抵抗时间扭曲,坚持做一件有意义的事 3049

【Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )

一、 APK 加固原理、 1、 Android 应用反编译、 2、 ProGuard 混淆、 3、 多 dex 加载原理、 4、 代理 Application 开发、 5、Java 工具开发、 6、Application 替换、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

论文必备 - YOLOv8训练前一键扩充数据集,支持9种扩充方法,支持图像和标签同步扩充

在网络模型训练前,大量的数据集是必备的。而对于一些特殊场景中的特殊目标,大量的数据集往往难以获取,无法满足模型训练的基本需求。本文提供了,脚本可一键运行,。

Limiiiing的博客 770

APP逆向与安全防护实战:从反编译到代码保护全流程(2026版)

移动安全攻防的本质没有银弹攻击方的武器库越来越丰富(Frida 18 + Unicorn 3 + Ghidra 12)防御方的防线也在不断升级(VMP → TEE → 云端动态加载)最终决定胜负的是成本——让破解成本 > 收益角色建议🔴 逆向工程师不止于会Hook,要深入ELF/PE结构和ARM汇编🔵 APP开发核心逻辑放到Native层 + 云端动态下发关键代码🛡️ 安全工程师建立完整的移动安全测试流程(SAST + DAST + 渗透)一句大实话。

aimanghe的博客 1014

华为od 面试八股文_JAVA语言_01_含答案

华为od 面试八股文_JAVA语言_01_含答案

MISAYAONE的博客 4318

移动端逆向复盘:从 App 加固到协议还原的攻防拉锯

移动端逆向是一场从加固到协议、从代码到环境的持续拉锯。壳层对抗反调试,代码层对抗混淆,协议层对抗加密签名,环境层对抗指纹风控,最终由服务端校验收口。技术复盘能还原签名与请求构造,并以超时、重试、退避与限速保证验证稳定。落地时必须守住合规红线,认清客户端加固的时效性局限,把防御重心放在服务端强校验与行为风控上,让伪造请求在逻辑层面无法成立,而非寄望于客户端不可破。

2301_80245214的博客 4997

(SEED-Lab)Buffer Overflow Vulnerability Lab缓冲区溢出实验

(SEED-Lab)Buffer Overflow Vulnerability Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录一、实验目的二、实验步骤与结果2.1 环境初始化2.2 Task1 运行shellcode2.3漏洞程序2.4 Task 22.5 Task 3: ASLR2.6 Task 4: Stack Guard2.7 Task 5:不可执行栈三、参考文献 一、实验目的 理解缓冲区溢出攻击的原理以及如何实施攻击 理解针对缓冲区溢出的防御措施

lunan的博客 8982

TIA protal与SCL从入门到精通(4)——软件单元使用

平台: TIA portal 15.1 1.添加软件单元 添加软件单元如下图: 关于软件单元使用基本限制,看如下文章即可 TIA protal与SCL从入门到精通(3)——软件单元基本介绍 每个软件单元是一个独立结构,所以每个软件单元的运行方式与实际PLC类似,所以首先添加主函数块: 注意:无论系统是否是具有并发性(这里不要混淆并行与并发的概念),在PLC所有主函数执行总是按主函数依次完成...

苦走一口田 7380

移动APP安全加固实战:从逆向工程攻防到“盾防护”体系构建

在移动应用开发领域,逆向工程与安全防护是开发者必须面对的核心议题。逆向工程通过静态分析和动态分析等技术手段,能够反编译、调试应用程序,从而获取源代码、业务逻辑乃至加密算法,这对应用的知识产权和用户数据安全构成了直接威胁。为了有效抵御此类攻击,构建一套多层次、立体化的安全防护体系至关重要,这不仅能保护核心资产,也是满足日益严格的合规要求的关键。其技术价值在于显著增加攻击者的分析难度与成本,通过代码混淆、反调试、完整性校验及通信安全加固等手段,为应用建立纵深防御。在实际应用场景中,无论是金融、社交还是工具类AP

weixin_30279671的博客 381

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HVV大型攻防演练检测篇

HVV行动作为国家级攻防演练具有重大意义,旨在通过检验单位网络和信息基础设施的安全防护、应急处置和指挥调度能力,提高信息系统的综合防御能力。而要打好一场完美的防守战役应该先从组织本身的脆弱性整改开始,其整改工作应该具备全局性视图。本文将主要从HVV行动第一阶段,即,准备阶段时涉及到的检测内容和要点进行梳理和分析,并给出相应的加固建议。01整体安全整改。

m0_71746416的博客 732

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HVV大型攻防演练检测篇,看完这篇就足够了~

(1)物理网络区域物理网络区域是指数据网中,依照在相同的物理位置定义的网络区域,通常如办公区域,远程办公室区域,楼层交换区域等。(2)网络功能区域功能区域是指以功能为标准,划分的逻辑网络功能区域,如互联网区域,生产网区域,办公网区域等。(3)网络安全区域网络安全区域是指网络系统内具有相同安全要求、达到相同安全防护等级的区域。同一安全区域一般要求有统一的安全管理组织和安全防护体系及策略,不同的安全区域的互访需要有相应得边界安全策略。

liuhyusb的博客 915

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

HVV 攻防演练检测全攻略|零基础入门到精通,一篇封神

本文围绕 HVV 行动准备阶段的安全防护工作展开,梳理了整体安全整改、资产梳理、互联网暴露面梳理等 12 个核心方面,明确各环节风险点,并给出针对性加固建议,为 HVV 攻防演练前期安全整改提供全面指导,助力提升单位网络与信息系统综合防御能力。

m0_71746416的博客 337
上一篇: 金三银四必备,全面总结 Kotlin 面试知识点
下一篇: 仓颉编程语言:整数类型(基础数据类型)
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值