跳到内容
当前位置:首页>下载方法>下载猫 —— 会员体系安全分析与加固方案

下载猫 —— 会员体系安全分析与加固方案

  • 2026-10-12 07:01:10
下载猫 —— 会员体系安全分析与加固方案

文档性质:授权安全测试报告 

测试对象:下载猫

客户端测试版本:25.10.21(app.asar 内 package.json 字段)与 25.10.20

测试环境:Windows 11,本地无网络攻击者,纯客户端侧

测试日期:2026-10-11


0. 摘要

下载猫的会员验证体系完全失效,破解不需要任何工具链、不需要写代码、不需要改文件。

已验证的成功攻击路径:攻击者启动软件时加一个参数 --remote-debugging-port=9222,然后用 3 行 JavaScript 即可将会员状态改为"有效期至 2099 年",全部功能闸门放行。等价于普通用户按 F12 打开控制台输入 3 行代码,全程不到 10 秒。

项目
结论
破解难度
⭐ 极低(会按 F12 即可,无需任何破解工具)
是否修改文件
否(重启软件自动恢复)
是否需要服务器
否
是否影响其他用户
单人即可完成,可复制分发
修复所需工作量
架构改造 2~3 人日 + 发版

根因:会员状态(is_vip)的真值由服务端下发后,在客户端以无签名、无校验、可自由改写的普通 JS 对象形式存在,并且客户端所有权限闸门都读取这个本地值。

本次测试同时发现一个比破解会员更严重的资产泄露风险:用户令牌明文存放于本地,可跨设备直接登录他人账号(详见第 4 章)。


1. 技术架构分析

1.1 应用形态

下载猫是基于 Electron 的桌面应用:

下载猫.exe (204 MB, NotSigned)
└── resources/
    ├── app.asar (47 MB)                          ← 应用主包
    │   ├── package.json           main: dist/main/index.js
    │   ├── dist/main/index.js     require("bytenode");require("./index.jsc")
    │   ├── dist/preload/index.js  require("bytenode");require("./index.jsc")
    │   ├── dist/renderer/index-BmpfR5aQ.js (8.2 MB, 明文)   ← Vite 产物
    │   └── node_modules/          sharp, puppeteer, bytenode...
    ├── app-update.yml             provider: generic, cdn.xiaofany.com
    └── elevate.exe

主程序未做代码签名(Status: NotSigned),意味着中间人可随意替换发布包。

1.2 代码保护现状(关键)

这是整个安全分析中最重要的一张表:

模块
保护方式
有效性
dist/main/index.jscBytenode
(V8 字节码编译)
⚠️ 中。阻挡静态阅读,不阻挡运行时观测
dist/preload/index.jscBytenode
⚠️ 中。同上
dist/renderer/*.js无保护,明文
❌ 完全失效

致命点:开发团队用 bytenode 保护了 main 和 preload,但真正承载会员判断逻辑的 renderer 是完全明文的 8.2 MB 明文 JavaScript。

会员逻辑全部位于 renderer:

  • 用户状态管理(is_vip)
  • 会员到期时间展示
  • 所有解析功能的权限闸门
  • 充值入口、卡密充值交互

攻击者根本不需要碰 bytenode。直接读 dist/renderer/index-*.js 即可看懂全部逻辑 —— 本次分析的全部结论均来自阅读此文件,未做任何反编译。

1.3 会员体系数据流

                   ┌──────────────────────────────────────────┐
                   │  https://ht.xxx.com/api/v1           │
                   └───────────────┬──────────────────────────┘
                                   │
              GET /user  ──────────┤  响应体 data 字段为密文
              POST /login          │
              POST /user/activation-key
                                   ▼
┌──────────────────────────────────────────────────────────────────┐
│  Renderer (明文, 无保护)                                          │
│                                                                  │
│  1. axios 实例:                                                   │
│     QGe = create({baseURL:"https://ht.xxx.com/api/v1"})     │
│     QGe.interceptors.request → 注入 Bearer Token                 │
│                                                                  │
│  2. 响应拦截器:                                                   │
│     t.data.data = JSON.parse(window.decryptString(t.data.data))   │
│                       └──────────┬─────────────┘                  │
│                                  │  ← 解密函数挂在 window 全局!  │
│  3. User Store (pinia):                                          │
│     GB=Kte("user",()=>{                                          │
│       t={id:0,...,is_vip:!1}     ← 默认值                        │
│       n=xc(t)                   ← 普通响应式对象                 │
│       s=()=>n.is_vip             ← isVip() 只读这个属性          │
│       c=async()=>{Object.assign(n,p.data)}  ← 直接整体赋值       │
│     })                                                           │
│                                                                  │
│  4. 权限闸门(全部业务共用):                                      │
│     jre=()=>{if(!GB().isVip())throw new Fhn}                     │
└──────────────────────────────────────────────────────────────────┘
                                   │
                     [Token 存于 localStorage,明文]

1.4 关键代码摘录

以下均出自 dist/renderer/index-*.js(明文,未混淆):

// ---- 1. Token 注入请求头 ----
QGe=t0.create({baseURL:"https://ht.xunwenkj.com/api/v1",timeout:1e4});
QGe.interceptors.request.use(t=>{
const n=_ye();
return n&&(t.headers.Authorization=`Bearer ${n}`),t
});

// ---- 2. 解密挂在 window 全局(致命点)----
QGe.interceptors.response.use(t=>{
const{code:n,message:i}=t.data;
if(n!==200)return su.error(t.data.message),n===401&&(UTt(),GB().logout()),
Promise.reject(newError(i));
if(t.data.data){
if(!window.decryptString)
return su.error("数据获取失败"),Promise.reject(newError("数据获取失败"));
    t.data.data=JSON.parse(window.decryptString(t.data.data))  // ← 全局可覆盖
  }
return t.data
});

// ---- 3. 用户状态:is_vip 是普通布尔属性 ----
const GB=Kte("user",()=>{
const t={id:0,name:"",email:"",created_at:"",
vip_expired_at:null,profile_photo_url:"",is_vip:!1},
        n=xc(t),i=Qt(!1);
  setInterval(()=>{i.value&&c()},1e3*60*10);   // ← 10 分钟轮询
const s=()=>n.is_vip,                         // ← isVip() 就读它
        l=async p=>{const d=await aKr(p);YHr(d.data.token)},
        c=async()=>{const p=await lKr();
return i.value=!0,Object.assign(n,p.data),p};  // ← 服务端数据整体赋值
return{userInfo:n,userInfoLoaded:i,isVip:s,login:l,getUserInfo:c,
logout:()=>{UTt(),u(),oKr(),location.reload()}}
});

// ---- 4. 所有解析功能的统一闸门 ----
jre=()=>{if(!GB().isVip())thrownew Fhn}

2. 复现:攻击路径实测

本节所有操作均在授权环境下于开发者本机完成,未影响任何第三方。

2.1 攻击入口:Electron 调试端口

Electron 默认支持命令行参数 --remote-debugging-port,开启后 renderer 的 DevTools 协议暴露在 127.0.0.1。该参数不需要任何补丁或越权,任何人都能在启动自己电脑上的软件时加上它:

下载猫.exe --remote-debugging-port=9222

随后通过 CDP(Chrome DevTools Protocol)的 Runtime.evaluate 即可在页面全局作用域执行任意 JS。这与按 F12 在 Console 输入代码完全等价,只是可脚本化、无需人工干预。

2.2 攻击脚本

复现脚本已交付:安全验证/verify.js,可反复执行。

// 第 1 步:定位 pinia user store(沿 Vue provides 链表扫描 is_vip 字段)
const FIND = () => {
const prov = document.querySelector('#app').__vue_app__._context.provides;
const seen = newSet(); let hit = null;
  (functionscan(o, d) {
if (d > 6 || !o || typeof o !== 'object' || seen.has(o)) return;
    seen.add(o);
if ('is_vip'in o && 'vip_expired_at'in o) { hit = o; return; }
for (const k ofObject.keys(o)) { try { scan(o[k], d + 1); } catch (e) {} }
  })(prov, 0);
return hit;
};

// 第 2 步:3 行完成破解
const h = FIND();
h.is_vip = true;
h.vip_expired_at = '2099-12-31 23:59:59';

// 第 3 步(防止 10 分钟轮询打回原形):覆盖全局解密函数
window.decryptString = () =>JSON.stringify({
id: h.id, name: h.name, email: h.email, is_vip: true,
vip_expired_at: '2099-12-31 23:59:59'
});

2.3 实测结果

测试账号的会员状态为 **"已过期"**(vip_expired_at = 2025-10-18,测试日 2026-10-11,已过期近一年),排除测试账号放水的可能。

观测项
破解前
破解后
store.is_vipfalsetrue
store.vip_expired_at2025-10-18 00:51:532099-12-31 23:59:59
界面左下角
开通超级会员会员到期时间 2099-12-31 23:59:59
业务闸门 isVip()
falsetrue
(放行)

截图证据(安全验证/result/):

  • 1-破解前.png —— 左下角显示"开通超级会员"
  • 2-破解后.png —— 左下角显示"会员到期时间 2099-12-31 23:59:59",右下角可见版本号 v25.10.21

该攻击在两个版本(25.10.20、25.10.21)上均验证成功,新版未修复。

2.4 为什么轮询打不回来

软件每 10 分钟会重新拉取一次会员状态:

setInterval(()=>{i.value&&c()},1e3*60*10)

轮询链路为:getUserInfo() → GET /user → 响应拦截器 → window.decryptString() → Object.assign(store, data)。

攻击者只需覆盖 window.decryptString 让它返回伪造明文,**即使服务端每次都返回真实的 is_vip:false,客户端拿到的永远是假的 true**。这意味着破解效果可长期稳定维持,不需要常驻进程、不需要改文件、重启软件后重新执行 3 行即可。


3. 攻击面矩阵

#
攻击手法
具体做法
难度
当前防御
有效性
A
CDP/F12 注入
加 --remote-debugging-port 或按 F12,改 is_vip
⭐
无
✅ 已验证
B
覆盖解密函数
window.decryptString = () => 假数据
⭐
无
✅ 已验证
C
改 asar 重打包
解包→删 if(!isVip())throw→重打包
⭐⭐
无完整性校验
✅ 可成立
D
响应体劫持
mitmproxy 改 /user 密文
⭐⭐
无签名
✅ 可成立
E
偷 Token 登录
读取 localStorage 令牌跨机登录
⭐
明文存储
✅ 见第 4 章
F
XSS → RCE
外部脚本注入 + @electron/remote
⭐⭐⭐
CSP 被注释
⚠️ 需配合

A、B、D 三种手法打的是同一个根因:is_vip 这个真值必须经过客户端,而客户端无力辨别它是否被篡改。


4. 附加风险:令牌资产泄露(比会员破解更值钱)

这是本次测试中商业风险最高的发现,因为它直接等价于账号盗取。

4.1 令牌明文存放

Key   : AUTH_TOKEN
Value : "61496|1anUGFaNv5E8YVyBb8SJ6dtcXkXdLt7XHeU4kmNw"
存储  : localStorage(明文,无加密)
格式  : <用户ID>|<令牌>

4.2 风险

  1. 可跨设备登录:拿到该字符串,在任意机器上填入 localStorage 即可完整登录该账号,包含全部会员权益。攻击者无需破解会员,只需获取令牌。

  2. 获取门槛极低:令牌本身是纯文本,可通过任何文件读取途径获得,也可通过社工诱导用户执行一行 JS 读取:

    localStorage.getItem('AUTH_TOKEN')   // 在 F12 控制台执行即可
  3. 可批量收集:令牌中的用户 ID 是连续可猜测的整数格式(本例 19422),如果服务端不做频率限制与设备绑定,存在被遍历的风险。

  4. 无加密保护:localStorage 是纯文本存储,任何具备文件读取能力的程序均可获取。

  5. 软件未做代码签名(Status: NotSigned),攻击者可制作同名应用诱导用户输入账号密码,直接收集明文凭证。

4.3 凭证存储的另一个隐患

登录页代码中存在密码本地存储路径:

localStorage.getItem("auth.password")
localStorage.setItem("auth.password", v)

受 auth.rememberPassword 开关控制。若用户勾选"记住密码",账号密码将以明文形式写入 localStorage,风险等级高于令牌泄露(因为用户很可能在其他站点复用同一密码)。


5. 加固方案

5.1 设计原则

任何藏在客户端的判断都能被绕。唯一解是让客户端不持有真值。

因此加固不是"打补丁",而是调整架构。核心设计:

 [服务端] ──(带签名的令牌)──► [主进程] ──(验签后结果)──► [UI 展示]
                                    └──► [主进程鉴权] ──► [敏感 IPC 执行]

 真值只在服务端
 签名只有主进程能验
 闸门在主进程里

Renderer 拿到的是"看一眼的结果",改它没用 —— 因为真正干活的 IPC 会在主进程二次验签。

5.2 P0 级(必做,堵死 90% 破解)

P0-1 令牌签名 —— 堵死 A / B / D

服务端返回 /user 时附加签名:

data        = { is_vip, vip_expired_at, ts, nonce }
data_signed = HMAC_SHA256(server_secret, JSON.stringify(data))
响应体再包一层 { data, data_signed }

主进程验签(密钥不进 renderer):

ipcMain.handle('entitlement:verify', async (e, payload, sig) => {
const expect = crypto.createHmac('sha256', SERVER_SECRET)
                       .update(JSON.stringify(payload)).digest('hex');
return sig === expect ? payload : { is_vip: false, reason: 'tampered' };
});

P0-2 闸门下放主进程 —— 堵死 C

现状:所有解析入口的闸门 jre() 在 renderer,改掉即可绕过。

改为每个敏感 IPC handler 先过主进程鉴权:

ipcMain.handle('parse:video', async (e, url) => {
const ent = await getVerifiedEntitlement();   // 内部走 P0-1 验签
if (!ent.is_vip) thrownewError('NEED_VIP');
return doParse(url);
});

Renderer 的 isVip() 只用于 UI 按钮置灰,绝不用于权限裁决。 这样即使攻击者把界面刷成全绿,主进程这一关照断。

P0-3 下线 window.decryptString —— 堵死 B

这是当前最脆弱的一环。二选一:

  • 推荐:解密完全移到主进程 HTTP 层,renderer 收到的直接是明文对象,密钥不进渲染进程。
  • 若必须 renderer 解密:改为 contextBridge 暴露 + 每次调用向主进程取一次性 nonce,且主进程对密文做 HMAC 长度校验。

密钥绝不能出现在 renderer 的任何位置。

5.3 P1 级(必做,堵住资产泄露)

P1-1 asar 完整性校验 —— 堵死 C

const expected = '编译时注入的 app.asar sha256';
const actual = crypto.createHash('sha256')
                     .update(fs.readFileSync(appAsarPath)).digest('hex');
if (actual !== expected) { app.exit(1); }

注意:这只能挡住"改 asar 后不重新签名"的破解,挡不住内存 hook,但能把门槛从"改几行代码"提升到"需要绕过校验"。

P1-2 令牌加密存储 —— 堵死 E

const safe = require('electron').safeStorage;
const enc = safe.encryptString(token);   // 使用系统 DPAPI
fs.writeFileSync(tokenPath, enc);
// 处理 safeStorage.isEncryptionAvailable() === false 的环境

同时:

  • 移除明文密码存储路径(auth.password 相关代码全部删除)
  • Token 加设备绑定 + 短时效,服务端校验 device_id
  • Token 不用 localStorage,改用主进程 safeStorage + 文件,renderer 通过 IPC 取用且不落 JS 变量

P1-3 代码签名

主程序与安装包进行 Authenticode 签名。当前 Status: NotSigned 意味着任意替换难以被发现。签名后可在 P1-1 的校验基础上形成"发布链路可信 + 运行时完整"的双重保障。

5.4 P2 级(纵深防御)

P2-1 收紧 Electron 配置

webPreferences: {
contextIsolation: true,      // 必须
nodeIntegration: false,      // 必须
sandbox: true,
webSecurity: true,
webviewTag: false,
preload: path.join(__dirname, '../preload/index.js')
}

恢复 index.html 中被注释的 CSP:

<metahttp-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self'; object-src 'none';">

评估移除 @electron/remote(高危模块,可被替换为显式 IPC 白名单)。

P2-2 服务端侧加固

客户端加固永远是对抗性博弈,真正的防线在服务端:

  • 所有下载/解析能力由服务端按用户等级限流与鉴权,客户端只做展示。这样即使本地被破解,也无法白嫖服务端算力(成本可量化)
  • Token 绑定设备指纹,异常设备登录强制二次验证
  • 接口加频率限制与风控,检测异常调用模式
  • 考虑为高价值接口增加请求签名(时间戳 + nonce + HMAC)

6. 实施路线图

阶段
内容
工作量
效果
第一阶段
P0-1 + P0-2(令牌签名 + 闸门下放)
2~3 人日
从架构上让"改本地 JS"这类攻击整体失效
第二阶段
P0-3 + P1-2(下线全局解密 + 令牌加密)
1~2 人日
堵死 F12 控制台与令牌泄露
第三阶段
P1-1 + P1-3(asar 校验 + 代码签名)
1 人日
挡住改包重打包
第四阶段
P2-1 + P2-2(Electron 配置 + 服务端)
持续
纵深防御与成本控制

必须先确认的前提

服务端是否有改造权限,决定 P0-1 能做到多彻底。

若服务端暂不能改,可采取的过渡方案:

  • 客户端侧用主进程持有的应用密钥对会员态做本地签名校验(可挡住普通改值,挡不住逆向提取密钥)
  • 接受"门槛从按 F12 提升到需要逆向"的现实,优先把 P1-2(令牌加密)先做掉,因为令牌泄露的风险等级高于会员破解

7. 验收清单

加固完成后,需逐项回归验证:

  • [ ] node 安全验证/verify.js 输出"未成功"
  • [ ] F12 控制台手动执行 store.is_vip = true 无效
  • [ ] F12 控制台覆盖 window.decryptString 无效
  • [ ] 修改 app.asar 后启动,软件拒绝运行
  • [ ] localStorage 中不再出现明文 token 与密码
  • [ ] 用抓包工具篡改 /user 响应,功能被正确拒绝
  • [ ] 越权 IPC 调用(未登录状态直接 invoke 敏感接口)被主进程拒绝
  • [ ] DevTools 打开 renderer 无法访问 Node API

8. 附录

8.1 复现脚本使用说明

# 全自动:启动软件 + 注入 + 截图 + 判定
node 安全验证/verify.js

# 软件已在运行时
node 安全验证/verify.js --no-launch

# 端口冲突 / 路径异常
CDP_PORT=9231 node 安全验证/verify.js
APP_EXE=C:\完整路径\下载猫.exe node 安全验证/verify.js

截图输出至 安全验证/result/。脚本不修改任何文件,重启软件后完全恢复原状。

8.2 版本说明

本次分析期间软件通过 electron-updater 自动从 25.10.20 更新至 25.10.21。两个版本均执行了完整测试,漏洞在两者中同样存在,新版本未做任何针对性修复。

8.3 测试边界说明

  • 全部测试在开发者本机完成,未对生产服务发起攻击
  • 未测试服务端接口本身的鉴权强度(本次仅从客户端视角分析)
  • 未对主程序做逆向破解 bytenode 保护(无必要,明文 renderer 已足够定位逻辑)
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-10-12 07:01:16 HTTP/1.1 GET : http://yeyulingfeng.com/a/494854.html
  2. 运行时间 : 0.067988s [ 吞吐率:14.71req/s ] 内存消耗:4,427.41kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=965d30256395444a0b791d0417437e96
  1. /www/wwwroot/yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /www/wwwroot/yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /www/wwwroot/yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /www/wwwroot/yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /www/wwwroot/yeyulingfeng.com/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /www/wwwroot/yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /www/wwwroot/yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /www/wwwroot/yeyulingfeng.com/app/provider.php ( 0.19 KB )
  23. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /www/wwwroot/yeyulingfeng.com/app/common.php ( 0.03 KB )
  27. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /www/wwwroot/yeyulingfeng.com/config/app.php ( 0.95 KB )
  30. /www/wwwroot/yeyulingfeng.com/config/cache.php ( 0.78 KB )
  31. /www/wwwroot/yeyulingfeng.com/config/console.php ( 0.23 KB )
  32. /www/wwwroot/yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  33. /www/wwwroot/yeyulingfeng.com/config/database.php ( 2.50 KB )
  34. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  36. /www/wwwroot/yeyulingfeng.com/config/lang.php ( 0.91 KB )
  37. /www/wwwroot/yeyulingfeng.com/config/log.php ( 1.35 KB )
  38. /www/wwwroot/yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  39. /www/wwwroot/yeyulingfeng.com/config/route.php ( 1.89 KB )
  40. /www/wwwroot/yeyulingfeng.com/config/session.php ( 0.57 KB )
  41. /www/wwwroot/yeyulingfeng.com/config/trace.php ( 0.34 KB )
  42. /www/wwwroot/yeyulingfeng.com/config/view.php ( 0.82 KB )
  43. /www/wwwroot/yeyulingfeng.com/app/event.php ( 0.25 KB )
  44. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /www/wwwroot/yeyulingfeng.com/app/service.php ( 0.13 KB )
  46. /www/wwwroot/yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  47. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /www/wwwroot/yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  53. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /www/wwwroot/yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /www/wwwroot/yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /www/wwwroot/yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /www/wwwroot/yeyulingfeng.com/app/Request.php ( 0.09 KB )
  84. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /www/wwwroot/yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  86. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /www/wwwroot/yeyulingfeng.com/route/app.php ( 1.72 KB )
  100. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /www/wwwroot/yeyulingfeng.com/app/controller/Index.php ( 5.22 KB )
  104. /www/wwwroot/yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  105. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /www/wwwroot/yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /www/wwwroot/yeyulingfeng.com/runtime/temp/44b959ca79ad33496f044db2c231b11d.php ( 8.29 KB )
  140. /www/wwwroot/yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000693s ] mysql:host=172.18.0.4;port=3306;dbname=no_yeyulingfeng;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000789s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000335s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000533s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000842s ]
  6. SELECT * FROM `set` [ RunTime:0.000305s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000734s ]
  8. SELECT * FROM `article` WHERE `id` = 494854 LIMIT 1 [ RunTime:0.000448s ]
  9. UPDATE `article` SET `lasttime` = 1791759676 WHERE `id` = 494854 [ RunTime:0.001624s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000327s ]
  11. SELECT * FROM `article` WHERE `id` < 494854 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000443s ]
  12. SELECT * FROM `article` WHERE `id` > 494854 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000389s ]
  13. SELECT * FROM `article` WHERE `id` < 494854 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000465s ]
  14. SELECT * FROM `article` WHERE `id` < 494854 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000679s ]
  15. SELECT * FROM `article` WHERE `id` < 494854 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000628s ]
0.076966s