当前位置:首页>python>这个霸总会Python(12/14)- “`import` 劫持”

这个霸总会Python(12/14)- “`import` 劫持”

  • 2026-07-02 04:01:59
这个霸总会Python(12/14)- “`import` 劫持”

脚步声在走廊尽头停住了。

陈默的手指悬在 ThinkPad 键盘上方,没有动。程思语的呼吸压在嗓子眼里,应急灯的绿色指示灯是机房里唯一的光源。

十秒。

二十秒。

然后——一声猫叫。

在空荡荡的走廊里拖了个长音,接着是爪子踩碎水泥地上落叶的碎响。

程思语整个人松下来,手里的电源线掉在桌上。

「废弃八年的科学岛…」她低声说,「现在有猫了。」

陈默没有笑。他重新点亮屏幕,光标停在 `patch_pass_block` 函数的最后一行。

「如果进来的不只是猫。」他说。

程思语从包里掏出一个手掌大的设备——USB 隔离卡,军工级,物理断开除指定通信线路外的一切连接。她把卡插进 ThinkPad 唯一的 USB 口。

「从现在开始,这台机器只走壳公司的专线。」她说,「物理层隔离。就算我爸的人摸到这儿,也只能看到一台关了机的路由器。」

陈默点了点头。他们还有不到两天。

他重新打开 `build_raise_wrapper` 的端到端测试结果。

「一个函数。」他说。

「是。」程思语站到他身后。

「还有两万七千个。」

陈默把编辑器的窗口拆分。左边是 `patch_pass_block`,右边是新文件——`raise_importer.py`。

「一个一个改,时间不够。但如果我们从源头下手——」

他敲下第一行:

```python

import sys

import importlib.abc

import importlib.util

```

「Python 每次 `import` 一个模块,都经过 `sys.meta_path`。」陈默边说边敲,「里面默认有三个 Finder:`BuiltinImporter`、`FrozenImporter`、`PathFinder`。它们决定去哪里找模块、怎么加载。」

「我们要加第四个。」

```python

class RaiseImporter(importlib.abc.MetaPathFinder, importlib.abc.Loader):

    """自定义导入器:拦截每条 import,检查异常处理完整性。"""

```

程思语看着屏幕:「它会在 `import` 的时候自动应用 RaiseGuard?」

「对。任何模块一被加载——不管是神码 AI 生成的还是人写的——经过 `RaiseImporter` 手里走一圈,所有 `except: pass` 都会被替换。用户什么都不用改。」

他继续敲:

```python

def find_spec(self, fullname, path, target=None):

    """拦截所有非标准库的导入。"""

    # 跳过标准库 —— 它们不会从神码 AI 来

    if fullname.startswith(('_', 'importlib', 'sys', 'os')):

        return None

    # 尝试用默认的 PathFinder 找到这个模块

    try:

        spec = importlib.util.find_spec(fullname)

    except (ModuleNotFoundError, ValueError):

        return None

    if spec is None:

        return None

    # 劫持 Loader,插入我们的验证逻辑

    spec.loader = self

    return spec

```

程思语皱眉:「你替换了 `spec.loader`,但 `create_module` 和 `exec_module` 的默认行为呢?」

「所以要重写。」

陈默另起一段:

```python

def create_module(self, spec):

    """让 Python 使用默认的模块创建方式。"""

    return None  # None 表示让 importlib 自己创建模块对象

def exec_module(self, module):

    """执行模块前,先扫描并修复其所有函数。"""

    # 1. 遍历模块的所有属性

    for name in dir(module):

        obj = getattr(module, name)

        # 2. 找到函数/方法

        if isinstance(obj, types.FunctionType):

            # 3. 应用 RaiseGuard

            repaired = guard.repair(obj)

            if repaired is not obj:

                setattr(module, name, repaired)

    # 对于模块内部的嵌套导入,需要递归处理

    self._recurse_module(module)

```

程思语指了指 `guard.repair`:「`types.CodeType` 构造函数的参数——你有把握在任意函数上都能正常工作?」

陈默没有回答。他打开目录 `/lib/shenma/core`——一份从壳公司内网拖下来的神码 AI 金融核心模块。

他随手挑了一个文件:`settlement_engine.py`。

十六个函数,七千行代码。

「试试就知道了。」

他启动了一个干净的 Python 子进程:

```python

import sys

sys.meta_path.insert(0, RaiseImporter())

# 导入一个神码 AI 模块

from lib.shenma.core import settlement_engine

# 触发一个已知的静默吞异常场景

result = settlement_engine.process_transfer(

    sender='TEST001',

    receiver='TEST002',

    amount=Decimal('0.00')

)

```

程思语看着屏幕:「零元转账——边界条件,AI 最喜欢在这里用 `except: pass`。」

陈默按回车。

终端输出:

```

╭─ 导入报告 ─────────────────────────╮

│ settlement_engine.py                │

│   函数检查: 16/16                   │

│   修复: 4                           │

│   未修复: 0                         │

│   异常传播: 已验证                   │

╰─────────────────────────────────────╯

```

四行修复。零异常被吞。

陈默和程思语同时盯着那行「未修复: 0」,谁都没说话。

然后程思语靠回椅背:「两万七千个函数,变成了一个 `sys.meta_path.insert`。」

「理论上。」陈默说。

「实践上呢?」

陈默没有回答。他写了一段更彻底的测试——批量加载神码 AI 核心模块下的全部 127 个 `.py` 文件:

```python

import os

import importlib

modules = []

root = '/lib/shenma/core'

for f in os.listdir(root):

    if f.endswith('.py') and not f.startswith('_'):

        name = f.replace('.py', '')

        mod = importlib.import_module(f'lib.shenma.core.{name}')

        modules.append(mod)

# 汇总验证

total_fixed = sum(len(getattr(m, '_raiseguard_fixed', [])) for m in modules)

print(f"模块数: {len(modules)}")

print(f"共计修复函数: {total_fixed}")

```

他按下回车。这次等了四秒——127 个模块的加载和扫描需要时间。

输出:

```

模块数: 127

共计修复函数: 412

```

陈默盯着数字。

「四百一十二个空 `except`。在这个目录里。」

程思语的声音很轻:「全行业都说神码 AI 写的代码是行业标准。」

「行业标准的标准差是零。」陈默说,「因为没有人测过——或者测了,但异常被吞了,所以看不到。」

他正要继续写下一步的测试,终端弹出一条新的输出:

```

⚠ 警告: settlement_engine.verify_report — 尝试修复失败

  原因: 代码对象包含不受支持的 flags (CO_VARARGS+CO_KWONLY)

```

程思语的头探过来:「没有全部成功?」

陈默打开 `verify_report` 的反汇编:

```python

import dis

dis.dis(settlement_engine.verify_report)

```

输出让他的手指停在键盘上:

```

 0 LOAD_GLOBAL    check_consensus

 2 CALL_FUNCTION  0

 4 POP_JUMP_IF_TRUE  20

 6 LOAD_FAST      timeout

 8 LOAD_CONST     None

10 COMPARE_OP     ==

12 POP_JUMP_IF_FALSE  20

14 LOAD_CONST     True

16 RETURN_VALUE

18 ...

20 LOAD_FAST      data

22 SETUP_FINALLY  34    ← 这条指令有问题

24 LOAD_GLOBAL    process

26 CALL_FUNCTION  0

28 POP_TOP

30 POP_BLOCK

32 LOAD_CONST     None

34 RETURN_VALUE

...

```

陈默把反汇编逐行看过,然后笑了。

「不是修不了。」他说,「是 `verify_report` 根本就没有 `except` 块——它是一个用了 `SETUP_FINALLY` 做早期返回的优化写法,不是异常处理。」

「所以?」程思语问。

「所以误报。」陈默在 `RaiseImporter` 里加了一行过滤:

```python

# 如果函数体里没有任何 except handler,跳过

if not _has_except_handler(code_obj):

    continue

```

重新运行。误报那行消失。修复总数还是 412。

「干。」陈默说,「四百一十二个货真价实的 `except: pass`。」

程思语的手机在这时候震了。

她低头看了一眼。

「找到地址了。」她抬起头,「我爸的人查到了这家壳公司的注册地。」

「还有多远?」

「壳公司在深圳前海。他们坐最早的航班飞深圳,再从深圳转过去——大概明天下午到。」

陈默看了一眼时间:凌晨 3:47。

「十四小时。」

「不到十四小时。」程思语说,「他们可能在飞机上也在远程操作。」

陈默没有慌。他打开一个新终端。

「那我们就用这十四小时做一件事——把 `RaiseImporter` 做成一个可以分发的包。一个 `pip install` 就能让全世界的 Python 应用自动免疫 `except: pass`。」

他敲下 `setup.py` 的骨架:

```python

from setuptools import setup

setup(

    name='raiseguard',

    version='0.1.0',

    py_modules=['raise_importer'],

    python_requires='>=3.8',

)

```

然后是 `raise_importer.py` 的完整版——包含激活接口:

```python

def activate():

    """激活全局导入拦截。只需要在一处调用。"""

    import sys

    importer = RaiseImporter()

    sys.meta_path.insert(0, importer)

    return importer

```

陈默把这三行写完,正要打包,程思语忽然按住他的手。

「等一下。」

「怎么?」

「你把它做成 `pip` 包,分发出去——神码的人也会下载。他们一看就知道怎么绕过。」

陈默的手指停在键盘上。

她说得对。开源是双刃剑——你曝光漏洞的同时,也让漏洞的作者看到了你的反制手段。

「那就只发编译后的版本。」他说。

「编译?`.pyc`?」

「不。」陈默打开 `distutils`,「用 Cython 编译成`.so`。」

```python

# setup.py

from distutils.core import setup

from Cython.Build import cythonize

setup(

    ext_modules=cythonize(['raise_importer.py']),

)

```

程思语盯着 Cython 那行:「编译成二进制——反编译难度指数级上升。」

「而且标准 Cython 编译会抹掉调试符号。」陈默补充,「三周内逆向不出来。三周后——」

「三周后我们不需要它了。」

他们之间没有多余的对话。陈默敲下 `python setup.py build_ext --inplace`——

编译只用了七秒。

目录下多了一个 `.so` 文件:`raise_importer.cpython-311-x86_64-linux-gnu.so`。

程思语把 `.so` 文件拷贝到一个 U 盘里。

「一个 U 盘,四百一十二个修复。」她说。

「还不够。」

陈默把 U 盘插回电脑,打开了一个更深的目录。

「神码 AI 的核心不全是 Python。你用 `dis` 看过的那个 `settlement_engine`——」

他用 `file` 命令检查:

```bash

file /lib/shenma/core/_settle_core.cpython-311-x86_64-linux-gnu.so

```

输出:

```

ELF 64-bit LSB shared object, x86-64

```

程思语的脸色变了。

「C 扩展。」她说。

「C 扩展。」陈默重复,「`.py` 文件我们能用 `sys.meta_path` 拦截。但 `.so` 文件——Python 的 import hook 只能看到 .py 的模块。C 扩展的代码是直接通过 `ctypes` 或 `PyInit` 函数加载的,不走 Python 的 import 流程。」

程思语沉默了几秒。

「那 `RaiseGuard` 碰不到 C 扩展的代码?」

「碰不到。」陈默说,「而神码 AI 最核心的高频交易结算、医疗影像处理——都是 C 扩展。`except: pass` 在那里面是硬编译的 C 代码。」

程思语盯着屏幕上的 `.so` 文件,视线一寸一寸地扫过 ELF 文件头的十六进制。

「所以我爸——」她缓缓说,「他知道你早晚会发现 Python 层面的毒。所以他提前把最关键的代码编译成 C。」

「防的就是我这个层面。」

两个人同时沉默。

机房的通风管道传来风声,像什么东西在地下深处叹气。

然后陈默开口了:

「但 C 扩展也是 `dlopen` 加载的。」

程思语抬起头:「你想劫持 `dlopen`?」

「不。」陈默把编辑器拉到最大,「Python 加载 C 扩展的入口点是一个叫 `_bootstrap_external` 的内部模块。你在 Python 源码里能找到它——」

他打开 CPython 的源码目录:

```python

# Lib/importlib/_bootstrap_external.py

class ExtensionFileLoader(importlib.abc.Loader):

    def create_module(self, spec):

        """从共享库创建模块。"""

        # ...

        module = _call_with_frames_cleaned_up(

            _exec, spec.name, self.path)

```

「要改 CPython 源码?」程思语说,「重新编译解释器?」

「不用。」陈默说,「你注意到 `_exec` 前面没有下划线前缀保护了吗?」

程思语凑近屏幕。

「这个函数——`importlib._bootstrap._exec`——它在 `sys.modules` 里。我们可以把整个 `ExtensionFileLoader.create_module` 替换掉。」

陈默敲下一段代码,手指比之前快了一倍:

```python

import importlib._bootstrap

import importlib._bootstrap_external

# 保存原始加载器

_original_loader = importlib._bootstrap_external.ExtensionFileLoader

# 创建一个包装加载器

class MonitoredExtensionLoader(_original_loader):

    def create_module(self, spec):

        """创建模块前进行安全检查。"""

        module = super().create_module(spec)

        # 如果模块里有 Python 可调用的部分,检查它

        if hasattr(module, '__init__'):

            # 递归检查所有可调用属性

            self._check_module(module)

        return module

    def _check_module(self, obj, path=''):

        """遍历 C 扩展模块的所有 Python 可见属性。"""

        for name in dir(obj):

            try:

                attr = getattr(obj, name)

            except Exception:

                continue

            if isinstance(attr, types.FunctionType):

                # 即使是 C 扩展暴露的 Python 函数包装,也可以检查

                code = attr.__code__

                # 检查字节码中是否缺少 RAISE_VARARGS

                if b'\x82\x01' not in code.co_code:

                    # 这是一个潜在风险 —— C 扩展内部无法触及

                    self._warn(f"{path}.{name}: C 扩展内部异常处理未知")

```

程思语看着那段代码说:「你在做的是——检测边界,但真正的问题在边界里面。」

「对。」陈默放下手,「Python 层面的 import hook 能劫持 `.py` 文件的加载,能包装 C 扩展暴露的接口。但 C 扩展内部的函数——那些直接用 C 写的 `try-except` 逻辑——我已经碰不到了。」

程思语沉默了很久。

然后她说:「所以 `except: pass` 的最底层,我们改不了。」

「用 Python 改不了。」

「你要用 C?」

「不。」陈默把屏幕关掉,转向程思语,「我要用你。」

程思语怔了一下:「我?」

「你爸在 C 扩展里下毒,是因为他以为只有编译器层面的攻防。」陈默说,「他没想到他的女儿会站在另一边。」

程思语的手机又震了。她没看。

「神码 AI 的 C 扩展签名证书——」陈默顿了顿,「你拿得到吗?」

程思语的表情从困惑变成了理解的寒光。

「你想重新编译 C 扩展。」

「不重新编译。」陈默说,「是重新签名。你用你爸的证书签一份补丁过的 `.so`,替换原文件——系统会以为它是官方更新。」

程思语拿着手机的手垂了下去。手机屏幕亮着,那条未读消息显示着航班信息——深圳湾,明天 14:30 落地。

「签证书需要从他的个人保险柜里拿。」她说,「那个保险柜在我妈生前的书房里。」

「你进得去吗?」

程思语没有回答。她按灭了手机屏幕。

「我六岁那年,他在书房里写第一版交易引擎。」她说,「我在他脚边拼乐高。保险柜的密码——用的就是我生日。」

陈默没有接话。

程思语站起来,从包里拿出一把老式 U 盘钥匙扣——磨得发白的金属环上挂着三把钥匙。

「我回一趟程家老宅。」

「安全吗?」

「不安全。但你还剩十三个半小时。」

她走到机房门口,回头看了一眼。

「别等我回来才跑测试。你一边打包 `raiseguard`,一边等我消息。」

「如果你没回来呢?」

程思语在门口站了两秒。应急灯光在她脸上切出明暗分明的界线。

「那你就在 `except` 块里——替我 `raise`。」

门在身后关上。脚步声顺着走廊远去,越来越轻。然后是铁门合拢的闷响。

机房里只剩下机柜的嗡鸣和 ThinkPad 风扇的轻响。

陈默一个人坐在三面空机架中间。

他转回屏幕。

光标在 `MonitoredExtensionLoader` 的最后一行闪烁。

他删掉了那行代码。然后重新敲下三行:

```python

def activate():

    import sys

    sys.meta_path.insert(0, RaiseImporter())

    sys.meta_path.append(MonitoredExtensionLoader)

    print("RaiseGuard active. 0% silent failures.")

```

他盯着最后那行 `0% silent failures`。

然后按下了回车。

终端输出一个干净的提示符,没有任何报错。

但程思语的脚步声已经消失在走廊尽头,而她的手机——她说她爸的人查到壳公司地址的时候——那架飞往深圳的航班是明天下午。

从深圳到合肥,高铁只要三小时。

陈默看了一眼电量:73%。

他又看了一眼手机:没有新消息。

他把 `raiseguard` 的最后一个验证跑完——加载整个神码 AI 核心运行时,激活 `RaiseImporter`,执行全部边界测试用例。

屏幕输出:

```

╭─────────────────────────────────────╮

│  RaiseGuard 全局验证报告             │

├─────────────────────────────────────┤

│  Python 模块扫描: 127               │

│  修复函数: 412                      │

│  C 扩展模块检查: 23                 │

│  可监控接口: 89                     │

│  C 内部不可达: 13 (已标记)          │

│  遗漏率: 0.3%                       │

│  状态: ████████████▉ 99.7%          │

╰─────────────────────────────────────╯

```

99.7%。

四百一十二个 `except: pass` 被修复。

还有十三个无法触及的 C 扩展内部路径。

陈默关掉终端。把 `raiseguard` 的 `.so` 文件复制到三块不同型号的 U 盘里,又从不同的端口上传到三个海外网盘。分散存储。

然后他靠在椅背上,闭上眼。

风扇声。

呼吸声。

走廊——没有脚步声。

没有消息。

他拿起手机,给程思语发了一行:

```

.activate()

已就绪。

```

消息发出去。没有已读回执。

他合上屏幕,把 ThinkPad 抱在胸前,在应急灯的微光里,听着走廊的寂静。

不——不完全是寂静。

远处,某扇铁门轻轻合拢,一声极轻的金属碰撞。

像是有人进了科学岛的主楼。

又像是风。

也可能是猫。

最新文章

随机文章

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