Android解析编译之后的Dex文件格式
一.Dex 文件格式 有了这张神图,那么接下来我们就可以来介绍dex的文件结构了,首先还是来看一张大体的结构图: 二.准备工作 我们在讲解数据结构之前,我们需要先创建一个简单的例子来帮助我们来解析,我们需要得到一个简单的dex文件,这里我们不借助任何的IDE工具,就可以构造一个dex文件出来。借助的工具很简单:javac,dx命令即可。 创建 java 源文件 ,内容如下代码: pu...
一.Dex 文件格式 有了这张神图,那么接下来我们就可以来介绍dex的文件结构了,首先还是来看一张大体的结构图: 二.准备工作 我们在讲解数据结构之前,我们需要先创建一个简单的例子来帮助我们来解析,我们需要得到一个简单的dex文件,这里我们不借助任何的IDE工具,就可以构造一个dex文件出来。借助的工具很简单:javac,dx命令即可。 创建 java 源文件 ,内容如下代码: pu...
前言 最近tz不太好用,之前用的破解版的某洞已经彻底挂了。于是在网上找了一个某豹加速器。但是下载后发现只有两小时的会员时间,用完后还要花重金续费。作为社会主义爱国青年,面对这种违法app还在肆无忌惮的收费的现象,当然是不能忍了,于是决心破解之,以达到维护中华人民共和国宪法与法律尊严的目的! 违法app截图: 一、root检测 将app装在手机上打开,结果有提示: 应该是检测到root...
什么是AndroidStudio+smalidea插件调试? Android Studio 调试的原理 使用 Android Studio 进行动态调试,通过 Android Studio 导入反编译出的完整的 smali 代码,设置好调试所需的条件,设置断点。将移动设备连接至 PC端,然后运行待调试的apk应用程序,当该应用程序执行流程,运行至smali代码的断点处时,就会触发断点。从而...
Step 使用apkTool反编译apk文件; 分析apk,查看smail指令,分析smali指令,修改smali; 重新签名并且打包,android源码包包含签名工具; adb安装测试; Android虚拟机(硬知识) 名称:Android Dalvik 作者:丹·伯恩斯坦(Dan Bornstein) 名称来源:他的祖先曾经居住过的Dalvki的小渔村 特点: ...
介绍 商业APP为了防止反编译、被篡改,往往会采用第三方的APP加固方案,通过对源代码的混淆、加固、加壳等技术手段,隐藏源APP的逻辑结构,大大提高了反编译的难度,达到保障APP的安全与稳定运行的目的。而网赌、电诈、色情等涉网犯罪APP,基于成本考虑,其幕后的开发者往往不会采用第三方加固方案,但有可能会采用一些无成本的对抗机制,基于APK文件格式的反编译对抗就是其中的一种。该对抗机制主要利...
逆向分析APP的一般流程 1、使用自动化检测工具检测apk是否加壳,或者借助一些反编译工具依靠经验推断是否加壳 2、如果apk加壳,则需要首先对apk进行脱壳; 3、使用jeb、jadX,apktool等反编译工具对apk进行反编译; 4、先依据静态分析中得到的关键字符串关键api调用等方法快速定位需要分析的关键函数和流程; 5、如果依据简单的字符串、关键api无法快速定位,则apk可能使...
前言 在学习安卓逆向的萌新SR绝赞刷题中,最近做了三道有意思的题目,感觉很适合入门,于是写了个wp发了出来 App1-分析 工具:JADX,安卓设备/虚拟机 安装并打开app,是一个简单的 输入-校验 式app 我们用JADX打开apk,看一下反编译代码 首先打开xml文件,这里写明了app启动时打开的Activity,确定是MainActivity后转到反编译代码处 如图,很容易确定...
日志分析法-破解收费金币 先打开工具Monitor,然后再打开夜神模拟器,运行捕鱼APK 我们的目的就是想要获得更多的金币,所以在游戏中金币商城中点击购买金币,查看日志信 息 当点击4元购买40000金币时,弹出对话框的日志信息如下 8: D/cocos2d-x debug info(1319): event_id2 8: D/cocos2d-x debug info(1319): Ga...
逆向工程 来自维基百科的定义:https://zh.wikipedia.org/zh-hans/逆向工程 逆向工程(又称反向工程),是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在不能轻易获得必要的生产信息下,直接从成品的分析...
1.逆向技术基础 Frida操作手册-Android环境准备 Frida hook方便快捷,并且跨平台,可以学习一下 Brida操作指南 葫芦娃的又一篇神作,抓包,加密,解密一条龙。 介召几个frida在安卓逆向中使用的脚本以及延时Hook手法 延时hook,so,java层堆栈回溯的好文章! 学习Androidx86模拟器root安装xposed IamHuskar告诉我们学习xpose...
一种混合式设备指纹实现方案 现在生成设备指纹的方式一般有三种,第一种为主动式,主动采集设备N多信息,如UA、MAC、Serial等,在客户端生成唯一识别码。第二种为被动式,在终端设备与服务器通信过程中,从数据报文的OSI七层协议中,提取该终端设备的OS、协议栈和网络状态相关的特征集,并结合机器学习算法以标识和跟踪具体的终端设备。今天想跟大家分享的就是第三种,混合式,既有主动采集的部分,又有...
执行摘要 亚运会结束,国内黄色软件猖狂,不知名民兵来分析~ 0x01 威胁分析 分析网站信息www.xbbtestone1.com 众测平台分析url非恶意,且注册时间为2023.2月并且为香港服务器且真实IP为20.187.110.248,确定该 IP归属地为 香港微软服务器 网站分析结论:未发现存在Web漏洞 0x02 APP网络行为分析 抓包app ,获取可疑数据如下 ...
前言 OLLVM(Obfuscator-LLVM)是目前 Android 逆向分析中最常见的混淆手段之一。经过 OLLVM 混淆后的 SO 文件,其控制流被严重打乱,常量被加密,传统的通过搜索魔数常量来识别算法的方法往往失效。本文将讲解 OLLVM 混淆对算法识别的影响,以及针对 OLLVM_MD5、OLLVM_SHA1、OLLVM_Base64 的还原策略和实战技巧。 OLLVM 混淆...
前言 在上一篇文章中,我们讨论了 OLLVM 混淆下 MD5、SHA1、Base64 等算法的还原策略。本文将进一步深入,针对 AES 这类结构更复杂、轮函数更多的对称加密算法,讲解如何使用 Frida Stalker 在 OLLVM 混淆的代码中追踪和还原算法执行流程。AES 的还原难度远高于简单的哈希和编码算法,因此需要更精细的追踪策略。 Frida Stalker 工作机制回顾 ...
前言 在前面的文章中,我们讨论了通过代码追踪和动态分析来还原算法。本文将介绍另一种强大的分析手段——内存断点(Memory Breakpoint)。与普通的执行断点不同,内存断点可以在指定的内存地址被读取、写入或执行时触发,这在追踪加密数据变化、定位密钥派生时机等场景中非常有用。此外,我们还将探讨定制 Android 内核以实现更高级的调试能力。 内存断点的概念和类型 什么是内存断点 ...
前言 在 Android 逆向分析中,加解密算法无处不在。无论是 APP 的签名校验、协议加密、还是用户密码的存储,都离不开各类密码学算法。掌握常见加解密算法的原理和特征,是进行算法还原和协议分析的基础功。本文将从对称加密、非对称加密、哈希算法、编码算法以及消息认证码五个维度,系统性地介绍常见加解密算法的原理,并重点讲解如何在逆向分析中快速识别这些算法。 对称加密算法 AES(Adva...
前言 在 Android 逆向分析中,识别和还原标准算法是最基础也最高频的工作。很多时候 APP 使用的并不是自创算法,而是经过轻微伪装的标准算法。本文将通过 Base64、CRC32、MD5、SHA1 四种常见算法的还原案例,讲解如何从 SO 代码中快速识别标准算法,并给出完整的还原思路和实用工具推荐。 Base64 算法的识别与还原 Base64 原理回顾 Base64 是一种将二...
ADVMP 项目介绍 ADVMP(Android Virtual Machine Protection)是一个开源的 Android VMP 实现项目,旨在帮助安全研究人员学习和理解 VMP 的内部原理。与商业 VMP 产品不同,ADVMP 的源码完全公开,代码结构清晰,注释详尽,是学习 VMP 逆向分析的绝佳教材。 为什么要学习 ADVMP VMP 是 Android 逆向领域中最具挑...
Hyperpwn 简介 Hyperpwn 是一款专为 VMP(Virtual Machine Protection)逆向分析设计的 IDA Pro 插件。它提供了一套完整的工具链,用于追踪 VM 的执行流、提取 VM Handler、分析字节码调度逻辑,最终帮助逆向工程师构建 Handler 映射表并还原被保护函数的逻辑。 与手动分析 VM 解释器相比,Hyperpwn 能够大幅提升效率。...
背景:OLLVM 混淆下的 RC4 算法还原 在实际的 Android 逆向工程中,我们经常遇到被 OLLVM(Obfuscator-LLVM)混淆的 Native 函数。OLLVM 不会改变算法的语义,但会极大地扭曲代码的控制流,使得静态分析变得极其困难。本文以 RC4 算法为例,讲解如何在 OLLVM 混淆下还原算法逻辑。 RC4 是一种广泛使用的流加密算法,结构简洁(仅 KSA + ...
VMP 逆向分析的挑战 在上一篇文章中,我们了解了 VMP(Virtual Machine Protection)的基本原理。VMP 将原始的机器指令转换为自定义虚拟机的字节码,由 VM 解释器执行。这意味着被 VMP 保护的函数,在内存中永远不会以原始形式出现,传统的静态分析和内存 Dump 都无法直接获取原始逻辑。 面对 VMP 保护的代码,逆向工程师需要完成两个层面的分析: VM ...
前置准备 在上一篇文章中,我们完成了 Hyperpwn 的安装和基本配置。本文将通过一个实际案例,演示如何使用 Hyperpwn 调试 VMP 保护下的函数,并构建完整的 Handler 映射表。 环境准备 IDA Pro 7.5+(已安装 Hyperpwn 插件) 目标 SO 文件:包含 VMP 保护的 Native 函数 Android 模拟器或真机(用于动态调试) 已知的被保护函...
Android 加壳技术概述 在 Android 逆向分析的领域中,"加壳"是最常见的保护手段之一。所谓加壳,本质上是对原始 DEX 文件或 SO 文件进行加密、压缩或混淆处理,然后在运行时由一个解壳程序(壳)负责将原始代码还原到内存中执行。加壳的目的是提高逆向分析的门槛,保护开发者的知识产权和核心业务逻辑。 随着逆向技术的不断进步,加壳技术也在持续演进。从最初简单的 ...
为什么要定制 ART 在 Android 逆向工程中,反调试(Anti-Debugging)是 APP 最常见的自我保护手段之一。APP 通过各种方式检测自己是否正在被调试,如果检测到调试器的存在,就会采取保护措施(如退出进程、返回错误数据、触发反作弊等)。 常见的反调试手段包括: 检查 TracerPid 字段 检测 ptrace 系统调用 时间差检测 检测调试端口 检测 Frida ...
关键技术基础概念 FRIDA Frida是一个动态代码插桩工具,主要用于执行动态分析。它允许你在程序运行时注入自己的代码或监控执行流程。使用该工具可以实现对应用程序的Hook,监控和修改函数调用和消息传递。 适用平台:支持Windows、macOS、Linux、iOS和Android等多个平台。 使用场景:逆向工程、安全评估、开发与调试等。 核心组件:包括一个核心库以及多个语言绑定(如...
Hook 构造函数 构造函数在 Java 中用 <init> 表示,是对象创建时的入口。通过 Hook 构造函数,我们可以在对象初始化之前或之后拦截和修改数据。 基本构造函数 Hook Java.perform(function () { var User = Java.use("com.example.app.model.User");...
OLLVM 字符串加密原理 在 Android 逆向分析中,字符串是最重要的信息载体之一。APP 中的 API 地址、密钥、URL、调试信息等通常以明文字符串的形式存在于 SO 文件中。OLLVM 的字符串加密 pass(String Encryption)通过在编译时将字符串加密为密文,在运行时通过解密函数还原,有效防止了静态分析。 编译时加密 OLLVM 的字符串加密在 LLVM I...
OLLVM 指令替换概述 OLLVM(Obfuscator-LLVM)是目前 Android Native 代码混淆中最流行的工具之一。其中"指令替换"(Instruction Substitution)是其核心混淆手段之一,它将简单的算术和逻辑运算替换为数学上等价但更复杂的表达式,极大地增加了逆向分析的难度。 指令替换的基本原理 指令替换的核心思想是:利用数学等价关...
IDA Trace 功能介绍 IDA Pro 的 Trace 功能是分析复杂算法和混淆代码的强大工具。与简单的断点调试不同,Trace 能够记录一段时间内指令的完整执行序列,包括每条指令的地址、寄存器值、内存读写等信息,为分析提供全局视角。 Trace 的类型 IDA Pro 提供多种 Trace 模式: Trace 类型 记录内容 适用场景 指令 Trace 每条执行过的...
Frida Stalker 工作原理 Frida Stalker 是 Frida 框架中最强大的代码追踪工具,它能够在运行时对任意线程的代码执行进行实时的、指令级别的追踪。与 Interceptor 只能在函数入口和出口设置钩子不同,Stalker 可以追踪目标线程执行的每一条指令,记录完整的执行路径。 核心机制 Stalker 的工作原理可以概括为以下几个步骤: 1. 线程劫持 ...
Frida 和 IDA 的各自优势与局限 在 Android Native 代码逆向分析中,Frida 和 IDA Pro 是两个最核心的工具。它们各自有不同的优势和局限,理解这些差异是制定高效分析策略的基础。 Frida 的优势与局限 优势: 实时动态分析,不需要修改 APK 文件 脚本热加载,即改即用,调试效率高 可以在任何时刻注入和 Hook,不受编译限制 Stalker 提供指...
加壳技术概述 在 Android 逆向工程领域,"加壳"是指对 APK 中的 DEX 文件(Dalvik Executable,Android 的可执行字节码文件)进行加密、混淆或隐藏处理的技术。加壳的目的是保护原始代码不被静态分析和反编译,从而增加逆向分析的难度。理解加壳技术的分类和工作原理,是脱壳工作的前提条件。 一个典型的加壳流程如下:开发者将原始 APK 的 D...
背景知识 Android 系统从 Dalvik 虚拟机演进到 ART(Android Runtime)虚拟机,DEX 文件的加载流程发生了显著变化。对于脱壳工作而言,理解两个运行时下的 DEX 加载全流程,是选择合适脱壳点的前提。Dalvik 运行时(Android 4.4 及之前)采用解释执行 + JIT 编译的方式,而 ART 运行时(Android 5.0 及之后)采用 AOT(Ah...
FART 框架概述 FART(First Android Unpack Tool,Android 第一款 ART 环境自动化脱壳机)是由安全研究员星痕(hanbinglengyue)开发的开源 Android 脱壳框架。FART 的出现填补了 Android 5.0(ART 运行时)环境下自动化脱壳工具的空白,在逆向工程社区中具有里程碑意义。 在 FART 之前,大多数脱壳工作依赖于手动操...
FART 脱壳后的 DEX 问题分析 FART 脱壳虽然能够自动 dump DEX 数据,但 dump 出来的结果并不总是完美的。根据目标应用使用的壳类型不同,脱壳后可能存在以下两类主要问题: DEX 文件不完整 某些壳程序(特别是新一代的加固方案)不会一次性将完整的 DEX 加载到内存中,而是按需加载——只有当某个类被实际使用时,才将其对应的 DEX 数据解密到内存。FART 在 Li...
FART 的局限性分析 FART 作为首款 ART 环境自动化脱壳工具,虽然开创了系统级自动脱壳的先河,但在实际使用中存在一些局限性: 需要刷机 FART 原版的核心实现需要修改 Android 系统源码(AOSP)并重新编译为自定义 ROM,然后刷入目标手机。这一要求带来了几个问题: 设备受限:不是所有 Android 手机都支持刷入自定义 ROM,特别是搭载高通 Bootloade...
前言 Frida 是一款开源的跨平台动态插桩工具,它可以在应用程序运行时注入自定义的 JavaScript 脚本,实现对函数调用的 Hook、参数修改、返回值篡改等操作。与 Xposed 不同,Frida 无需重启设备、无需安装框架,即插即用,且同时支持 Android、iOS、Windows、macOS 和 Linux 等多个平台。 在 Android 逆向工程中,Frida 已经成为最...
为什么需要构造复杂参数 在 Android 逆向工程中,我们经常需要 Hook 某些关键函数来分析其行为,或者主动调用目标方法来获取结果。但很多 Java 方法的参数并不是简单的字符串或整数——它们可能是数组、自定义对象、Map、List 甚至枚举类型。如果我们想要在 Frida 脚本中正确调用这些方法,就必须学会如何在 JavaScript 环境中构造出符合 Java 类型系统要求的参数...
FRIDA Frida是一个动态代码插桩工具,主要用于执行动态分析。它允许你在程序运行时注入自己的代码或监控执行流程。使用该工具可以实现对应用程序的Hook,监控和修改函数调用和消息传递。 适用平台:支持Windows、macOS、Linux、iOS和Android等多个平台。 使用场景:逆向工程、安全评估、开发与调试等。 核心组件:包括一个核心库以及多个语言绑定(如Python、Nod...
前面几篇教程我们搭建了 Frida 开发环境、掌握了构造数组和对象参数的技巧。本文将进入实战环节,通过 5 个典型案例 覆盖 Frida 逆向中最常见的场景:登录拦截、SSL Pinning 绕过、返回值篡改、密钥替换和 JNI Hook。每个案例都会给出可复用的完整脚本。 案例1:Hook 登录接口获取用户名密码 分析目标 APP 的登录流程 在逆向一个 APP 时,登录接口往往是...
前言:为什么需要 Objection 在 Android 逆向分析中,Frida 已经成为最强大的动态插桩工具。但实际使用时你会发现,许多操作是重复性的:查看 Activity 列表、搜索特定类名、hook 某个方法查看参数和返回值——每次都需要手写一段 JavaScript 脚本,然后通过 frida -U -f com.app -l hook.js 加载。这种模式虽然灵活,但在快速逆向...
Objection 简介 Objection 是由安全研究团队 SensePost 开发的一款基于 Frida 的运行时探索工具包(Runtime Exploration Toolkit)。它将 Frida 的底层能力封装为一系列开箱即用的高级命令,让安全研究人员无需编写 JavaScript 脚本,即可快速对 Android 和 iOS 应用进行动态分析和安全评估。 如果说 Frida ...
前言 在上一篇文章中,我们深入学习了 Frida RPC 远程调用的概念和实战技巧。当你的逆向分析需要在 PC 端批量调用手机上的加密函数时,RPC 是最高效的方案。然而,当场景升级到"多人协作"或"远程机房"时,你需要将 Frida RPC 服务暴露到公网——这同时带来了便利和安全挑战。 本文将系统讲解如何安全地将 Frida RPC 开放到公网,...
LLVM 项目概述 LLVM是于2002年创建的一个模块化和可重用的编译器和工具链技术的集合。它能够编译UNIX的内核,并用于漏洞挖掘。LLVM包括了多个核心组件,其中关键的包括: 核心库(LLVM Core) - 优化器 负责将源码优化到LLVM的中间语言(Intermediate Representation, IR)。 Clang LLVM的前端编译器,将C/C++代码编译...
AndroidNativeEmu 调用 JNI 函数和模拟 Java 函数交互 AndroidNativeEmu 是一个基于 Unicorn 引擎的 Android Native 函数模拟执行框架,用 Python 编写。它提供了比原生 Unicorn 更高级的抽象,能够模拟 JNI 环境、加载 SO 文件、调用导出函数等。与 Unidbg(Java 实现)相比,AndroidNative...
Capstone、Unicorn、Keystone 工具的介绍 在逆向工程和二进制分析领域,有三个基于同一技术体系的工具经常被配合使用:Capstone(反汇编引擎)、Unicorn(CPU 模拟器)和 Keystone(汇编引擎)。它们三者都基于 QEMU 的相关技术,分别覆盖了二进制分析中"反汇编→模拟执行→汇编"的完整链路。本文将详细介绍这三个工具的定位、功能和使...
Unicorn 工具的入门和实际使用 Unicorn 是一个开源的跨平台 CPU 模拟器框架,基于 QEMU 二进制翻译技术构建,支持 ARM、ARM64、x86、x64、MIPS、PowerPC、SPARC 等多种 CPU 架构。它是逆向工程、安全研究、恶意代码分析等领域中非常重要的工具之一。本文将从基础概念入手,详细介绍 Unicorn 的实际使用方法。 Unicorn 引擎架构 U...
Unicorn 模拟调用 SO 文件和 JNI 接口函数,包括 JNI_OnLoad 在 Android 逆向工程中,很多时候我们需要在不依赖真机的情况下分析 SO 文件中的算法逻辑。Unicorn 作为一个轻量级的 CPU 模拟器框架,提供了底层的指令模拟能力。本篇将介绍如何使用 Unicorn 引擎加载 SO 文件、模拟 ARM 环境、调用 JNI_OnLoad 以及处理 JNI 接口...
Unidbg 使用和加载 SO 文件的方法 在 Android 逆向工程中,分析 Native 层的 SO 文件是一项核心任务。传统方式需要真机或模拟器配合 Frida 等工具进行 hook,但这种方式存在设备依赖、环境复杂、调试不便等问题。Unidbg 作为一个基于 Unicorn 的 Android Native 模拟执行框架,能够在纯 PC 环境中模拟执行 SO 文件中的函数,极大地...
ART 虚拟机简介 从 Android 5.0(Lollipop)开始,Dalvik 虚拟机被 ART(Android Runtime)正式取代。ART 带来了根本性的架构变革,理解这些变革是掌握 ART 脱壳技术的前提。 AOT 编译 ART 最大的特点是引入了 AOT(Ahead-Of-Time)预编译。在应用安装时,系统会将 DEX 字节码编译为本地机器码(ELF 格式),存储在 ...
前言 ClassLoader(类加载器)是 Java 虚拟机和 Android 运行时中负责加载字节码文件的核心组件。在 Android 逆向工程中,理解 ClassLoader 的工作机制是掌握加壳与脱壳技术的必要前提——几乎所有第一代、第二代壳的核心原理都围绕 ClassLoader 展开。 本文将从 Java ClassLoader 基础出发,逐步深入到 Android 体系中的 C...
Dalvik 虚拟机简介 在深入脱壳技术之前,我们需要先理解 Dalvik 虚拟机的基本架构,因为所有 Dalvik 时代的脱壳方案都建立在这些底层机制之上。 DEX 文件格式 DEX(Dalvik Executable)是 Android 应用程序的可执行文件格式。一个 APK 包中通常包含一个 classes.dex 文件,它是所有 Java/Kotlin 代码经过编译后的产物。DE...
前言 在前面的文章中,我们已经了解了 FART 的整体使用场景和脱壳流程。然而,FART 之所以能够高效地完成脱壳,核心在于它选择了恰到好处的"脱壳点"——即 DEX 文件在内存中被解密完成、但尚未被系统做进一步处理的那个瞬间。 本文将深入分析 FART 在 Dalvik 和 ART 两个运行时下分别选择了哪些脱壳点,这些脱壳点各自的优缺点是什么,以及在实际对抗不同壳时...
FART 简介 FART(First Android Unpack Tool)是由安全研究员归零(GitHub ID:hanbinglengyue/FART)开源的一款基于 ART 虚拟机的自动化脱壳工具。与传统的内存 dump 方案不同,FART 选择在 ART 的类加载流程中主动介入,通过系统级 hook 实现对加密 DEX 的完整还原。 项目开源地址:https://github.c...
前言 在 Android 逆向工程中,“加壳"是最常见的应用保护手段。所谓"壳”,就是在原始 APK 外层包裹一层加密或混淆逻辑,使得攻击者无法直接通过 jadx、apktool 等工具反编译出真实的业务代码。随着攻防对抗的升级,加壳技术经历了从简单到复杂、从用户态到内核态的多次迭代。 本文将系统梳理五代壳的核心原理、代表产品及对应的脱壳思路,帮助你建立对加壳技术的全局...
前言 在 Android 逆向工程中,「加壳」是一种常见的 APP 保护手段。加壳的核心思想是:将原始的 DEX 文件加密后藏起来,用一段壳程序替代它运行,在运行时再将真实 DEX 解密并加载到内存中。理解加壳 APP 的运行流程,是后续学习脱壳技术的基础前提。 本文将从 APK 文件结构出发,对比正常 APP 与加壳 APP 的启动差异,逐步拆解壳程序的运行机制。 APK 文件结构回顾...
什么是抽取壳 在 Android 安全领域,抽取壳(Extraction Packer) 是一种常见且经典的加固方案。它的核心思想非常直观——把 DEX 文件中每个方法的字节码(机器指令)“抽走”,只留一个空壳。当应用运行时,壳程序再将这些字节码动态地填回原位,使程序能够正常执行。 具体来说,抽取壳会: 解析 classes.dex,找到每个方法对应的 code_item 结构体 提取 ...
前言 Android 系统的开放性使其成为全球使用最广泛的移动操作系统,同时也成为安全研究的重要战场。随着移动应用安全防护技术的不断升级,加壳(加固)技术已经成为行业标配。对于安全从业者而言,理解逆向分析和脱壳的意义,是深入 Android 安全领域的必经之路。 本文将从实际应用场景出发,系统讲解逆向分析的价值、加壳技术的现状、脱壳的核心意义,以及如何将脱壳融入到完整的逆向流程中。 为什...
前言 在之前的文章中我们介绍了 OLLVM 控制流平坦化的原理与实现。除了控制流平坦化之外,OLLVM 还提供了两个同样重要的混淆 Pass:指令替换(Instruction Substitution,-sub)和分割基本块(Block Splitting,-spl)。这两个 Pass 的核心目标各不相同——前者让每条指令变得"面目全非",后者让代码结构变得"...
OLLVM 简介 OLLVM(Obfuscator-LLVM)是一个增强LLVM编译器安全性的项目。它为LLVM添加了多种代码混淆的技术,比如控制流平坦化、指令替换和伪造控制流等,用来提高生成的二进制文件的复杂性。这使得分析和理解软件逻辑更加困难,从而保护应用程序不易被恶意用户攻击和逆向。 OLLVM的移植过程指的是将OLLVM集成到现有的开发流程中,使得你可以使用OLLVM提供的混淆功能...
Android高级逆向 - 学习顺序如下 05 彻底搞懂 OLLVM: 因为OLLVM(Obfuscator-LLVM)涉及底层编译技术和高级代码混淆技术,这对于增强逆向安全性非常重要。通过理解和移植OLLVM,您能更好地分析和逆向混淆后的代码,这对提升逆向分析技能至关重要。 06 高级调试之 VMP: VMP(Virtual Machine Protection)是一种先进的代码保...
抽取壳的原理 在理解 FART 的脱壳点之前,必须深入理解抽取壳的工作原理。抽取壳是目前主流的 Android 加固方案所采用的核心技术,它不是简单地对整个 DEX 进行加密,而是对 DEX 内部的方法级代码进行精确操作。 code_item 与 DEX 结构 在 DEX 文件格式中,每个方法都通过 code_item 结构来存储其 Dalvik 字节码。一个 DEX 文件的层次结构如下...
DEX 加载流程概述 要理解脱壳技术,首先必须深入理解 Android 虚拟机加载和执行 DEX 字节码的完整流程。Android 经历了从 Dalvik 虚拟机到 ART(Android Runtime)虚拟机的重大架构变更,两者在 DEX 加载和执行的机制上存在显著差异。掌握这些差异,是理解各类脱壳方案设计思路的基础。 本文将分别详细分析 Dalvik 和 ART 下 DEX 的加载流...
FART 与 Frida 的互补关系 FART 和 Frida 是 Android 逆向工程中两个极其重要的工具,它们在脱壳领域具有天然的互补关系。理解它们各自的优势和局限,以及如何将它们结合起来使用,能够大幅提升脱壳的效率和成功率。 FART 的优势与局限 FART 的优势: 系统级权限:FART 通过修改 AOSP 源码实现,运行在系统层面,拥有最高权限,可以访问虚拟机的所有内部数...
FART 架构设计概述 FART(First ART Unpack Tool)是第一个基于 ART 虚拟机源码修改的自动化脱壳工具,由作者非虫开发并开源。它通过修改 AOSP 源码,在 Android 系统层面对 DEX 加载过程进行拦截,实现了对抽取壳的全自动脱壳。 FART 的整体架构设计围绕三个核心模块展开:主动调用机制、DEX Dump 机制和 DEX 修复机制。这三个模块协同工作...
什么是加壳 在 Android 逆向工程的语境中,“加壳”(Packing)是指对 APK 中的核心文件(主要是 classes.dex)进行加密、混淆或压缩处理,并通过一个额外的"壳程序"(Stub/Shell)来负责在运行时解密并加载原始 DEX 的一种保护技术。壳程序通常是一个未加密的 DEX 文件或 Native SO 库,它在 Application 启动时优...
Java.use() 进阶用法 在 FRIDA 高级逆向中,Java.use() 是 Hook Java 层代码的核心 API。除了常见的 Hook 普通类和方法外,它还支持处理枚举类、内部类和匿名类等复杂 Java 结构。 Hook 枚举类 枚举类在 Android 开发中广泛使用,例如定义状态码、类型标识等。使用 Java.use() Hook 枚举类时,需要注意枚举的静态实例是通过...
OLLVM 字符串加密的详细实现原理 字符串加密是 OLLVM 混淆中最基础也是最实用的 pass 之一。它的目标是将 SO 文件中的明文字符串转换为密文,使得静态分析工具(如 IDA 的 Strings 窗口、strings 命令)无法直接读取敏感信息。 加密流程 OLLVM 字符串加密在 LLVM 编译后端工作,具体流程如下: 源码中的字符串: "https://api.e...
什么是非标准算法 在 Android 逆向分析中,我们遇到的加密算法大致可以分为两类:标准算法和非标准算法。 标准算法:AES、DES、RSA、MD5、SHA 系列等被广泛使用的密码学算法,有公开的规范和实现 非标准算法:开发者自行实现的加密方案,包括魔改标准算法、白盒加密、自定义迭代加密等 非标准算法是逆向分析中最具挑战性的部分,因为没有现成的算法库可以直接调用,必须完整还原其实现逻...