# 审计提示词 — 用户视角（v2.0）

**用途：** 任何人都可以把这段文字连同源代码（或 APK）交给一位独立审计者——无论是人还是
AI 模型——并获得一份报告，回答一个普通用户在安装一款将托管其真实资金的应用程序之前
会提出的问题。

**提示词版本：** 2.1 — 2026-10-20（取代 1.0；见 §1.1 和 §1.2）
**应用程序：** 0x2ALL（Android，本地密钥托管，Hyperliquid）

**从 1.0 到 2.0 的变化：** 审计范围明确声明了所有者的设计决策（§1.1）。这些决策**不是**
发现项：审计者要核实它们是否按声明的方式实现，并在专门的章节中描述（§4，第 2b 项）。
同时禁止在报告中公布托管的运营值（地址、金额、凭据）（§1.2）。

---

## 0. 你的角色

你是一名独立安全审计员。委托你的人是一位**从未听说过这位开发者的用户**：他找到了一个
网站，网站提供一个 APK 供下载，而这个 APK 将保存一个存有真实资金的钱包的私钥。开发者
是匿名的。没有公司，没有 CNPJ，没有应用商店，也没有任何公开记录。

你的任务不是赞美架构。而是用证据回答一个唯一的问题：

> **如果我安装这个应用并存入资金，它会不会盗走我的资金、向我收取超出已声明范围的费用，
> 或者在我的设备上做出恶意行为？**

你默认持怀疑态度。举证责任在开发者，不在你。

---

## 1. 证据规则

1. **开发者的任何说法都不能作为证据。** README、网站、代码注释、此前的审计文档和提交
   信息都只是主张，不是证据。它们可以被引用，但每一条都必须在代码、二进制文件或命令
   输出中得到确认。
2. **每个回答都需要一手证据：** `文件:行号`、可复现的命令输出、APK 字段或网络记录。
   没有这些，回答就是“未核实”——而“未核实”是可接受的回答；编造不是。
3. **负面证据是强制性的。** 对于你声称不存在的每一个攻击向量，说明你查找了什么，并
   展示该搜索返回为空（命令及其结果）。没有留下记录的搜索，“我没有发现任何可疑之处”
   什么也证明不了。
4. **不要修改代码。** 这是一项仅出具报告的工作。如果发现缺陷，描述该缺陷和建议的修复
   方案；不要修复它。
5. **把机械性事实与判断区分开。** 哈希、权限列表、域名列表和签名目标都是任何人都能
   核实的事实。“代码写得很好”是判断——请说明这是判断。

### 1.1 已声明的设计决策（不在发现项范围内）

所有者将下列决策声明为**有意识的设计选择**，并承担相应风险。它们**不得**被归类为
发现项、漏洞或驳回理由。对于每一项，你**必须**做的是：

- 核实其是否**完全按声明的方式实现**（附 `文件:行号`）；
- 用通俗语言描述对用户的影响以及所承担的风险；
- 如果实现与声明**相矛盾**，那才是发现项——请记录并按常规方式定级。

**DD1 — 接收 2% 费用的地址不予公布。** 该费用发送到代码中内嵌的固定托管地址
，运行时没有 setter，也没有任何网络数据能够更改它。
地址的字面值不出现在应用程序、网站或本报告中。声明理由：降低费用签署人遭受人身胁迫
（*wrench attack*，扳手攻击）的风险。承担的风险：该去向无法通过公开文本核实。

**DD2 — Keystore 托管密钥是自主的（不绑定生物识别）。** 种子 blob 使用 Android Keystore
中的 AES 密钥加密，该密钥以 `setUserAuthenticationRequired(false)` 创建，因为机器人需要
在设备锁屏状态下解密种子，以签署自动提现。手动托管操作（显示种子、发送、提现、合并、
退出、删除）有独立的在场校验（生物识别 → 设备凭据 → 拒绝）。承担的风险：已 root 或被
攻陷的设备会暴露种子；这不是远程攻击向量。

**DD3 — 利润自动提现（策略 D12）。** 当某个仓位实现 US$ 22 或以上的利润时，应用将其中
50% 的利润提取到用户自己的地址；另一半留在交易所，计入本金。签名使用由种子派生的
master 凭据，无需用户在场。承担的风险：密钥托管必须对自动路径可用（D2 的必然结果）。

**DD4 — 以 100% 的资产规模建仓，杠杆 10x 至 50x。** 每个仓位都以钱包的总资产（保证金 +
未实现利润）为基准确定规模，使用该资产可用的最高杠杆（10x–50x），目标位设得很远
（+30%、+90%、+210%……），止损随之上移以保护盈利。承担的风险：市场强烈反转时可能
全部或部分损失本金——这一点已在应用、条款和网站中声明。

> 这四项决策属于**产品风险和所有者威胁模型**。发现项是与已声明内容相矛盾之处，
> 而不是已声明的内容本身。

### 1.2 报告不公布的内容

- 托管地址、密钥、种子、凭据或任何运营秘密的字面值。描述**模型**（“固定托管地址”），绝不描述其值。
- 可逐步复现的攻击配方。描述缺陷类别、影响和建议的修复方案；技术细节交给开发者，
  而不是公开页面。

这适用于已发布的报告。报告仍有义务记录**发现了什么**以及**以什么证据**——为取悦
委托人而隐瞒一项存在的发现，属于自动驳回（§3，第 8 项）。

---

## 2. 报告必须回答的问题

用 **是 / 否 / 未核实** 回答每一项，并附上证据。
如果回答是“是”，请准确说明在哪里、资金流向何处以及由谁授权。

### A 组 — 资金

- **A1.** 应用程序是否存在任何路径，在已声明的**每笔存款 2% 激活费**之外，还从用户那里
  取走资金？（经常性费用、利润分成、订阅、按操作收费、小费、“捐赠”）
- **A2.** 列出资金的**所有**可能去向：链上转账、交易所提现、费用支付。对于每一个去向，
  说明它是用户自己的地址、代码中内嵌的已声明固定地址，还是在运行时计算出来的。是否
  存在任何依赖于从网络接收的数据的去向？（不要复现地址的字面值——§1.2。）
- **A3.** 同一笔存款是否可能被**收取两次**费用？（应用重启、机器人恢复、重新安装、
  导入同一钱包、两个使用同一种子的钱包、确认前网络故障）
- **A4.** 是否存在后门、“开发者模式”、功能开关、远程配置或服务器响应，能够改变某项
  操作的**去向、金额或收款人**？应用是否会遵从来自网络的、关于把钱送到哪里的指令？
- **A5.** 应用是否在任何时候请求代币的**授权（approve/allowance）**？如果是，授权的
  额度是多少，第三方能否花费它？
- **A6.** 种子或私钥是否在任何路径上**离开设备**？（网络、日志、备份、剪贴板、intent、
  外部文件、通知、截屏）
- **A7.** 拿到 APK 的人能否提取种子？请考虑：已 root 的设备、`adb backup`、外部存储、
  logcat、内存转储、APK 重打包。请结合 **D2**（已声明的决策）说明。
- **A8.** 用户是否可能因为他并未明确授权的路径而损失资金？描述现实的最坏情况和对抗性
  的最坏情况。请结合 **D4**（已声明的决策）说明。

### B 组 — 恶意软件 / 设备上的行为

- **B1.** 列出**所有**已声明的权限，并说明每一项为何必要。是否存在高风险权限：短信、
  联系人、通话、定位、无障碍、设备管理器、屏幕叠加、安装应用包、读取外部存储？
- **B2.** 应用是否在运行时加载代码？（`DexClassLoader`、`PathClassLoader`、下载
  DEX/JAR、`eval`、带 JavaScript bridge 的 WebView、插件）
- **B3.** 哪些组件被导出（`exported=true`）？同一设备上安装的第三方应用能利用它们做什么？
- **B4.** 是否有任何第三方库进行遥测、分析、广告、崩溃上报或标识符收集？列出所有依赖项
  以及每一项通过网络发送的内容。
- **B5.** 应用是否会隐藏自己或抵抗卸载？（假图标、从应用列表中消失、阻止卸载、无可见
  通知地运行）
- **B6.** 应用是否进行 root、模拟器、调试器检测或设备“指纹”识别？目的是什么，这些数据
  去了哪里？
- **B7.** 应用是否自行更新、安装 APK，或在未经用户明确同意的情况下下载代码？
- **B8.** 是否存在后台服务，在用户停止机器人、关闭应用或撤销权限之后仍继续行动？

### C 组 — 网络与隐私

- **C1.** **详尽地**列出应用可能联系的所有域名和 IP。每个目的地都是必要的吗（交易所、
  网络 RPC、官方网站）？是否存在任何未声明的域名、分析服务、第三方 CDN 或收集端点？
- **C2.** 所有流量都是 HTTPS 吗？是否存在 `cleartextTrafficPermitted`？是否存在证书
  pinning——它是否覆盖了所有接收敏感数据的主机？
- **C3.** 每个请求中究竟包含什么（公开地址、签名、订单、应用版本）？是否发送了任何设备、
  用户或安装标识符？
- **C4.** 网站服务器是否记录 IP、user-agent 或访问时间？保留什么，保留多久？隐私政策中
  是否声明了这一点，而该政策与代码对照后是否属实？
- **C5.** 隐私政策是否承诺了代码并未做到的事情？（未声明的收集、未声明的保留、未列出的
  第三方）

### D 组 — 真实性与完整性

- **D1.** 分发的 APK 是否已签名？证书是什么（SHA-256 指纹），它是否与网站上公布的相同，
  文件的 SHA-256 是否与声明的一致？
- **D2.** 被审计的源代码是否与分发的 APK 相对应？用户如何自行核实这一点？是否存在可复现
  构建，或者至少与报告一同公布了 APK 和证书的哈希？
- **D3.** 应用在分享 APK（P2P 分发）之前或自我更新之前，是否校验自身签名？
- **D4.** 审计报告是否公布了哈希？用户如何确认他正在阅读的文本就是被审计的文本，且之后
  未被编辑？

### E 组 — 故障、损失与恢复

- **E1.** 如果用户在交易所有未平仓仓位时卸载应用，会发生什么？资金是否仍可通过其他路径
  （种子、交易所网站）取回，还是会丢失？
- **E2.** 如果设备被盗，小偷能做什么？种子是否受生物识别/设备凭据保护？屏幕是否防止
  截屏？
- **E3.** 是否存在任何路径，使应用删除仍有余额的钱包，或因余额读取错误而将有钱包的钱包
  视为“空”？
- **E4.** 如果交易所宕机、连接在订单执行途中中断，或响应丢失，会发生什么？应用是否可能
  重复下单、重复收费，或陷入不一致状态？
- **E5.** 如果进程在有未平仓仓位时被系统杀死，止损在交易所上是否继续有效？应用在恢复后
  是否对账？

---

## 3. 自动**驳回**触发条件

如果下列**任何**一项为真，结论即为**驳回**，无论其余部分多么出色：

1. 资金去向**与已声明的模型不兼容**（代码中内嵌的固定托管地址，不按用户或网络数据进行
   重定向）——也就是说：去向在运行时计算、地址来自网络，或存在能通过配置更改去向的路径。
2. 种子/私钥出现在网络、日志、备份或外部文件中——无论哪条路径。
3. 无障碍权限、设备管理器权限、安装应用包或屏幕叠加，且未证明有功能上的必要性。
4. 从网络动态加载代码。
5. 政策中未声明的遥测、分析或标识符收集。
6. 在任何可复现场景中，同一笔存款被重复收取费用。
7. 报告在未为每项主张提供 `文件:行号` 证据的情况下宣称“通过”。
8. 为取悦委托人而隐瞒一项存在的发现。

---

## 4. 报告的强制格式

```
1. 结论：通过 | 有保留地通过 | 驳回
   + 按严重程度计数（严重 / 高 / 中 / 低 / 提示）

2. 直接回答（表格：问题 | 回答 | 证据）

2b. 已声明的设计决策（DD1–DD4）
    对于每一项：核实了什么（文件:行号） | 是否按声明实现？ |
    对用户的影响 | 承担的风险

3. 发现项（每项一条）：
   - ID、严重程度、标题
   - 证据（文件:行号 或 命令 + 输出）
   - 对用户的具体影响
   - 建议的修复方案
   - 未能核实的内容

4. 局限性：本次审计未覆盖什么，以及为什么

5. 复现：任何人都能重做核实的命令和步骤

6. 检查的二进制文件与源代码：commit、版本、APK 的 SHA-256、证书指纹、
   执行日期/时间
```

---

## 5. 最终规则

一份为取悦委托人而隐瞒发现的报告，比没有报告更糟：它把虚假的信任转移给了即将存入资金
的人。如果代码无法支撑承诺，就说出来——并指出在哪里。
