当前位置:首页>iOSAPP>苹果手机间谍软件劫持iOS私有API:摄像头麦克风偷偷录制毫无提示

苹果手机间谍软件劫持iOS私有API:摄像头麦克风偷偷录制毫无提示

  • 2026-02-03 01:42:09
苹果手机间谍软件劫持iOS私有API:摄像头麦克风偷偷录制毫无提示
自上一篇jamf的报告后苹果手机间谍软件Predator中未公开的反检测反蜜罐反取证技术,该团队再发布了一篇名为Predator 间谍软件绕过 iOS 录制指示器技术分析报告。

自 iOS 14 系统起,苹果公司在设备状态栏中设置了颜色指示器。

当应用调用摄像头时会显示绿色圆点,调用麦克风时会显示橙色圆点。

这是一项关键隐私功能,用于提醒用户设备可能正处于被监视状态。

本研究详细阐述了由 Intellexa/Cytrox 公司开发的 Predator 间谍软件,如何通过技术手段绕过该指示器,实现隐秘监视。

通过对 Predator 间谍软件 iOS 样本的逆向工程分析,jamf发现了多项此前未公开的 Predator间谍软件技术机制,具体如下:

  1. 巧用 Objective-C 语言的空对象消息特性,悄悄阻止摄像头、麦克风的活动状态向系统反馈更新; 
  2. 仅靠一个Hook函数,就能同时隐藏 iOS 状态栏中摄像头(绿点)和麦克风(橙点)的两种状态指示器; 
  3. 存在设计短板:其网络电话(VoIP)录音模块没有自带屏蔽麦克风指示器的隐身能力,需手动开启专门的指示器屏蔽模块才能隐藏痕迹;
  4. 精准锁定了 iOS 系统中私有框架的特定 API 接口作为攻击目标,明确了该间谍软件要劫持的系统核心函数。

1. 研究背景

1.1 iOS 录制指示器功能

苹果公司于 2020 年发布的 iOS 14 系统中,首次引入录制指示器这一隐私保护机制,具体功能如下表所示:

指示器
含义
绿色圆点
摄像头正在被调用(或摄像头与麦克风同时被调用)
橙色圆点
仅麦克风正在被调用

这些指示器会在设备状态栏中显示,且合法应用无法对其进行屏蔽。该功能由 iOS 系统的主屏幕及用户界面控制进程 SpringBoard 负责管理,通过私有框架类对传感器的活动状态进行实时监测。

图 1:左侧橙色圆点表示麦克风正在使用;右侧绿色圆点表示摄像头正在使用

1.2 过去的研究:NoReboot 技术

2022 年 1 月,现隶属于 Jamf 的 ZecOps 公司曾发布了一项名为 “NoReboot” 的技术研究。该技术展示了恶意软件如何模拟设备关机状态,同时维持后台监视功能。其实现原理如下:

  1. 劫持设备的关机事件;
  2. 向 SpringBoard 和 BackBoard 守护进程注入恶意代码;
  3. 阻止 SpringBoard 进程启动,从而隐藏所有用户界面;
  4. 屏蔽设备的所有物理反馈,包括屏幕显示、振动及触控功能。

通过以上手段,恶意软件可营造出设备已关机的假象,而摄像头和麦克风仍在后台持续工作。

1.3 Predator 间谍软件的差异化攻击手段

Predator 采用了与 NoReboot 完全不同的技术路径。它不会模拟设备关机,而是仅选择性屏蔽录制指示器,同时保证设备其他功能正常运行。这种攻击方式更为隐蔽,用户使用设备时不会发现任何异常,但实际上设备已处于被监视状态。

两种技术的对比如下表所示:

对比维度
NoReboot 技术
Predator 技术
设备状态
呈现关机假象
完全正常运行
作用范围
屏蔽所有用户界面
仅隐藏指示器
用户怀疑概率
可能会察觉 “已关机” 设备存在异常活动
无任何可见异常特征
技术复杂度
需要对守护进程进行完整注入
采用精准的 API 钩子函数技术

2. 技术分析

2.1 组件总览

Predator 间谍软件的辅助模块具备四项独立功能,具体如下表所示:

模块编号
类名
功能
10
Helper::HiddenDot
指示器屏蔽
11
Helper::Voip
网络电话 / 通话录音
12
Helper::KeyLogger
键盘记录
13
Helper::CameraEnabled
摄像头调用

每个模块均通过一套简单的命令协议进行控制:

  • X,A, args:分配 / 初始化编号为 X 的模块
  • X,E, args:对编号为 X 的模块执行指定命令
  • X,D:删除 / 销毁编号为 X 的模块

2.2 HiddenDot 模块:指示器屏蔽机制

2.2.1 Hook函数安装

HiddenDot::setupHook () 函数的攻击目标是 SpringBoard 进程中的传感器活动数据提供器,具体为 SBSensorActivityDataProvider 类的_handleNewDomainData: 方法。

图 2

HiddenDot::setupHook () 函数对 SBSensorActivityDataProvider._handleNewDomainData: 方法进行挂钩

该_handleNewDomainData: 方法的作用是,每当设备传感器活动状态发生变化时,如摄像头开启、麦克风激活等,iOS 系统就会调用此方法进行状态更新。Predator 通过对这一个方法挂钩,可在传感器状态信息传递至指示器显示系统之前,对所有状态更新请求进行拦截。

2.2.2 钩子回调函数:利用 Objective-C 空消息传递机制

指示器屏蔽的核心机制十分简洁。反编译后的回调函数核心逻辑如下:

图3:HiddenDot 回调函数伪代码 —— 通过 **a2 = 0 操作将 self 指针置空

在汇编语言层面,上述逻辑仅需一条 STR XZR 指令即可实现,该指令的作用是将线程状态寄存器的值置零。

图 4:HiddenDot 回调函数汇编代码 ——STR XZR, [X8] 指令将线程状态中的 x0 寄存器置零

该技术利用了 Objective-C 语言的一项核心特性:向空对象(nil)发送消息时,系统会自动忽略该消息,且不会产生任何报错。

2.2.3 实现原理

在 ARM64 架构中,函数调用遵循特定约定,self 指针会被存储在 x0 寄存器中。当系统调用 Objective-C 方法时,例如:

[SBSensorActivityDataProvider _handleNewDomainData:newData]

寄存器的赋值情况如下:

  • x0 = self(即 SBSensorActivityDataProvider 类的实例对象)
  • x1 = _cmd(即方法选择器)
  • x2 = newData(即传递的域数据参数)

Predator 在该方法执行前,将 x0 寄存器的值置为 0(即空指针),此时上述方法调用就会变为:

[nil _handleNewDomainData:newData]

在 Objective-C 语言中,该调用会直接返回空值(nil/0),且不会执行方法内的任何代码。传感器活动状态的更新请求会被静默丢弃,SpringBoard 进程无法获知摄像头或麦克风已被激活,因此不会显示任何指示器。

2.2.4 Hook函数返回值

回调函数返回值为 2,该值在 DMHooker 框架的异常挂钩系统中,表示 “使用修改后的线程状态继续执行程序”。返回值的完整枚举定义如下:

返回值
含义
0
执行错误 —— 延迟后重试
1
部分成功 —— 可能需要进行 PAC 签名
2
执行成功 —— 转发修改后的寄存器数据
3
PAC 重定向 —— 使用缓存的签名地址
4
移除Hook函数 —— 清理后继续执行

2.2.5 单一Hook函数实现双重屏蔽

本研究的一项关键发现是:这一个Hook函数即可同时屏蔽绿色(摄像头)和橙色(麦克风)两种指示器。SBSensorActivityDataProvider 类的作用是,在将传感器活动信息分发至用户界面层之前,对所有传感器的活动状态进行汇总。

因此,通过拦截_handleNewDomainData: 方法,Predator 可利用一个Hook函数,实现对所有类型传感器状态更新的拦截。

这种实现方式比在无效代码中发现的另一种方案更高效。黑鸟认为主要原因在于下面的废弃方案需要为每种指示器分别设置Hook函数。

2.2.6 无效代码:被弃用的技术方案

在分析过程中,还发现了一个名为 CSWatcherSpawner::TestHooker () 的函数。

该函数实现了另一种指示器屏蔽机制,直接Hook SBRecordingIndicatorManager 类:

图 5:TestHooker () 函数中的无效代码展示了被弃用的 SBRecordingIndicatorManager 挂钩方案 —— 该函数无任何交叉引用

该函数不存在任何交叉引用,即从未被调用过。这表明它是一个开发 / 测试阶段的代码,最终被更简洁高效的 SBSensorActivityDataProvider 挂钩方案所取代。

被弃用的技术方案需要满足以下条件:

  1. 需要设置两个独立的Hook函数,每种方法对应一个;
  2. 需要直接对指示器的可见性进行操控;
  3. 可能会与显示系统产生竞争条件问题。

而最终投入使用的_handleNewDomainData: 方法挂钩方案更为简洁,它从数据源层面直接阻断状态更新,而非在用户界面层进行干预。

2.3 网络电话(VoIP)录音模块

VoIP 录音模块不具备指示器屏蔽功能,仅对音频处理函数进行挂钩:

图 6

Voip::setupHooks () 函数挂钩 AudioConverterNew 和 AudioConverterConvertComplexBuffer+52 方法 —— 无任何指示器屏蔽相关代码

该模块的音频捕获流程具体如下:

  1. 通过缓冲区大小检测音频采样率,支持 16kHz、24kHz、32kHz、44.1kHz、48kHz;
  2. 利用 NEON 单指令多数据(SIMD)指令,将 32 位浮点型脉冲编码调制(PCM)音频数据转换为 16 位整型;
  3. 将 4 声道音频下混为立体声;
  4. 通过 ExtAudioFileWrite () 函数将音频数据写入文件。

但该模块未包含任何屏蔽橙色麦克风指示器的代码。这一设计意味着,需要先执行一次全局指示器屏蔽操作,之后 VoIP 录音功能及可能的摄像头捕获功能,才能在不触发可见指示器的情况下运行。

2.4 CameraEnabler 模块:摄像头调用的 PAC 绕过技术

CameraEnabler 模块采用了另一种技术手段 —— 指针认证码(PAC)重定向。

2.4.1 基于模式匹配的目标定位

该模块并未对已知符号进行挂钩,而是通过 ARM64 指令模式匹配技术,定位目标函数的地址:

图 7:CameraEnabler::findFunctionAddress () 函数利用 memmem () 函数,在 FigVideoCaptureSourceCreateWithSourceInfo 函数附近搜索 ARM64 指令头模式

这种技术可让 Predator 间谍软件定位到未导出的内部函数,使Hook函数能够有效应对 iOS 系统更新。即使系统对函数名称或导出结构进行调整,该技术依然有效。

2.4.2 Hook回调函数:条件性 PAC 重定向

CameraEnabler 模块的回调函数会检查 x0 寄存器的值,并根据检查结果执行条件性重定向操作:

图 8:CameraEnabler 回调函数流程图 —— 当 x0 寄存器值等于 0x10 时,返回值为 3(PAC 重定向),从而绕过摄像头权限检查
当返回值为 3 时,会指示 DMHooker 框架使用 PAC 缓存中预先签名的返回地址,执行重定向操作,以此绕过系统的摄像头访问权限检查。
3. 检测思路
3.1 进程注入痕迹
Predator 的Hook函数需要向系统进程注入恶意代码,涉及的目标进程如下:
SpringBoard 进程:用于实现 HiddenDot 模块功能
mediaserverd 进程:用于实现 CameraEnabler 和 VoIP 模块功能
对应的检测方法如下:
1、监控系统进程中是否存在异常的内存映射;
2、检查是否有非系统代码注册异常端口;
3、分析线程状态,查看是否在非预期位置存在断点指令。
3.2 Hook函数检测
DMHooker 框架采用基于 Mach 异常的挂钩技术,而非传统的内联挂钩技术。对应的检测方法如下:
1、枚举系统进程的异常端口;
2、检查是否存在指向非系统代码的断点异常处理器;
3、监控是否存在修改寄存器内容的 thread_set_state 调用。
3.3 行为特征检测
1、检测是否存在摄像头或麦克风被调用,但未显示对应指示器的情况;
2、检测 mediaserverd 进程是否向异常路径调用 ExtAudioFileWrite 函数写入数据;
3、检测 SpringBoard 进程是否接收到传感器活动通知,但未更新用户界面的情况。
结论
本研究首次公开了对 Predator 间谍软件 iOS 版本录制指示器绕过机制的技术分析。
核心研究成果如下:
利用 Objective-C 空消息传递机制:
通过对 SBSensorActivityDataProvider._handleNewDomainData: 方法设置单一钩子函数,将 self 指针置空,实现对摄像头和麦克风两种指示器的同时屏蔽;
模块化架构设计存在缺陷:
其 VoIP 录音模块未内置指示器屏蔽功能,需要操作人员先手动激活 HiddenDot 模块;
采用 ARM64 指令模式匹配技术定位目标:
CameraEnabler 模块通过指令模式匹配而非符号解析的方式,定位系统内部框架函数;
无效代码揭示技术演进历程:
被弃用的 SBRecordingIndicatorManager 挂钩方案表明,该间谍软件的技术路线,从直接操控用户界面的方案,演进为更简洁高效的数据源拦截方案。
本研究成果填补了现有威胁情报的空白,揭示了商业间谍软件为绕过 iOS 隐私保护机制所采用的复杂技术手段。
5. 入侵特征
5.1 被Hook的方法
SBSensorActivityDataProvider._handleNewDomainData:(SpringBoard 进程)
CMCapture.framework 中特定模式偏移位置的函数(mediaserverd 进程)
AudioConverterNew(mediaserverd 进程)
AudioConverterConvertComplexBuffer+52(mediaserverd 进程)
5.2 目标进程
SpringBoard
mediaserverd
5.3 目标框架路径
/System/Library/PrivateFrameworks/CMCapture.framework/CMCapture
/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore

关键术语解释

  1. SpringBoard
    定义:iOS 系统的主屏幕及用户界面控制进程,负责管理设备的主屏幕显示、应用启动及状态栏指示器等功能。
  2. SBSensorActivityDataProvider
    定义:iOS 私有框架中的类,负责汇总设备传感器的活动状态信息,并将其分发至用户界面层,是录制指示器功能的核心数据来源。
  3. 钩子函数(Hook)
    定义:一种代码注入技术,通过修改目标函数的执行流程,在函数执行前、执行中或执行后插入自定义代码,实现对函数行为的拦截或修改。
  4. Objective-C 空消息传递
    定义:Objective-C 语言的特性,向空对象(nil)发送消息时,系统不会执行任何操作,也不会抛出异常,仅会返回空值。
  5. 指针认证码(PAC,Pointer Authentication Code)
    定义:ARM64 架构中的安全机制,通过为指针添加加密认证码,防止指针被篡改,抵御代码注入和重定向攻击。
  6. DMHooker
    定义:一款基于 Mach 异常的挂钩框架,可在不修改目标函数代码的情况下,实现对函数执行流程的拦截。
  7. NEON SIMD
    定义:ARM 架构中的高级单指令多数据扩展指令集,可并行处理多个数据元素,提升音频、视频等数据的处理效率。
  8. 守护进程(Daemon)
    定义:运行在后台的系统进程,负责执行特定的系统服务功能,无用户界面。
  9. 脉冲编码调制(PCM,Pulse Code Modulation)
    定义:一种将模拟音频信号转换为数字信号的编码方式,是数字音频的基础格式。
  10. 竞争条件(Race Condition)
    定义:多进程或多线程并发执行时,由于执行顺序不确定,导致程序输出结果异常的问题。

由于原文已经被删除(未知原因),因此内容仅供参考,为避免内容流失,特此整理记录。

https://www.jamf.com/blog/predator-spyware-ios-recording-indicator-bypass-analysis/

最新文章

随机文章

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