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...
OLLVM 简介 OLLVM(Obfuscator-LLVM)是一个增强LLVM编译器安全性的项目。它为LLVM添加了多种代码混淆的技术,比如控制流平坦化、指令替换和伪造控制流等,用来提高生成的二进制文件的复杂性。这使得分析和理解软件逻辑更加困难,从而保护应用程序不易被恶意用户攻击和逆向。 OLLVM的移植过程指的是将OLLVM集成到现有的开发流程中,使得你可以使用OLLVM提供的混淆功能...
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_it...
前言 Android 系统的开放性使其成为全球使用最广泛的移动操作系统,同时也成为安全研究的重要战场。随着移动应用安全防护技术的不断升级,加壳(加固)技术已经成为行业标配。对于安全从业者而言,理解逆向分析和脱壳的意义,是深入 Android 安全领域的必经之路。 本文将从实际应用场景出发,系统讲解逆向分析的价值、加壳技术的现状、脱壳的核心意义,以及如何将脱壳融入到完整的逆向流程中。 为什...
前言 在之前的文章中我们介绍了 OLLVM 控制流平坦化的原理与实现。除了控制流平坦化之外,OLLVM 还提供了两个同样重要的混淆 Pass:指令替换(Instruction Substitution,-sub)和分割基本块(Block Splitting,-spl)。这两个 Pass 的核心目标各不相同——前者让每条指令变得"面目全非",后者让代码结构变得"...
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...
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++代码编译...
前言 Frida 是一款开源的跨平台动态插桩工具,它可以在应用程序运行时注入自定义的 JavaScript 脚本,实现对函数调用的 Hook、参数修改、返回值篡改等操作。与 Xposed 不同,Frida 无需重启设备、无需安装框架,即插即用,且同时支持 Android、iOS、Windows、macOS 和 Linux 等多个平台。 在 Android 逆向工程中,Frida 已经成为最...
为什么需要构造复杂参数 在 Android 逆向工程中,我们经常需要 Hook 某些关键函数来分析其行为,或者主动调用目标方法来获取结果。但很多 Java 方法的参数并不是简单的字符串或整数——它们可能是数组、自定义对象、Map、List 甚至枚举类型。如果我们想要在 Frida 脚本中正确调用这些方法,就必须学会如何在 JavaScript 环境中构造出符合 Java 类型系统要求的参数...
Android高级逆向 - 学习顺序如下 05 彻底搞懂 OLLVM: 因为OLLVM(Obfuscator-LLVM)涉及底层编译技术和高级代码混淆技术,这对于增强逆向安全性非常重要。通过理解和移植OLLVM,您能更好地分析和逆向混淆后的代码,这对提升逆向分析技能至关重要。 06 高级调试之 VMP: VMP(Virtual Machine Protection)是一种先进的代码保...