目录

前言 1.1

(反)代码混淆概览 1.2

代码混淆 1.3

通用 1.3.1

混淆方式 1.3.1.1

sobf=字符串加密 1.3.1.1.1

fla=控制流平坦化 1.3.1.1.2

bcf=虚假控制流 1.3.1.1.3

split=基本块分割 1.3.1.1.4

sub=指令替换 1.3.1.1.5

indbr=间接跳转 1.3.1.1.6

icall=间接函数调用 1.3.1.1.7

其他 1.3.1.1.8

混淆工具 1.3.1.2

ollvm 1.3.1.2.1

goron 1.3.1.2.2

Armariris 1.3.1.2.3

O-MVLL 1.3.1.2.4

Hikari 1.3.1.2.5

Tigress 1.3.1.2.6

iOS 1.3.2

混淆工具 1.3.2.1

ios-class-guard 1.3.2.1.1

Android 1.3.3

Proguard 1.3.3.1

dProtect 1.3.3.2

反代码混淆 1.4

通用 1.4.1

反混淆方式 1.4.1.1

反混淆工具 1.4.1.2

Unicorn 1.4.1.2.1

Frida的Stalker 1.4.1.2.2

Triton 1.4.1.2.3

QSynthesis 1.4.1.2.4

QBDI 1.4.1.2.5

iOS 1.4.2

Android 1.4.3

反混淆工具 1.4.3.1

JEB 1.4.3.1.1

jadx 1.4.3.1.2

simplify 1.4.3.1.3

附录 1.5

参考资料 1.5.1

前言

移动端逆向：代码混淆和反代码混淆

最新版本：v0.6.0

更新时间：20250124

简介

移动端的代码混淆和反代码混淆，相关混淆方式、混淆工具和反混淆方式、反混淆工具等，以及iOS和Android相关的内容。

源码+浏览+下载

本书的各种源码、在线浏览地址、多种格式文件下载如下：

HonKit源码

crifan/mobile_re_obfuscation_anti: 移动端逆向：代码混淆和反代码混淆

如何使用此HonKit源码去生成发布为电子书

详见：crifan/honkit_template: demo how to use crifan honkit template and demo

在线浏览

移动端逆向：代码混淆和反代码混淆 book.crifan.org

移动端逆向：代码混淆和反代码混淆 crifan.github.io

离线下载阅读

移动端逆向：代码混淆和反代码混淆 PDF

移动端逆向：代码混淆和反代码混淆 ePub

移动端逆向：代码混淆和反代码混淆 Mobi

版权和用途说明

此电子书教程的全部内容，如无特别说明，均为本人原创。其中部分内容参考自网络，均已备注了出处。如发现有侵权，请通过邮箱联系我 admin 艾特 crifan.com，我会尽快删除。谢谢合作。

各种技术类教程，仅作为学习和研究使用。请勿用于任何非法用途。如有非法用途，均与本人无关。

鸣谢

感谢我的老婆陈雪的包容理解和悉心照料，才使得我crifan有更多精力去专注技术专研和整理归纳出这些电子书和技术教程，特此鸣谢。

其他

作者的其他电子书

本人crifan还写了其他150+本电子书教程，感兴趣可移步至：

crifan/crifan_ebook_readme: Crifan的电子书的使用说明

关于作者

关于作者更多介绍，详见：

关于CrifanLi李茂 – 在路上

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-26 17:46:54

(反)代码混淆概览

(反)代码混淆概览

在移动端逆向期间，往往会涉及到：反代码混淆

所以在解决反代码混淆之前，也要对代码混淆，有足够的了解。

下面就来详细解释。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-26 17:43:51

代码混淆

代码混淆

从正向的防护角度来说，可以用代码混淆去增加和保护自己的app的代码逻辑，增大逆向人员破解的难度。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:11:54

通用

通用

TODO：

【整理】iOS和Android安全防护相关：代码混淆

去除花指令 去混淆

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:12:19

混淆方式

混淆方式

代码混淆，有多种方式=手段，此处概述如下：

代码混淆手段 | 简称=缩写 | ollvm参数 | goron参数 | 说明
字符串加密 | sobf=String Obfuscation | -mllvm -sobf | -mllvm -irobf-cse | 把字符串明文加密成乱码字符串
控制流平坦化 | fla=Control Flow Flattening | -mllvm -fla | -mllvm -irobf-cff |
虚假控制流 | bcf=Bogus Control Flow | -mllvm -bcf |  |
指令替换 | sub=Instruction Substitution | -mllvm -sub |  |
基本块分割 | split=Basic Block Splitting | -mllvm -split |  |
间接跳转 | indbr=indirect branch |  |  |
间接函数调用 | icall=indirect call |  |

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-26 17:44:00

sobf=字符串加密

sobf=字符串加密

TODO：

【整理】代码混淆手段：String Obfuscation字符串混淆

【已解决】iOS逆向Apple账号：Xcode实时调试函数MGCopyAnswer的实现原理机制

【已解决】iOS逆向：爱思助手中和UDID相关的iPhone设备相关信息

sobf=String Obfuscation=字符串加密=字符串混淆

参数：

ollvm：-mllvm -sobf

goron：-mllvm -irobf-cse

举例

MGCopyAnswer相关key和value

SerialNumber -> VasUgeSzVyHdB27g2XpN0g

值：FFMYRLS0JC6C

ECID=UniqueChipID -> TF31PAB6aO8KAbPyNKSxKA

值：3445358584856622

WifiAddress -> gI6iODv8MZuiP0IA+efJCw

值：14:9d:99:f0:b4:15

BluetoothAddress -> k5lVWbXuiZHLA17KGiVUAA

值：14:9d:99:eb:d8:f7

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:25:32

fla=控制流平坦化

fla=控制流平坦化

TODO：

【整理】代码混淆手段：Control Flow Flattening控制流平坦化

fla = Control Flow Flattening = 控制流平坦化 = 控制流扁平化 = 控制流展开

参数：

ollvm：-mllvm -fla

goron：-mllvm -irobf-cff

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:26:56

bcf=虚假控制流

bcf=虚假控制流

TODO：

【整理】代码混淆手段：Bogus Control Flow虚假控制流

bcf = Bogus Control Flow = 虚假控制流 = 虚假控制流程 = 虚假块

参数：

ollvm：-mllvm -bcf

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:27:37

split=基本块分割

split=基本块分割

TODO：

【整理】代码混淆手段：Basic Block Splitting基本块分割

split = Basic Block Splitting = 基本块分割

参数：

ollvm：-mllvm -split

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:30:22

sub=指令替换

sub=指令替换

TODO：

【整理】代码混淆手段：Instruction Substitution指令替换

【整理】代码混淆手段：Dead Code Injection垃圾代码注入

sub = Instruction Substitution = 指令替换 = 指令膨胀

参数：

ollvm：-mllvm -sub

~= Dead Code Injection = 垃圾代码注入 == 花指令？

垃圾指令：.long unknown code

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:29:53

indbr=间接跳转

indbr=间接跳转

TODO：

【记录】混淆类型 indbr

indbr=间接跳转

参数

goron：-mllvm -irobf-indbr

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:21:22

icall=间接函数调用

icall=间接函数调用

icall=间接函数调用

参数

goron：-mllvm -irobf-icall

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:21:46

其他

其他

Opaque Constants=不透明的常量

【整理】代码混淆手段：Opaque Constants不透明的常量

Opaque Fields Access=不透明字段访问

【整理】代码混淆手段：Opaque Fields Access不透明字段访问

间接全局变量引用

参数：

goron：-mllvm -irobf-indgv

关于IDA

故意制造堆栈不平衡 -》 使得IDA反编译异常，无法准确识别代码逻辑

其他方式

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:21:35

混淆工具

混淆工具

TODO：

【整理】代码混淆相关工具和技术

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:30:46

ollvm

ollvm

TODO：

【整理】代码混淆工具：ollvm=obfuscator-llvm

ollvm分析及反混淆

ollvm

Github

https://github.com/obfuscator-llvm/obfuscator

Wiki

Home · obfuscator-llvm/obfuscator Wiki

Installation · obfuscator-llvm/obfuscator Wiki

当前版本

obfuscator-llvm/obfuscator at llvm-4.0

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:33:07

goron

goron

goron

Github

https://github.com/amimo/goron

Yet another llvm based obfuscator

支持特性

混淆过程间相关

间接跳转,并加密跳转目标(-mllvm -irobf-indbr)

间接函数调用,并加密目标函数地址(-mllvm -irobf-icall)

间接全局变量引用,并加密变量地址(-mllvm -irobf-indgv)

字符串(c string)加密功能(-mllvm -irobf-cse)

过程相关控制流平坦混淆(-mllvm -irobf-cff)

示例

goron/examples at master · amimo/goron

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:34:41

Armariris

Armariris

TODO：

【整理】代码混淆工具：Armariris孤挺花

Armariris

Github

https://github.com/GoSSIP-SJTU/Armariris

孤挺花（Armariris） -- 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架

目前开放功能

字符串加密 sobf

控制流扁平化 fla

指令替换 sub

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:36:11

O-MVLL

O-MVLL

TODO：

【整理】代码混淆工具：O-MVLL

O-MVLL

logo

概述

O-MVLL (in reference to O-LLVM) is a LLVM-based obfuscator driven by Python and the LLVM pass manager

官网

https://obfuscator.re/omvll/

Getting started | O-MVLL Documentation

Github

https://github.com/open-obfuscator/o-mvll

open-obfuscator/o-mvll: :electron: O-MVLL is a code obfuscator based on LLVM for native code (Android & iOS)

下载

https://github.com/open-obfuscator/o-mvll/releases/

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:45:32

Hikari

Hikari

TODO：

【整理】代码混淆工具：Hikari光

Hikari

Github

https://github.com/HikariObfuscator/Hikari

LLVM Obfuscator

说明

20230129 已停止维护

其他fork

https://github.com/61bcdefg/Hikari-LLVM15

61bcdefg/Hikari-LLVM15: A fork of Hikari Obfuscator [WIP]

说明：20241001 已停止维护

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:50:25

Tigress

Tigress

TODO：

【整理】代码混淆工具：Tigress

Tigress混淆器安装与使用指南-CSDN博客

Tigress

Github

https://github.com/JonathanSalwan/Tigress_protection

官网

新

https://tigress.wtf/index.html

旧

http://tigress.cs.arizona.edu/

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:57:54

iOS

iOS

TODO：

【整理】iOS逆向相关：代码混淆

iOS 安全探索：字符串加密 - 掘金 (juejin.cn)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:56:34

混淆工具

混淆工具

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:09:21

ios-class-guard

ios-class-guard

ios-class-guard

Github

https://github.com/Polidea/ios-class-guard

Polidea/ios-class-guard: Simple Objective-C obfuscator for Mach-O executables. (github.com)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:56:58

Android

Android

TODO：

安卓apk混淆：np管理器

【未解决】安卓逆向：.datadiv_decode

安卓 App安全

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:57:14

Proguard

Proguard

Proguard

概述：安卓中的代码混淆工具=库

Github

https://github.com/Guardsquare/proguard

Guardsquare/proguard: ProGuard, Java optimizer and obfuscator

相关公司

guardsquare

https://www.guardsquare.com/proguard

Java Obfuscator and Android App Optimizer | ProGuard

Use ProGuard®, Guardsquare’s open-source shrinker for Java bytecode, to enhance and optimize your code.

其他其他产品

DexGuard

https://www.guardsquare.com/dexguard

Full-spectrum protection for Android apps & SDKs

With DexGuard, achieve the most comprehensive Android app protection, featuring multiple layers of code hardening, built-in malware defense, and automated runtime application self-protection (RASP) in less than a day.

注意：

Android Gradle plugin 3.4.0+，不再用ProGuard

最新的用：R8

R8 configuration files

安卓相关

Shrink, obfuscate, and optimize your app | Android Studio | Android Developers

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:03:31

dProtect

dProtect

dProtect

概述：安卓中的代码混淆工具，基于Proguard

an Android bytecode obfuscator based on Proguard

官网

https://obfuscator.re/dprotect/

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:42:28

反代码混淆

反代码混淆

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:09:21

通用

通用

TODO：

安卓 逆向 脱壳 砸壳

【整理】Frida调试hook安卓：Ollvm反混淆 字符串解密 init_array

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:04:02

反混淆方式

反混淆方式

TODO：

反混淆：模拟执行 、符号执行

【整理】iOS和Android逆向相关：代码反混淆Code Deobfuscation

【未解决】iOS逆向：如何反代码混淆反混淆去混淆

【整理】代码反混淆：反控制流平坦化

【整理】代码反混淆：反指令替换

【整理】代码反混淆：structure recovering结构体恢复

【整理】代码反混淆：String Deobfuscation字符串反混淆

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:04:26

反混淆工具

反混淆工具

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:09:21

Unicorn

Unicorn

TODO：

python unicorn 去混淆 ollvm

详见：

CPU模拟利器：Unicorn

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:05:20

Frida的Stalker

Frida的Stalker

TODO：

【整理】Frida的Stalker的作用和大概逻辑

Frida的Stalker

概述：可以用Frida的Stalker去动态调试代码逻辑，实现指令级的动态调试，常用于高级的反代码混淆

详见

Frida的Stalker · 逆向调试利器：Frida

Stalker · Frida逆向实例和工具函数

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:08:06

Triton

Triton

TODO：

【整理】反混淆工具：DSE框架：Triton

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:04:41

QSynthesis

QSynthesis

TODO：

【整理】代码反混淆工具：QSynthesis

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:05:44

QBDI

QBDI

TODO：

【整理】DBI框架：QBDI

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:05:57

iOS

iOS

TODO：

【记录】给抖音的libmetasec_ml.so去做反代码混淆

【未解决】尝试给.datadiv_decode字符串反混淆：Armariris_string_obfuscation_bypass

【整理】iOS逆向：MGCopyAnswer中key原属性名和混淆后属性名的映射表

【未解决】iOS反破解：字符串加密隐藏路径

【未解决】iOS逆向：IDA中F5反编译代码中的JUMPOUT

反混淆：恢复被OLLVM保护的程序 - h2z - 博客园 (cnblogs.com)

[原创]Unicorn反混淆：恢复被OLLVM保护的程序(一)-茶余饭后-看雪-安全社区|安全招聘|kanxue.com

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:09:35

Android

Android

TODO：

【已解决】Xposed如何hook混淆后的安卓应用中的类名和函数名

【记录】给安卓的jadx反编译后的混淆后的java代码优化：给类、变量、属性去重命名

【整理】安卓反代码混淆间接跳转相关资料

【已解决】安卓保活逆向360Wallpaper：用frida去hook混淆后的安卓java类x6的e.java

【记录】J.N中libsscronet.so的字符串混淆后的native函数的原始函数定义和内容

【已解决】安卓保活逆向360Wallpaper：去使用m1.e.i去解密已混淆加密字符串得到原始字符串

【未解决】安卓保活逆向360Wallpaper：自己新建m1.e的实例调用i解密函数得到解密后字符串

【已解决】如何反混淆即还原反编译后混淆的安卓代码 – 在路上

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:10:20

反混淆工具

反混淆工具

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:09:21

JEB

JEB

TODO：

【记录】新音爆安卓apk：用JEB反编译反混淆

【记录】Mac用JEB反混淆新音爆安卓apk：单个文件的反混淆反编译

【记录】Mac用JEB反混淆新音爆安卓apk：全部文件的反编译

【整理】JEB相关内容

【整理】安卓逆向：JEB功能介绍

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:10:40

jadx

jadx

TODO：

反混淆 · 安卓反编译利器：jadx (crifan.org)

【未解决】新音爆的安卓apk：用工具反混淆

【记录】新音爆安卓apk：用Jadx反编译反混淆

【记录】用jadx开启反混淆去反编译360Wallpaper安卓apk

【记录】Mac中用jadx反编译抖音源码

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:11:10

simplify

simplify

TODO：

【记录】新音爆安卓apk：用simplify反混淆

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 22:11:28

附录

附录

下面列出相关参考资料。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:00:58

参考资料

参考资料

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2025-01-24 21:22:50