Android解析编译之后的Dex文件格式

一.Dex 文件格式 有了这张神图,那么接下来我们就可以来介绍dex的文件结构了,首先还是来看一张大体的结构图: 二.准备工作 我们在讲解数据结构之前,我们需要先创建一个简单的例子来帮助我们来解析,我们需要得到一个简单的dex文件,这里我们不借助任何的IDE工具,就可以构造一个dex文件出来。借助的工具很简单:javac,dx命令即可。 创建 java 源文件 ,内容如下代码: pu...

发布于 Android 逆向

Android破解角度学习android保护手段

前言 最近tz不太好用,之前用的破解版的某洞已经彻底挂了。于是在网上找了一个某豹加速器。但是下载后发现只有两小时的会员时间,用完后还要花重金续费。作为社会主义爱国青年,面对这种违法app还在肆无忌惮的收费的现象,当然是不能忍了,于是决心破解之,以达到维护中华人民共和国宪法与法律尊严的目的! 违法app截图: 一、root检测 将app装在手机上打开,结果有提示: 应该是检测到root...

发布于 Android 逆向

Android动态调试Smalidea

什么是AndroidStudio+smalidea插件调试? Android Studio 调试的原理 使用 Android Studio 进行动态调试,通过 Android Studio 导入反编译出的完整的 smali 代码,设置好调试所需的条件,设置断点。将移动设备连接至 PC端,然后运行待调试的apk应用程序,当该应用程序执行流程,运行至smali代码的断点处时,就会触发断点。从而...

发布于 Android 逆向

Android反编译步骤

Step 使用apkTool反编译apk文件; 分析apk,查看smail指令,分析smali指令,修改smali; 重新签名并且打包,android源码包包含签名工具; adb安装测试; Android虚拟机(硬知识) 名称:Android Dalvik 作者:丹·伯恩斯坦(Dan Bornstein) 名称来源:他的祖先曾经居住过的Dalvki的小渔村 特点: ...

发布于 Android 逆向

Android基于APK文件格式的反编译对抗机制

介绍 商业APP为了防止反编译、被篡改,往往会采用第三方的APP加固方案,通过对源代码的混淆、加固、加壳等技术手段,隐藏源APP的逻辑结构,大大提高了反编译的难度,达到保障APP的安全与稳定运行的目的。而网赌、电诈、色情等涉网犯罪APP,基于成本考虑,其幕后的开发者往往不会采用第三方加固方案,但有可能会采用一些无成本的对抗机制,基于APK文件格式的反编译对抗就是其中的一种。该对抗机制主要利...

发布于 Android 逆向

Android脱壳小技巧

逆向分析APP的一般流程 1、使用自动化检测工具检测apk是否加壳,或者借助一些反编译工具依靠经验推断是否加壳 2、如果apk加壳,则需要首先对apk进行脱壳; 3、使用jeb、jadX,apktool等反编译工具对apk进行反编译; 4、先依据静态分析中得到的关键字符串关键api调用等方法快速定位需要分析的关键函数和流程; 5、如果依据简单的字符串、关键api无法快速定位,则apk可能使...

发布于 Android 逆向

Android分析apk逆向系列WriteUp

前言 在学习安卓逆向的萌新SR绝赞刷题中,最近做了三道有意思的题目,感觉很适合入门,于是写了个wp发了出来 App1-分析 工具:JADX,安卓设备/虚拟机 安装并打开app,是一个简单的 输入-校验 式app 我们用JADX打开apk,看一下反编译代码 首先打开xml文件,这里写明了app启动时打开的Activity,确定是MainActivity后转到反编译代码处 如图,很容易确定...

发布于 Android 逆向

Android逆向-日志分析法-破解收费金币

日志分析法-破解收费金币 先打开工具Monitor,然后再打开夜神模拟器,运行捕鱼APK 我们的目的就是想要获得更多的金币,所以在游戏中金币商城中点击购买金币,查看日志信 息 当点击4元购买40000金币时,弹出对话框的日志信息如下 8: D/cocos2d-x debug info(1319): event_id2 8: D/cocos2d-x debug info(1319): Ga...

发布于 Android 逆向

Android逆向目录

逆向工程 来自维基百科的定义:https://zh.wikipedia.org/zh-hans/逆向工程 逆向工程(又称反向工程),是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在不能轻易获得必要的生产信息下,直接从成品的分析...

发布于 Android 逆向

Android逆向看雪精华

1.逆向技术基础 Frida操作手册-Android环境准备 Frida hook方便快捷,并且跨平台,可以学习一下 Brida操作指南 葫芦娃的又一篇神作,抓包,加密,解密一条龙。 介召几个frida在安卓逆向中使用的脚本以及延时Hook手法 延时hook,so,java层堆栈回溯的好文章! 学习Androidx86模拟器root安装xposed IamHuskar告诉我们学习xpose...

发布于 Android 逆向

Frida 开发和调试环境搭建

前言 Frida 是一款开源的跨平台动态插桩工具,它可以在应用程序运行时注入自定义的 JavaScript 脚本,实现对函数调用的 Hook、参数修改、返回值篡改等操作。与 Xposed 不同,Frida 无需重启设备、无需安装框架,即插即用,且同时支持 Android、iOS、Windows、macOS 和 Linux 等多个平台。 在 Android 逆向工程中,Frida 已经成为最...

发布于 Android 逆向

Frida 构造数组、对象、Map 和类参数

为什么需要构造复杂参数 在 Android 逆向工程中,我们经常需要 Hook 某些关键函数来分析其行为,或者主动调用目标方法来获取结果。但很多 Java 方法的参数并不是简单的字符串或整数——它们可能是数组、自定义对象、Map、List 甚至枚举类型。如果我们想要在 Frida 脚本中正确调用这些方法,就必须学会如何在 JavaScript 环境中构造出符合 Java 类型系统要求的参数...

发布于 Android 逆向

Frida 初步使用和逆向

FRIDA Frida是一个动态代码插桩工具,主要用于执行动态分析。它允许你在程序运行时注入自己的代码或监控执行流程。使用该工具可以实现对应用程序的Hook,监控和修改函数调用和消息传递。 适用平台:支持Windows、macOS、Linux、iOS和Android等多个平台。 使用场景:逆向工程、安全评估、开发与调试等。 核心组件:包括一个核心库以及多个语言绑定(如Python、Nod...

发布于 Android 逆向

Frida 综合情景案例分析

前面几篇教程我们搭建了 Frida 开发环境、掌握了构造数组和对象参数的技巧。本文将进入实战环节,通过 5 个典型案例 覆盖 Frida 逆向中最常见的场景:登录拦截、SSL Pinning 绕过、返回值篡改、密钥替换和 JNI Hook。每个案例都会给出可复用的完整脚本。 案例1:Hook 登录接口获取用户名密码 分析目标 APP 的登录流程 在逆向一个 APP 时,登录接口往往是...

发布于 Android 逆向

Objection 快速逆向、自动分析和主动调用

前言:为什么需要 Objection 在 Android 逆向分析中,Frida 已经成为最强大的动态插桩工具。但实际使用时你会发现,许多操作是重复性的:查看 Activity 列表、搜索特定类名、hook 某个方法查看参数和返回值——每次都需要手写一段 JavaScript 脚本,然后通过 frida -U -f com.app -l hook.js 加载。这种模式虽然灵活,但在快速逆向...

发布于 Android 逆向

Objection 环境介绍,自动化分析和插件使用

Objection 简介 Objection 是由安全研究团队 SensePost 开发的一款基于 Frida 的运行时探索工具包(Runtime Exploration Toolkit)。它将 Frida 的底层能力封装为一系列开箱即用的高级命令,让安全研究人员无需编写 JavaScript 脚本,即可快速对 Android 和 iOS 应用进行动态分析和安全评估。 如果说 Frida ...

发布于 Android 逆向

RPC 开放到公网,更多 API 与源码分析

前言 在上一篇文章中,我们深入学习了 Frida RPC 远程调用的概念和实战技巧。当你的逆向分析需要在 PC 端批量调用手机上的加密函数时,RPC 是最高效的方案。然而,当场景升级到"多人协作"或"远程机房"时,你需要将 Frida RPC 服务暴露到公网——这同时带来了便利和安全挑战。 本文将系统讲解如何安全地将 Frida RPC 开放到公网,...

发布于 Android 逆向

LLVM 简介、编译流程、CLion 调试

LLVM 项目概述 LLVM是于2002年创建的一个模块化和可重用的编译器和工具链技术的集合。它能够编译UNIX的内核,并用于漏洞挖掘。LLVM包括了多个核心组件,其中关键的包括: 核心库(LLVM Core) - 优化器 负责将源码优化到LLVM的中间语言(Intermediate Representation, IR)。 Clang LLVM的前端编译器,将C/C++代码编译...

发布于 Android 逆向

ART 下的壳通用脱壳技术

ART 虚拟机简介 从 Android 5.0(Lollipop)开始,Dalvik 虚拟机被 ART(Android Runtime)正式取代。ART 带来了根本性的架构变革,理解这些变革是掌握 ART 脱壳技术的前提。 AOT 编译 ART 最大的特点是引入了 AOT(Ahead-Of-Time)预编译。在应用安装时,系统会将 DEX 字节码编译为本地机器码(ELF 格式),存储在 ...

发布于 Android 逆向

ClassLoader 和动态加载

前言 ClassLoader(类加载器)是 Java 虚拟机和 Android 运行时中负责加载字节码文件的核心组件。在 Android 逆向工程中,理解 ClassLoader 的工作机制是掌握加壳与脱壳技术的必要前提——几乎所有第一代、第二代壳的核心原理都围绕 ClassLoader 展开。 本文将从 Java ClassLoader 基础出发,逐步深入到 Android 体系中的 C...

发布于 Android 逆向

Dalvik 下的壳通用脱壳技术

Dalvik 虚拟机简介 在深入脱壳技术之前,我们需要先理解 Dalvik 虚拟机的基本架构,因为所有 Dalvik 时代的脱壳方案都建立在这些底层机制之上。 DEX 文件格式 DEX(Dalvik Executable)是 Android 应用程序的可执行文件格式。一个 APK 包中通常包含一个 classes.dex 文件,它是所有 Java/Kotlin 代码经过编译后的产物。DE...

发布于 Android 逆向

FART 中的脱壳点选择和分析

前言 在前面的文章中,我们已经了解了 FART 的整体使用场景和脱壳流程。然而,FART 之所以能够高效地完成脱壳,核心在于它选择了恰到好处的"脱壳点"——即 DEX 文件在内存中被解密完成、但尚未被系统做进一步处理的那个瞬间。 本文将深入分析 FART 在 Dalvik 和 ART 两个运行时下分别选择了哪些脱壳点,这些脱壳点各自的优缺点是什么,以及在实际对抗不同壳时...

发布于 Android 逆向

FART 使用场景和流程分析

FART 简介 FART(First Android Unpack Tool)是由安全研究员归零(GitHub ID:hanbinglengyue/FART)开源的一款基于 ART 虚拟机的自动化脱壳工具。与传统的内存 dump 方案不同,FART 选择在 ART 的类加载流程中主动介入,通过系统级 hook 实现对加密 DEX 的完整还原。 项目开源地址:https://github.c...

发布于 Android 逆向

不同代的壳和加壳技术

前言 在 Android 逆向工程中,“加壳"是最常见的应用保护手段。所谓"壳”,就是在原始 APK 外层包裹一层加密或混淆逻辑,使得攻击者无法直接通过 jadx、apktool 等工具反编译出真实的业务代码。随着攻防对抗的升级,加壳技术经历了从简单到复杂、从用户态到内核态的多次迭代。 本文将系统梳理五代壳的核心原理、代表产品及对应的脱壳思路,帮助你建立对加壳技术的全局...

发布于 Android 逆向

加壳 APP 运行流程和原理

前言 在 Android 逆向工程中,「加壳」是一种常见的 APP 保护手段。加壳的核心思想是:将原始的 DEX 文件加密后藏起来,用一段壳程序替代它运行,在运行时再将真实 DEX 解密并加载到内存中。理解加壳 APP 的运行流程,是后续学习脱壳技术的基础前提。 本文将从 APK 文件结构出发,对比正常 APP 与加壳 APP 的启动差异,逐步拆解壳程序的运行机制。 APK 文件结构回顾...

发布于 Android 逆向

在 ART 下抽取壳的实现

什么是抽取壳 在 Android 安全领域,抽取壳(Extraction Packer) 是一种常见且经典的加固方案。它的核心思想非常直观——把 DEX 文件中每个方法的字节码(机器指令)“抽走”,只留一个空壳。当应用运行时,壳程序再将这些字节码动态地填回原位,使程序能够正常执行。 具体来说,抽取壳会: 解析 classes.dex,找到每个方法对应的 code_item 结构体 提取 ...

发布于 Android 逆向

逆向分析和脱壳的意义

前言 Android 系统的开放性使其成为全球使用最广泛的移动操作系统,同时也成为安全研究的重要战场。随着移动应用安全防护技术的不断升级,加壳(加固)技术已经成为行业标配。对于安全从业者而言,理解逆向分析和脱壳的意义,是深入 Android 安全领域的必经之路。 本文将从实际应用场景出发,系统讲解逆向分析的价值、加壳技术的现状、脱壳的核心意义,以及如何将脱壳融入到完整的逆向流程中。 为什...

发布于 Android 逆向

OLLVM 指令替换与分割基本块

前言 在之前的文章中我们介绍了 OLLVM 控制流平坦化的原理与实现。除了控制流平坦化之外,OLLVM 还提供了两个同样重要的混淆 Pass:指令替换(Instruction Substitution,-sub)和分割基本块(Block Splitting,-spl)。这两个 Pass 的核心目标各不相同——前者让每条指令变得"面目全非",后者让代码结构变得"...

发布于 Android 逆向

LLVM 简介和移植过程

OLLVM 简介 OLLVM(Obfuscator-LLVM)是一个增强LLVM编译器安全性的项目。它为LLVM添加了多种代码混淆的技术,比如控制流平坦化、指令替换和伪造控制流等,用来提高生成的二进制文件的复杂性。这使得分析和理解软件逻辑更加困难,从而保护应用程序不易被恶意用户攻击和逆向。 OLLVM的移植过程指的是将OLLVM集成到现有的开发流程中,使得你可以使用OLLVM提供的混淆功能...

发布于 Android 逆向

顺序

Android高级逆向 - 学习顺序如下 05 彻底搞懂 OLLVM: 因为OLLVM(Obfuscator-LLVM)涉及底层编译技术和高级代码混淆技术,这对于增强逆向安全性非常重要。通过理解和移植OLLVM,您能更好地分析和逆向混淆后的代码,这对提升逆向分析技能至关重要。 06 高级调试之 VMP: VMP(Virtual Machine Protection)是一种先进的代码保...

发布于 Android 逆向