乐于分享
好东西不私藏

iOS 软件逆向到底怎么搞?从砸壳到 Hook,全网技术路线一次捋清

iOS 软件逆向到底怎么搞?从砸壳到 Hook,全网技术路线一次捋清
iOS 逆向 · 2026 年整理 · 工具与方法
做安全审计、研究自家 App、或者单纯想搞懂某个 iOS 应用的行为逻辑——绕不开同一套东西:Mach-O、FairPlay 加密、Frida、LLDB、Theos。这篇把社区里散落的经验串成一条能走通的路,重点补上 Swift / OC / 混编三条线各自怎么打、以及踩坑清单
OC·Swift
双栈拆解
20+
常用工具
7 步
标准流程
25 条
常见坑
iOS 逆向 · 从砸壳到 Hook · Swift/OC/混编 · 2026

iOS 逆向这事儿,网上教程不少,但大多停在某个点:有人只讲砸壳,有人只贴 Frida 脚本,有人还在用 2018 年的 Cycript 示例。真上手的时候你会发现,卡点往往不在某个命令,而在不知道下一步该换哪条路

这篇文章干的事很简单:把国内外社区(看雪、博客园、GitHub、OffensiveCon、Ostorlab、Corellium)里反复出现的工具和方法,按一条能落地的流程重新排一遍。尤其把 Swift、Objective-C、混编三条技术栈的差异和常见坑单独拎出来说——这块是大多数人从「会砸壳」到「真能分析」的分水岭。

先说清楚边界:本文仅用于安全研究、漏洞分析、自有应用调试等合法授权场景。对他人 App 进行未授权的破解、绕过付费或窃取数据,违反法律和服务条款。动手之前,确认你有权分析这个二进制。
先搞懂 iOS 在防什么

逆向不是跟代码较劲,是跟一整套防护体系较劲。不了解这些机制,后面很多操作会莫名其妙失败。

机制干什么用的逆向时你会碰到
FairPlay DRM
App Store 下载的二进制加密
直接 strings、class-dump 没输出,得先砸壳
代码签名 + 沙盒
限制进程能访问什么
非越狱机很难注入;重打包要处理 entitlements
ASLR / PAC
地址随机化、指针认证
LLDB 下断要算偏移;ARM64e 设备更麻烦
Keychain / ATS
凭据存储、网络安全策略
抓包前常要处理证书锁定(SSL Pinning)
反调试 / 反注入
检测 ptrace、Frida、越狱文件
App 闪退、Frida attach 失败、需要绕检测
Swift 混淆
符号名被 mangling
类名变成 _TtC...,得 demangle
近几年变化很明显:Apple 把系统完整性、运行时工具检测、反调试做进了更多 App 里。Frida 不是万能钥匙,LLDB 也不是过时货——两条路都得会,还得会判断什么时候该换
三条路线,选对省一半时间
路线 A · 越狱真机
  • 最传统、资料最多

  • Frida server、SSH、Clutch/fdump 直接跑

  • Theos 写 Tweak,运行时 Hook

  • 适合:深度动态分析、插件开发

  • 现状:Dopamine(iOS 15–16)、palera1n、checkra1n 等,注意 rootless 适配

路线 B · 非越狱 / 重打包
  • 砸壳后的 IPA + insert_dylib 注入 FridaGadget

  • 需要开发者证书或企业签重签名

  • 适合:没有越狱机、只能测自己的包

  • 工具:optool、insert_dylib、ios-deploy

路线 C · 虚拟化 / 云真机
  • Corellium 等虚拟 iOS 环境

  • 不越狱也能做系统级观测

  • 适合:安全团队、固件/内核研究

  • 成本高,但可复现、可快照

路线 D · 纯静态(macOS 就够)
  • 已有解密二进制或自研 Debug 包

  • Hopper / Ghidra / IDA 反汇编

  • 适合:逻辑梳理、算法还原

  • Linux 也能做静态,动态基本离不开 macOS + 设备

大多数人走的是 A 或 A+D 组合。如果你只有一台没越狱的 iPhone,也不是完全没戏,只是流程会多几步重签名,且很多系统 API 调用不到。

标准七步流程
1
拿包
App Store 安装的加密 IPA;TestFlight / 企业签可能是明文;自研 Debug 包直接用 Xcode 产物
2
砸壳(解密)
越狱机上用 frida-ios-dump、Clutch、dumpdecrypted、flexdecrypt;iOS 13+ 推荐 frida-ios-dump,社区维护更活跃
3
看结构
unzip IPA → 看 Info.plist、embedded.mobileprovision、entitlements;otool -L 看依赖库;file 确认 Mach-O 架构(arm64 / arm64e)
4
导头文件 / 扫字符串
OC 用 class-dump;Swift 用 dsdump + swift-demangle;混编两个都跑。再配合 strings、nm、jtool2
5
静态反汇编
Hopper、Ghidra(免费)、IDA Pro(业界标准)看伪代码、跟交叉引用、定位关键函数
6
动态调试 / Hook
Frida 脚本 Hook 方法、改返回值;objection 快速探测;搞不定时 LLDB + debugserver 单步跟
7
验证与输出
Theos 写 Tweak 验证假设;安全审计出报告;开发侧修复漏洞。二进制 patch 仅在授权前提下进行
工具箱:按阶段选,别贪多
环境与传输
工具用途备注
Xcode + CLT
编译、签名、lldb、otool
macOS 逆向基本盘
OpenSSH / iproxy
SSH 连越狱机、USB 映射端口
配合 usbmuxd
libimobiledevice
设备信息、安装 IPA、查看日志
跨平台,Linux 也能用部分功能
Frida
动态插桩框架
手机端装 frida-server;电脑端 pip install frida-tools
ipsw
下载/解析固件
内核、dyld、系统库研究用
砸壳与静态分析
砸壳
frida-ios-dump
目前社区首选,Python 脚本 + Frida,支持多架构,比老 Clutch 省心
砸壳
dumpdecrypted / flexdecrypt
经典 dylib 注入法,原理清晰,适合理解 FairPlay 解密过程
头文件
class-dump
导出 ObjC 类、方法、协议声明。Swift 纯类导出有限,得配合符号分析
反汇编
Hopper / Ghidra / IDA
Hopper 对 ObjC 友好;Ghidra 免费跨平台;IDA 插件生态强
Mach-O
otool · nm · jtool2 · MachOView
看加载命令、符号表、加密段、依赖库
Swift
dsdump · swift-demangle
dsdump 是 Swift 版 class-dump;swift-demangle 还原 _$s 符号;frida-swift-bridge 辅助 Hook
动态分析与 Hook
主力
Frida + frida-trace
Hook ObjC/Swift/C 函数,dump 内存,绕过检测。生态最大
封装
objection
基于 Frida 的一键探测:钥匙串、NSUserDefaults、类枚举、pinning bypass
底层
LLDB + debugserver
Frida 被检测时的备胎;改寄存器 x0 改返回值;配合 chisel、xia0LLDB 提效
组合
R2Frida
Radare2 + Frida,静态动态联动,适合习惯 r2 的人
遗产
Cycript
当年神器,能 REPL 改 ObjC 运行时。新系统上基本退役,了解即可
网络
Charles / Proxyman / mitmproxy
抓 HTTPS 流量;SSL Pinning 挡住时回到 Frida Hook NSURLSession
Tweak 开发与注入
工具干什么关键点
Theos
越狱插件编译框架
Logos 语法 %hook / %orig;nic.pl 建工程;make package install
Logos
Theos 的 Hook DSL
比纯 runtime API 写法简洁太多
ElleKit / Substitute
现代 Hook 引擎
rootless 越狱(Dopamine)环境常用,替代部分 Substrate 场景
insert_dylib / optool
非越狱注入
把 FridaGadget.dylib 插进 Mach-O Load Commands
ldid / codesign
伪签名、重签名
越狱环境装包;非越狱要用开发者证书
砸壳:第一步就卡壳的人最多

App Store 下来的包,可执行文件带 LC_ENCRYPTION_INFO,不跑起来解密,静态工具只能看到一团乱。所谓砸壳,就是让 App 在运行时由系统解密,再把内存里的明文 Mach-O dump 到磁盘。

老教程爱讲 Clutch、dumpdecrypted 手动拷 dylib 到 Documents 目录——能跑,但步骤繁琐。现在更常见的做法是 frida-ios-dump:连上越狱机,一条 Python 命令,按 Bundle ID 直接出解密 IPA。

# frida-ios-dump 典型用法(越狱机已装 frida-server)python3 dump.py com.example.targetapp # 输出解密后的 .ipa,拖进 Hopper 或 class-dump
砸壳只解决 FairPlay。如果 App 自己又套了壳(加固、混淆、自定义加密),还得再脱一层——这是商业加固和普通加密的交界,常见厂商有爱加密、梆梆、娜迦等,各自有不同思路,没有一招鲜。
静态分析:把地图画出来

解密之后,别急着上 Frida。先花半小时把地形摸清,后面 Hook 才不会瞎猜。

class-dump 适合 ObjC 项目,一把梭出头文件,搜关键字(login、jailbreak、encrypt、password)往往就能圈出可疑类。纯 Swift 或混编时头文件会缺不少——混编项目 class-dump + dsdump 各跑一遍,后面有专门章节展开。

把 Mach-O 拖进 Hopper 或 Ghidra,看伪代码、跟字符串交叉引用,是日常操作。比如越狱检测函数,社区案例里常见名字带 isJailbroken,Swift 则是 mangled 符号 _$s9No_Escape12isJailbrokenSbyF 这类——Ghidra 搜字符串往往比搜类名更快。

# 常用命令合集class-dump -H TargetApp -o ./Headers otool -L TargetApp # 依赖库otool -l TargetApp | grep crypt # 是否仍加密strings TargetApp | grep -i api # 搜 API 线索plutil -p Info.plist # ATS、URL Scheme
动态分析:Frida 是当前主场

静态能看出「有什么」,动态才能验证「是不是这里」。Frida 在 iOS 上和 Android 思路一样,语法不同——核心都是 JavaScript 跑在目标进程里,通过 ObjC runtime 或原生符号 Hook。OC 项目用 ObjC API,Swift 项目用 mangled 符号,混编先桥接层再下钻——搞混了就是前面坑清单里那些惨案。

// Frida:Hook ObjC 登录校验(示例)if (ObjC.available) { var cls = ObjC.classes['LoginManager']; var m = cls['- checkPassword:']; Interceptor.attach(m.implementation, { onLeave: function(retval) { console.log('原返回值: ' + retval); retval.replace(ptr('0x1')); // 强制 YES } }); }
Frida 常见任务清单
任务Hook 目标说明
越狱检测绕过
自定义 isJailbroken、文件路径检测
改 BOOL 返回;或 Hook stat/access/fopen
SSL Pinning
NSURLSessionDelegate、AFNetworking
objection 有通用脚本;定制 App 要定位校验函数
读 Keychain
SecItemCopyMatching
安全审计高频项
读本地缓存
NSUserDefaults、文件读写
配合 frida-trace 跟参数
协议还原
NSURLSession、CFNetwork、protobuf
必要时配合 Charles
反 Frida 对抗
dlopen、dlsym、端口扫描、内存特征
换 Frida 端口、用 FridaGadget 改名、或退回 LLDB
纯 OC · 纯 Swift · 混编 · 先判断栈再选工具
先判断语言栈:OC、Swift 还是混编?

拿到解密二进制,第一件事不是砸 Frida 脚本,而是判断这门 App 主要用什么写的。判断错了,后面全是白忙活——最典型的误会:对着纯 Swift 项目狂跑 class-dump,导出一堆残缺头文件,还以为 App 加了壳。

# 快速判断技术栈otool -L TargetApp | grep -i swift # 有 libswiftCore.dylib → 含 Swiftnm TargetApp | grep -c "OBJC_CLASS" # ObjC 类数量nm TargetApp | grep "_\$s" | head # Swift mangled 符号strings TargetApp | grep -i "bridging" # 混编线索
类型怎么认出来优先工具难度
纯 ObjC
class-dump 导出完整;大量 -[Class method:] 符号
class-dump → Hopper → Frida ObjC API → Theos
★★☆
纯 Swift
Swift 符号占主导;ObjC.classes 里业务类很少
swift-demangle / dsdump → Ghidra → Frida 符号 Hook
★★★★
Swift / OC 混编
两套符号都有;桥接层类名两边都能搜到
先 Hook @objc 暴露层,再下钻 Swift 原生符号
★★★☆
SwiftUI 为主SwiftUI.View
ContentView 等结构体符号多
动态为主;静态伪代码可读性差
★★★★☆
国内存量 App 里混编最多:老代码是 ObjC,新模块用 Swift 写。真正 2020 年后立项的纯 Swift 项目也越来越多——两套思路都得会,而且不能混用
Objective-C 逆向:最顺手的一条路

ObjC 是 iOS 逆向的「母语」。动态运行时把类、方法、协议全摊在桌面上,工具链也最成熟。如果你刚入门,建议先用 ObjC 为主的 App 练手(老版工具类、社交、支付 SDK 往往还是 ObjC)。

运行时
消息机制
  • 方法调用走 objc_msgSend

  • 类、元类、isa 指针可查

  • Category 能加方法

  • Protocol 约束清晰

静态
头文件导出
  • class-dump 一把梭

  • dsdump 支持更好

  • Hopper 伪代码可读

  • 字符串交叉引用好跟

动态
Hook 门槛低
  • Frida ObjC.classes

  • Theos %hook 直接写

  • method swizzling

  • objection 一键枚举

OC 分析套路
class-dump 导头文件
搜 login、token、jailbreak、encrypt、VIP 等关键词,圈出业务类。加 -S -s 能看到更多符号信息
Hopper 跟实现
从头文件方法名跳进反汇编,看伪代码。ObjC 方法有固定 prologue,跟 objc_msgSend 交叉引用很顺
Frida 验证
ObjC.choose(ObjC.classes['XXX']) 找存活实例;Hook - method: 看入参出参
Theos 固化
%hook 写进 Tweak.xm,%log 打日志,%orig 保留原逻辑。注意 %ctor 里别干太重的事
// Frida:枚举某 App 所有自研 ObjC 类(过滤系统类)for (var name in ObjC.classes) { if (name.indexOf('NS') === -1 && name.indexOf('UI') === -1 && name.indexOf('_') === -1) { console.log(name); } }
OC 项目里高频关注点
关注点常见类 / 方法提示
网络层
AFHTTPSessionManager、NSURLSession delegate
SSL Pinning 常在 delegate 的 challenge 回调里
存储
NSUserDefaults、Keychain(SecItem*)
token 不一定在 Keychain,很多在 UserDefaults
鉴权
自定义 Manager / Service 单例
搜 singleton、shared、default 命名
加密
CCCrypt、自定义 encode/decode
跟 strings 里的盐值、IV 常量
防护
isJailbroken、checkDebugger
BOOL 返回,Hook onLeave 改 retval 最快验证
Swift mangling · demangle · ARM64 String ABI
Swift 逆向:符号 mangling 是第一道坎

Swift 编译器会把函数名「揉」成一串 _$s... 或 _TtC... 的 mangled 符号,用来区分重载、泛型、所有权(owned/borrowed)。你看不懂这串,就没法 Hook,也没法在 Ghidra 里搜到正确函数。

举个例子,ContentView.dummyFunction(flag:) 在二进制里长这样:

# 原始 Swift 方法 ContentView.dummyFunction(flag: String) -> Void # 编译后的 mangled 符号 $s16FridaInTheMiddle11ContentViewV13dummyFunction4flagySS_tF # demangle 还原swift-demangle '$s16FridaInTheMiddle11ContentViewV13dummyFunction4flagySS_tF' → FridaInTheMiddle.ContentView.dummyFunction(flag: Swift.String) -> ()

更麻烦的是:没有 @objc 标注的纯 Swift 类,根本不会出现在 ObjC runtime 里。你在 Frida 里 ObjC.classes['LoginViewModel'] 搜不到,不代表没有这个类——它只是对 ObjC 不可见。

符号
找函数
  • nm / Module.enumerateExports

  • frida-trace -i "*关键词*"

  • swift-demangle 批量还原

  • dsdump 导 Swift 类型

Hook
按地址/符号
  • Module.findExportByName

  • Interceptor.attach(符号)

  • frida-swift-bridge 辅助

  • Release 包靠静态定签名

ABI
读参数
  • Bool/Int 多在 x0

  • String 看 x0+x1

  • 小字符串 ≤15B 内联寄存器

  • 大字符串 x1+32 读堆数据

Swift String 参数:踩坑率最高的 ABI

ARM64 上 Swift 的 String 不是简单指针。社区 CTF 案例里反复验证过:小字符串直接塞在 x0/x1 寄存器里;大字符串 x1 指向堆对象,实际 UTF-8 内容在指针 +32 偏移处。读错了就一堆乱码,还以为 Hook 没生效。

// Frida:Hook Swift 函数并读取 String 参数var fn = Module.findExportByName("TargetApp""$s9TargetApp11ContentViewV13dummyFunction4flagySS_tF"); Interceptor.attach(fn, { onEnter: function(args) { var x1 = this.context.x1; var strPtr = ptr(x1).add(32); // 大字符串堆布局 console.log(strPtr.readUtf8String()); } });
Swift 各版本差异(逆向视角)
版本特征对逆向的影响应对
Swift 4/5 过渡期
符号格式 _T0 和 _$s 混用
两种前缀都搜;用对应版本 Xcode 的 demangle 工具
Swift 5+ 稳定 ABI
符号以 _$s 为主;模块名嵌入符号
从符号里直接读 ModuleName.ClassName
async/await
挂起点被拆成状态机,函数碎片化
跟 Task 创建点;Frida trace 协程入口
Actor
隔离方法走特殊调度
Hook actor 方法的 mangled 符号,注意线程
SwiftUI
大量 struct、ViewBuilder 闭包
静态难看,靠 onAppear/action 等方法切入
Release + strip
符号表被剥光
字符串定位 + 控制流分析;或用 Debug 包对比
工具补充:dsdump(Swift 版 class-dump)能导出 Swift 类型信息,比老 class-dump 靠谱;IDA 的 Swift 插件、frida-swift-bridge 可以自动解析部分参数类型。但 Release 包 strip 之后,任何自动化工具都会变笨——静态定签名 + 动态验证仍是老办法。
Bridging Header · @objc 暴露 · 双工具链下钻
Swift / OC 混编:桥接层是突破口

绝大多数国内 App 是混编:底层网络、支付、老业务模块留着 ObjC,新页面、ViewModel 用 Swift 写。两边通过 Bridging Header 和 @objc 注解打通。逆向时,桥接层往往是最薄的切入口。

混编 App 里的三种暴露方式
方式编译器做了什么逆向时能不能看到Hook 策略
继承 NSObject + @objc
生成 ObjC 兼容元数据
class-dump 和 ObjC.classes 都有
直接 Frida / Theos %hook,最省事
@objcMembers class
整个类的成员都暴露给 ObjC
同上,但 Swift-only 方法签名会变形
注意 Swift 参数在 ObjC 侧的 selector 名
纯 Swift(无 @objc)
仅 Swift 符号表可见
ObjC runtime 看不到
必须走 mangled 符号或地址 Hook
@_silgen_name / @_cdecl
C 符号导出,供 C/OC 调用 Swift
nm 可见固定符号名
Module.findExportByName 直接定位
混编分析推荐顺序
1
class-dump + dsdump 各跑一遍
OC 头文件和 Swift 类型信息分开看。对比哪些类只在一边出现——「只在 Swift 侧」的往往是新核心业务
2
找 @objc 桥接类
ViewController、Manager、Service 如果被 @objc 暴露,先 Hook 这层。很多 Swift 业务逻辑最终会通过 ObjC selector 调出去
3
Swift 符号下钻
桥接层往下跟不进时,用 nm 搜 模块名+类名 的 mangled 符号,demangle 后定位真正干活的 Swift 方法
4
UIKit 回调兜底
按钮点击、网络回调、通知中心——这些走 ObjC runtime 的入口仍然好用,不管上层是 SwiftUI 还是 UIKit
# 从 mangled 符号里读模块和类名(Swift 5+)# $s16FridaInTheMiddle11ContentViewV... 拆解:# 16FridaInTheMiddle → 模块名 FridaInTheMiddle# 11ContentView → 类型名 ContentView# Frida:混编项目先扫 @objc 暴露的 Swift 类 ObjC.enumerateLoadedClasses({ onMatch: function(name) { if (name.includes('YourModule')) console.log(name); }, onComplete: function() {} });
混编项目最坑的一点:同一个业务,ObjC 侧叫 verifyLogin:,Swift 侧叫 verifyLogin(password:),mangled 符号又是第三套名字。建议在笔记里建一张「三方对照表」,静态看到一个就记一个,别靠脑子硬记。
语言栈 × 工具对照:别拿 OC 的锤子敲 Swift
任务纯 ObjC纯 Swift混编
导头文件
class-dump ✓✓✓
dsdump / 符号表 ✓✓
两个都跑 ✓✓✓
Frida 枚举类
ObjC.classes ✓✓✓
enumerateExports ✓✓
先 ObjC 再 exports ✓✓✓
Hopper 伪代码
可读 ✓✓✓
一般 ✓
看具体函数 ✓✓
Theos %hook
直接写 ✓✓✓
仅 @objc 方法 ✓✓
桥接层 ✓✓✓,纯 Swift 需 C 桥接
LLDB 下断
按方法名 ✓✓✓
按 mangled 符号 ✓✓
两种断点都备 ✓✓✓
字符串搜线索
好用 ✓✓✓
好用 ✓✓✓
好用 ✓✓✓
闭包 / Block
Block 结构固定 ✓✓
逃逸闭包难跟 ✓
混用,最头疼 ✓
语言符号 · 调试环境 · 砸壳 · Hook · 25 条血泪经验
常见坑清单:25 条血泪经验

下面这些是社区里反复出现的坑,不分先后,撞上哪个算哪个。每条都写了「怎么认」和「怎么绕」。

语言与符号
坑 01
class-dump 导出 Swift 类乱码或缺失
纯 Swift 类没有 ObjC 元数据,class-dump 要么跳过,要么吐出看不懂的声明
→ 换 dsdump;或直接 nm + swift-demangle 走符号表
坑 02
Frida 里 ObjC.classes 搜不到目标类
类没加 @objc,或者根本是 Swift struct / enum,不进 ObjC runtime
→ Module.enumerateExports() 按模块名过滤;frida-trace 盲跟
坑 03
Hook Swift 方法后 App 秒崩
调用约定不对、参数个数搞错、或者 Hook 了 release 下被内联的函数
→ 先只打 log 不改参数;用 Debug 包对比符号;onLeave 改返回值比 onEnter 改参数安全
坑 04
Swift String 读出来是乱码
没区分小字符串(寄存器内联)和大字符串(堆分配 +32 偏移)
→ 先打 x0/x1 原始值;≤15 字节试内联解码;否则 ptr(x1).add(32).readUtf8String()
坑 05
Release 包符号被 strip 光
nm 几乎没输出,Frida 找不到导出名,Hopper 只剩 sub_1000xxx
→ 字符串 + 交叉引用定位;对比 TestFlight/Debug 包;用 dSYM(如果是自己的 App)
坑 06
Swift 优化后伪代码看不懂
Whole Module Optimization、内联、尾调用优化把函数边界打碎
→ 动态 trace 比静态硬啃快;跟寄存器数据流而不是跟函数名
坑 07
混编 selector 名对不上
Swift 方法 export 给 ObjC 时参数标签会变,和源码里写的不一样
→ class-dump 看实际 selector;Frida 用 ['- actualSelector:label:'] 而非猜
调试与环境
坑 08
ASLR 算错地址,断点永远打不中
Ghidra 基址默认 0x100000000,运行时 slide 没加
→ LLDB 里 image list -o -f 看实际基址;断点地址 = slide + 静态偏移
坑 09
arm64e PAC 导致断点异常
A12 以后设备指针带 PAC 签名,直接用静态地址下断失败
→ 用符号断点 br set -n mangledName;或先 attach 再算运行时地址
坑 10
frida-server 版本和电脑端 frida 不一致
连得上但 attach 崩、或者脚本报 API not found
→ frida --version 和手机上 frida-server -version 必须一致,差一个小版本都可能出问题
坑 11
Frida attach 成功但脚本不执行
spawn 模式 App 还没跑完 +load;attach 太晚错过初始化
→ 用 frida -f bundleId --no-pause .spawn;或 %ctor / 延迟 setTimeout 2000
坑 12
反 Frida 检测导致闪退
扫 frida-server 进程、/tmp/frida-* 文件、27042 端口、内存字符串特征
→ 换端口启动;FridaGadget 改名;强对抗时退回 LLDB;或 Hook dlopen/dlsym
坑 13
ptrace / sysctl 反调试
PT_DENY_ATTACH 让 debugserver 附不上;sysctl 查 P_TRACED 标志
→ 早期 Hook ptrace、sysctl;或用内核级调试(门槛高)
坑 14
rootless 越狱路径搞错
Dopamine 等 rootless 方案没有完整写权限,/Library/MobileSubstrate 路径变了
→ Makefile 加 THEOS_PACKAGE_SCHEME = rootless;包装到 /var/jb/ 前缀
砸壳与二进制
坑 15
以为砸壳了,otool 仍显示 cryptid=1
砸壳失败、或者 dump 了错的进程 / Extension
→ otool -l TargetApp | grep crypt 确认;重新 frida-ios-dump;注意 App Extension 要单独脱
坑 16
Fat Binary 分析了错的架构
包里有 arm64 + arm64e 或模拟器 slice,Hopper 打开的不是真机那份
→ lipo -info 确认;lipo -thin arm64 抽出真机 slice 再分析
坑 17
商业加固二次加壳
FairPlay 解了但代码仍混淆,class-dump 导出极少,字符串加密
→ 先识别加固厂商特征;动态 dump 内存;必要时内存 patch(需授权)
坑 18
误把系统 dylib 当业务代码
otool -L 列了一堆系统库,Hopper 跟进了 UIKit 内部
→ 只分析主二进制和 Frameworks/ 下自研库;系统库跳过
Hook 与 Tweak
坑 19
Theos %hook 系统类导致 SpringBoard 崩溃
Hook 了 UIViewController 等基类,filter 没写好,全系统生效
→ plist filter 写对 Bundle ID;Hook 具体子类而非基类;先在目标 App 验证
坑 20
%orig 没调用导致逻辑断裂
重写方法时忘了调原实现,界面白屏或功能异常
→ 除非故意阻断,否则 %orig 带上;改返回值时用 return %orig; 再覆盖
坑 21
Hook 时机太早,目标类还没加载
%ctor 里 Hook 时 class 为 nil
→ 用 %hookf 或在 applicationDidFinishLaunching 之后 Hook;ObjC.schedule 延迟执行
坑 22
纯 Swift 方法没法直接 %hook
Theos 的 Logos 本质是 ObjC runtime,纯 Swift 不吃这套
→ 给 Swift 方法加 @objc 重新编译(自己的包);或 Frida/ fishhook 走符号 Hook
网络与其它
坑 23
SSL Pinning 在 Native 层不在 ObjC 层
通用 objection 脚本无效,校验在 CFNetwork 或自定义 C 函数里
→ frida-trace SSL* 系列函数;静态跟 SecTrustEvaluate;定位自定义 verify 回调
坑 24
以为抓到明文,其实是 protobuf / 自定义序列化
Charles 里看到乱码或固定长度二进制
→ Hook NSData 封包点;找 .proto 线索;用 protoc --decode 试解
坑 25
Flutter / RN 项目硬套 OC 流程
class-dump 几乎空,业务逻辑根本不在主二进制
→ 先识别技术栈;Flutter 走 libapp.so;RN 找 jsbundle。别在错的地方耗时间
上面 25 条里,坑 01、02、04、05、07 在 Swift / 混编项目里出现频率最高。如果你时间有限,先把这五条背熟,能少踩八成冤枉路。
LLDB:Frida 搞不定时的硬办法

不少 App 会主动检测 Frida 线程、端口、/tmp 下的特征文件。这时候 LLDB 反而更「低调」——毕竟是苹果官方调试器,只是配置麻烦。

典型流程:越狱机起 debugserver,Mac 上 lldb 远程 attach。因为 ASLR,Ghidra 里看到的地址要加运行时 slide 才是真实地址。ARM64 上函数返回值在 x0 寄存器,在 ret 前把 x0 改成 0,就能让「是否越狱」返回 NO——这是很多安全课程里的经典练手题,实战里照样管用。

# 设备端debugserver *:1234 --waitfor TargetApp # Mac 端lldb (lldb) process connect connect://127.0.0.1:1234 (lldb) br set -a 0x100abcd114 # 基址 + 偏移 (lldb) register write x0 0 # 改返回值
OffensiveCon 2026 的 iOS 逆向课程里专门有一节「When Frida doesn't work」——不是噱头,是真实工作流的一部分。
Theos 写 Tweak:验证想法最快的方式

Frida 适合探测,Tweak 适合稳定复现。你确认某个方法 Hook 有效后,用 Theos 写成 dylib,装进越狱机,每次启动自动生效,不用反复 attach。

Logos 语法很直白:%hook ClassName 包住要改的方法,%orig 调原实现,%ctor 写初始化。编译链是 make → package → install,通过 SSH 推到手机的 /Library/MobileSubstrate/DynamicLibraries(rootless 环境路径会变,Makefile 里要加 THEOS_PACKAGE_SCHEME = rootless)。

// Tweak.xm 示例 %hook LoginViewController - (BOOL)verifyVIP { return YES; // 跳过校验(仅限授权测试) } %end %ctor { NSLog(@"[MyTweak] loaded"); }
Tweak 只改内存逻辑,不改磁盘上的加密二进制——所以能在未砸壳的 App 上生效,但必须越狱。非越狱想注入,得走重打包 + insert_dylib,又是另一条线。
特殊 App 类型:别用同一套锤子
类型特点常见工具 / 思路
Flutter
逻辑在 libapp.so / App.framework,Dart AOT
reFlutter、blutter;Frida Hook dart 入口;字符串在二进制里往往还能搜到
React Native
JS bundle 可提取
解包找 main.jsbundle;Hermes 字节码要专门工具
Unity IL2CPP
元数据可能被 strip
Il2CppDumper + 全局 metadata;Frida 跟 il2cpp API
小程序容器
核心逻辑在远端
客户端逆向价值有限,抓包 + 服务端分析更实际
SwiftUI 新项目
符号更碎、优化更狠
更依赖动态分析;静态伪代码可读性下降

很多人栽在 Flutter 上:class-dump 几乎没东西,Hopper 打开是一堆 C 函数。先确认技术栈再选工具,能少熬好几个通宵。

防护与对抗:2026 年的常态

现在稍微正规点的 App,至少会带几样:越狱检测、调试器检测、完整性校验、SSL Pinning,有些还有 Frida/Substrate 检测。Corellium 去年的分享里提过一个趋势——攻防都在往更隐蔽的方向走:检测系统调用异常、内存映射特征、快照 diff 找 patch 点。

应对没有银弹,只有套路:

检测面
文件 / 路径 / URL Scheme
/Applications/Cydia.app、/bin/bash 等;rootless 越狱路径更随机,老脚本会失效
检测面
syscall / dyld
sysctl 查 P_TRACED、ptrace 反附加、异常端口检测
检测面
网络与证书
证书锁定、双向认证、自定义加密层
检测面
环境完整性
代码段 hash、越狱环境下的注入库枚举

做安全审计时,建议把「检测项清单 + 绕过难度 + 业务影响」写进报告,而不是只贴一个「已绕过」的截图。开发侧也能对照 OWASP MASTG(移动应用安全测试指南)逐项查。

环境清单:开工前准备好这些
类别推荐配置
电脑
Mac(必备 Xcode);内存 16GB+;SSD 够放多个 IPA 和 Ghidra 项目
设备
越狱 iPhone/iPad 一台,最好和主力机分开;备一条好数据线
系统版本
看越狱工具支持矩阵:checkra1n(A11 及以下)、palera1n、Dopamine(iOS 15–16.6.1)等,别盲目升系统
账号
Apple 开发者账号(非越狱重签名);TestFlight 测自研包更省事
网络
抓包证书安装、Frida 官方源、GitHub 工具克隆
Linux 可以干静态(Ghidra、r2、strings),但 iOS 动态调试、签名、安装这条链,现实里还是 Mac + 真机最顺。Corellium 那种云端方案另说。
学习资料:少踩坑的几本书和站
《iOS 应用逆向与安全》— 沙梓社
国内入门经典,砸壳、class-dump、Theos 流程讲得细,适合建立整体概念(部分工具需按新版替换)
Ostorlab:Swift Dynamic Instrumentation
讲透 Swift mangling、ABI、Frida 插桩,适合已经会 OC 逆向、要补 Swift 短板的人
notcheckmark:Swift Reversing
经典长文,Swift 调用约定、与 ObjC 桥接、IDA 插件思路,老文章但原理没过时
dsdump(GitHub)
Swift 类型导出工具,混编和纯 Swift 项目静态分析的标配补充
《iOS 应用逆向工程》— 蛇哥
偏实战和越狱生态,社区口碑不错,配合看雪论坛帖子阅读效果更好
OWASP MASTG / MASVS
安全测试标准流程,做合规审计、企业安全评估直接对标
Frida 官方文档 + codeshare 脚本库
Hook 模板最全;iOS 专区大量现成 bypass 脚本,改改就能用
GitHub:frida-ios-dump / ios-reverse-skills / TKTweakDemo
前者砸壳,中间是 2025–2026 自动化分析工作流,后者是非越狱注入流程演示
看雪、博客园、0xKer0 等技术博客
越狱检测 bypass、LLDB 实战、单个 App 案例分析,适合碎片化补课
给不同角色的选型建议
安全研究员
Ghidra + Frida + objection
先自动化扫 ATS、Pinning、Keychain,再人工深挖;MASTG 对照出报告
独立开发者
Hopper + LLDB
Debug 自己的包够用;查崩溃、验证加密实现、看第三方 SDK 行为
Swift 项目
dsdump + demangle + Frida
先还原符号表,再按 mangled 名 Hook;String/struct 参数对照 ABI 文档
混编项目
桥接层切入 + 双工具链
@objc 暴露的类先 Hook;纯 Swift 逻辑走符号下钻;建三方名称对照表
内核 / 固件方向
ipsw + IDA + LLDB + 内核调试
用户态只是起点;XNU、IOKit、RTKit 是另一条深沟
收尾

iOS 逆向看起来工具庞杂,核心其实就一句话:拿到明文二进制 → 判断 OC/Swift/混编 → 选对工具链 → 运行时验证 → 用 Tweak 或补丁固化结论。Frida 降低了 OC 项目的入门门槛,但 Swift 的 mangling 和 ABI 又把门槛抬回去了——混编项目则是两条路都要走。

如果你刚开始,建议分两条线练:找一款 ObjC 老 App 走通 class-dump → Hopper → Frida → Theos;再找一款 Swift 项目,专门练 nm → swift-demangle → 符号 Hook → 读 String 参数。两条都走过一遍,混编的自然就会了。

这篇把流程、工具、Swift/OC/混编差异和 25 条常见坑都收进来了。实际动手时当手册翻,比收藏十篇碎片化教程管用。

iOS逆向SwiftObjective-C混编Frida砸壳Theosclass-dumpLLDB常见坑
iOS 软件逆向技术与方法全梳理
工具链 · Swift/OC/混编 · 25 条常见坑 · 2026 现状
仅供合法授权的安全研究与学习交流
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-14 22:23:09 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/750489.html
  2. 运行时间 : 0.247179s [ 吞吐率:4.05req/s ] 内存消耗:4,887.46kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d106adb93fa7cf825dc32f898e3dbed1
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000885s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001315s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001199s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001099s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001191s ]
  6. SELECT * FROM `set` [ RunTime:0.002574s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001277s ]
  8. SELECT * FROM `article` WHERE `id` = 750489 LIMIT 1 [ RunTime:0.006312s ]
  9. UPDATE `article` SET `lasttime` = 1781446989 WHERE `id` = 750489 [ RunTime:0.020383s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.004211s ]
  11. SELECT * FROM `article` WHERE `id` < 750489 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001104s ]
  12. SELECT * FROM `article` WHERE `id` > 750489 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001173s ]
  13. SELECT * FROM `article` WHERE `id` < 750489 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009836s ]
  14. SELECT * FROM `article` WHERE `id` < 750489 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.017033s ]
  15. SELECT * FROM `article` WHERE `id` < 750489 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.017237s ]
0.250043s