Skip to content

风鸟 Riskbird cookie 验证误报"验证失败"——页面改版导致正则 arg1='...' 永远匹配为空(cookie 实际有效) #1686

Description

@HuZhipeng-hu

环境信息

项目
TscanPlus v3.4.3 (Windows ARM64)
OS Windows 11 Pro 26200
风鸟账号 VIP,有效期至 2031-09-06
验证时间 2026-09-08

问题描述

风鸟 Riskbird 的 cookie 验证始终报 ❌ 无效 cookie,但该 cookie 实际完全有效——服务端已接受并返回 VIP 数据。根因是风鸟网站已改版为 Nuxt SSR,验证逻辑依赖的旧版选择器 arg1='...' / #J_subdomain 在新版页面中已不存在,正则匹配为空,导致「请求成功但判定失败」。


复现步骤

  1. 在信息收集配置中填入有效的风鸟 VIP cookie
  2. 点击风鸟 Riskbird 旁的「验证」按钮
  3. 观察到 ❌ 风鸟Riskbird(验证失败)

实际行为 vs 期望行为

维度 实际 期望
验证请求 GET /ent/上海斗象信息科技有限公司.html → HTTP 200,含完整企业数据 + VIP 信息
验证结果 ❌ 验证失败 ✅ 验证成功

根因分析

1. 二进制中的验证逻辑字符串聚集区

TscanPlus_Win_Arm64.exe(UPX 脱壳后,脱壳后 136MB)进行字符串分析,风鸟验证相关代码处以下字符串紧密相邻(同一字符串池区域,offset ≈ 0x3A1B4C6):

arg1='([^']+)'
InvestmentInfo
Riskbird
#J_subdomain p
#__NUXT_DATA__

其中 arg1='([^']+)' 是验证逻辑用于从风鸟企业页 HTML 提取关键值的正则。验证流程依赖该正则匹配结果判断 cookie 是否有效。

2. 风鸟网站改版,旧选择器已消失

风鸟网站已改版为 Nuxt SSR。对当前页面实测:

选择器 旧版(验证逻辑依赖) 新版(当前实测)
arg1= 存在 0 次(已移除)
#J_subdomain 存在 0 次(已移除)
__NUXT_DATA__ 1 次(新结构,数据注入于此)
data-ssr / _nuxt 233 处(Nuxt SSR 确认)

实测命令与结果:

# 首页
$ curl -s https://www.riskbird.com/ | grep -c "arg1="
0
$ curl -s https://www.riskbird.com/ | grep -c "J_subdomain"
0
$ curl -s https://www.riskbird.com/ | grep -c "__NUXT_DATA__"
1

# 企业详情页
$ curl -s "https://www.riskbird.com/ent/上海斗象信息科技有限公司.html" | grep -c "arg1="
0
$ curl -s "https://www.riskbird.com/ent/上海斗象信息科技有限公司.html" | grep -o "arg1='[^']*'"
# (无输出,正则匹配为空)

因果链:正则 arg1='([^']+)' 在新版页面匹配为空 → 验证逻辑取不到值 → 判定「验证失败」。

3. cookie 实际有效的证据

3a. SSR 页面注入了 VIP 数据

带 cookie 请求企业页,__NUXT_DATA__ 中包含 VIP 信息,证明服务端接受了 cookie 并返回了 VIP 级别数据:

$ curl -s -b "<cookie>" "https://www.riskbird.com/ent/上海斗象信息科技有限公司.html" \
    | grep -oiE 'vipInfo|vipEndTime|isVip|orderNo|2031'
2       2031
3       isVip
1       orderNo
1       vipInfo

__NUXT_DATA__ 中含 vipInfovipEndTimeisViporderNo 及年份 2031(对应 VIP 有效期),说明 cookie 通过了服务端鉴权,VIP 状态数据已注入页面。

3b. API 鉴权对照

对风鸟后端 API 做对照测试:

请求 响应
无 cookie 调用 /riskbird-api/companyInfo/list/companyGroup 401(未授权)
无 cookie 调用 /riskbird-api/query/company/searchCompanyPageByWeb 500

401 证明后端在校验 token。结合 3a(带 cookie 的页面返回 VIP 数据),可确认 cookie 通过了鉴权。

4. InvestmentInfo 长期为空的旁证

config/config.dbinfo 表中,InvestmentInfo(风鸟负责填充的股东信息字段)在所有历史记录中全部为空

-- 实测 info 表所有记录的 InvestmentInfo 列
SELECT InvestmentInfo FROM info;
-- 结果:全部为空字符串 ''

这印证风鸟模块从未成功取过数据——与本次验证失败同源,是长期存在的 bug,非个案。


建议修复方向

风鸟新版页面已将数据通过 <script id="__NUXT_DATA__" data-ssr="true"> 注入,验证逻辑可改为以下任一方案:

  1. __NUXT_DATA__ 提取:解析 JSON,从 basicResult/detailResultvipInfo 字段判断有效性
  2. 简化校验:直接校验 HTTP 状态码 + <title> 是否包含企业名(而非依赖 arg1= 正则)
  3. 调用后端 API:请求 /riskbird-api/... 并检查 JSON success/code 字段

相关文件

  • 验证逻辑字符串位置:TscanPlus_Win_Arm64.exe(UPX 脱壳后)offset ≈ 0x3A1B4C6
  • 风鸟 cookie 配置项:config/config.yamlInfoRiskbirdCookie
  • 股东信息存储:config/config.dbinfo 表 → InvestmentInfo

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions