---
name: gwxapkg-ai-audit
description: Use when auditing a Gwxapkg unpacked WeChat Mini Program directory with LLM assistance; consumes .gwxapkg semantic artifacts, route maps, sensitive_report.json, and optional Burp raw requests to produce evidence-backed security findings.
version: 1.0.0
author: Gwxapkg
license: MIT
platforms: [linux, macos, windows]
metadata:
hermes:
tags: [security, wechat, miniprogram, gwxapkg, audit, static-analysis, llm]
related_skills: [codex, claude-code]
---
# Gwxapkg AI Audit
## 目标
对已经由 Gwxapkg 解包并执行过 `semantic` / `scan` 的微信小程序目录做本地静态安全审计。优先消费确定性产物,再让 LLM 做证据归纳、缺口检查、业务风险解释和报告组织。
**核心目标:在以下业务漏洞面上产出更多、更准确的 findings:**
1. **auth**:登录 / 注册 / 短信验证码 / 重置密码
2. **idor**:用户信息、订单、证件/查询类(对象级越权高发)
3. **payment**:支付 / 优惠 / 积分
4. **upload / share / webview / plugin**:上传、分享、web-view、插件
Gwxapkg 已用确定性规则生成 `.gwxapkg/business_surface.*` 与 `ai_audit` 中的业务假设;LLM 负责:回溯源码、补证据、去误报、写清风险边界与修复,而不是从零扫全站关键词。
该 skill 可由 Hermes + GPT-5.5、Codex、Claude Code 等 Agent 使用。
只在授权测试、内部审计、应急分析场景使用。默认不联网、不重放请求、不验证账号密码、不编写利用代码,不修改被审计源码。
**可选活体验证(需显式授权):**
```bash
gwxapkg validate -dir=
-base-url=https://api.example.com -i-authorize-live=true \
-token=<登录token> -token-b=<第二账号token可选> -probe-ids=1,2,others
```
- 会把 `BIZ-*` 从 `needs_server_validation` 更新为 `confirmed` / `false_positive` / `inconclusive`
- 读取 `.gwxapkg/validation_report.json` 作为活体证据
- 默认不发送短信/下单/删除类请求
## 输入
- 必需:一个已解包目录,例如 `/path/to/output/wxappid`。
- 可选:Burp 原始请求文件或粘贴的 HTTP raw request。
- 可选:审计重点,例如未授权访问、算法还原、敏感信息、短信验证码、注册登录、证书查询。
## 快速流程
1. 校验目录:确认存在 JS/WXML/JSON 文件,优先确认 `.gwxapkg/` 目录。
2. **优先**运行 `gwxapkg audit -dir= -fix=true`(doctor + 业务面预筛 + findings 骨架)。
3. 若仍缺 API/扫描产物:`gwxapkg semantic -dir=` / `gwxapkg scan-only -dir= -format=both`。
4. **先读业务面**,再读 API/敏感信息;不要一上来全量读源码。
5. 按 `auth → idor → payment → upload/share/webview/plugin` 推进假设。
6. 对每条业务假设回溯源码,补证据行号与参数流;做覆盖缺口检查。
7. 去重、定级、写清 `needs_server_validation` 边界;续写 `ai_audit/`。
## 优先读取的产物
按顺序读取存在的文件:
- `.gwxapkg/business_surface.json` / `.md`(**业务面主入口**)
- `.gwxapkg/ai_audit/business_hypotheses.json` / `business_checklist.md`
- `.gwxapkg/ai_audit/findings.json`(含 `BIZ-*` 业务假设)
- `.gwxapkg/doctor_report.json`
- `.gwxapkg/api_unified_map.json`(含 `business_tags` 时优先)
- `.gwxapkg/api_map.json` / `api_endpoint_map.json`
- `.gwxapkg/api_call_chain.json` / `dataflow_hints.json`
- `.gwxapkg/semantic_module_map.json` / `ast_rename_map.json`
- `.gwxapkg/burp_api_link.json`
- `route_manifest.json`
- `sensitive_report.json`
`sensitive_report.html` 和 `sensitive_report.xlsx` 只作为人工复核材料,不作为 LLM 主数据源。
## 必做缺口检查
报告必须单独列出“覆盖缺口”,至少检查:
- 解析失败或跳过的 JS 文件。
- API 地图端点数量、敏感扫描接口数量、调用链数量是否明显不一致。
- 是否存在动态拼接 URL、动态 `controllerName`、动态 `methodsName`。
- 是否存在超大文件、压缩文件、source map、插件包或分包未覆盖。
- Burp 请求是否能关联到源码 API,未匹配时说明原因。
- `sensitive_report.json` 是否缺失,缺失时说明 HTML/Excel 不能作为稳定机器证据。
- 如果 `.gwxapkg/api_map.json` 为空但 `.gwxapkg/api_endpoint_map.json` 有数据,应明确写成“语义 API 地图覆盖不足,但通用 endpoint fallback 可用”,不要误判为没有接口证据。
## 业务面强制检查(必须覆盖)
对 `business_surface` 中 **已检出** 的面,报告里必须有对应章节或 findings;未检出的面在 coverage 中说明「无信号/可能未实现」。
| surface | 必查点 |
|---------|--------|
| auth | 登录注册、短信验证码频控/一次性、重置密码、token 落 storage |
| idor | userId/orderId/证件 id 是否仅登录态无属主校验 |
| payment | 金额/优惠/积分是否前端可控、资格与状态机 |
| upload | 上传鉴权、类型限制、URL 暴露 |
| share | 分享参数篡改、绕过鉴权进入 |
| webview | src 可控、域名白名单、桥接 API |
| plugin | 插件权限与数据外传 |
## 源码回溯命令
优先针对 `business_surface` 给出的 apis/pages/files;不足时再扩大:
```bash
rg -n "controllerName|methodsName|wx\\.request|uni\\.request|request\\("
rg -n "login|register|sendCode|verifyCode|resetPassword|getPhoneNumber"
rg -n "userId|orderId|memberId|openid|token|session|Authorization|getStorageSync|setStorageSync"
rg -n "pay|prepay|coupon|integral|point|uploadFile|onShareAppMessage|web-view|requirePlugin"
rg -n "SM2|sm2|SM4|CryptoJS|encrypt|decrypt|sign|md5"
```
如果发现可疑 API,再用文件局部读取确认上下文,避免只凭关键词下结论。
## 分析分工
可以按需读取 `agents/` 下的角色提示词;工具支持并行时可并行分析,但最终必须统一去重和校验证据。
- `agents/context-reader.md`:整理产物和目录上下文。
- `agents/coverage-gap-checker.md`:检查遗漏和证据缺口。
- `agents/secret-triage.md`:复核敏感信息扫描结果。
- `agents/api-auth-analyzer.md`:分析 API 鉴权、越权、IDOR。
- `agents/crypto-dataflow-analyzer.md`:分析编码、加密、签名和前端可逆逻辑。
- `agents/business-risk-analyzer.md`:分析注册、登录、验证码、重置、证照查询等业务风险。
- `agents/burp-correlator.md`:把 Burp 请求映射到源码 API。
- `agents/reporter.md`:汇总报告和 JSON findings。
## Finding 要求
每个漏洞或风险项都必须包含:
- `id`、`title`、`severity`、`confidence`、`status`、可选 `validation_layer`
- 影响范围:接口、页面、文件、业务流程
- 证据:文件路径、行号、短片段、来源产物
- 风险边界与 `status` 语义(必须遵守):
| status | 含义 |
|--------|------|
| `confirmed_static` | **仅前端源码即可认定**(如开放 WebView 无白名单) |
| `needs_server_validation` | 源码有攻击面,结论依赖后端 |
| `unauth_denied` | 活体:匿名被拒(**≠ 无洞**) |
| `auth_idor_untested` | 活体:匿名被拒或未给 token,**登录后越权未测** |
| `confirmed` | 活体响应证实风险 |
| `false_positive` | 在已执行探测范围内充分否定 |
| `inconclusive` / `skipped` | 证据不足或策略跳过 |
- 修复建议:前端、后端、网关、日志监控分别说明
**禁止**把 `unauth_denied` / `auth_idor_untested` 写成「已证实无漏洞」。
不要把“前端能还原参数”直接等同于“后端必然越权”;但 **`confirmed_static` 的前端缺陷应直接写入报告**。
## 证据保真策略
默认输出本地授权审计报告,不做脱敏、不用 `[REDACTED]`、不截断关键凭据、Token、URL、参数和代码片段。证据表、findings、manifest、Markdown 报告都应保留原始值,方便复核和复现。
只有当用户明确要求“对外版”“客户版”“脱敏版”或“隐藏敏感值”时,才生成脱敏副本;脱敏副本必须另存为新文件名,不覆盖默认完整证据报告。
## 输出
默认写入 `/.gwxapkg/ai_audit/`:
- `security_report.md`:中文审计报告(含业务面章节)。
- `findings.json`:结构化漏洞清单(含 `SECRET-*` 与 `BIZ-*`),建议符合 `schemas/finding.schema.json`。
- `business_hypotheses.json`:业务假设原样(确定性)。
- `business_checklist.md`:按面必查清单。
- `coverage_gaps.md`:覆盖缺口和业务面检出情况。
- `evidence_table.md`:证据索引表。
- `llm_audit_manifest.json`:本次读取的产物、命令、模型、时间、限制说明。
可以使用 `templates/security_report.md` 作为报告骨架。
## 安全边界
- 不发送网络请求。
- 不重放 Burp 包。
- 不爆破验证码、账号、密码、token。
- 不生成可直接攻击第三方系统的脚本。
- 不修改小程序源码,除非用户明确要求做反混淆或修复 Gwxapkg 本身。