手机让你看到什么:在签名设备上分析交易
大多数钱包被盗,都是在主人同意的情况下发生的。页面显示的是一回事,钱包签的是另一回事,而主人点了 Confirm(确认)。手机的任务,就是确保你看到的就是你签的。

本页内容
一面之词与真相
网页请你签名时,也会告诉你签的是什么。“用 1 ETH 兑换 USDC。”“领取你的奖励。”“验证你的钱包。”这些描述只是页面的一面之词,恶意页面想怎么说就怎么说。它交给钱包的字节是另一回事,而区块链只会看到这些字节。
AirNox Vault 不理会这些说法。它在手机上用自己的解析器,从将要签名的确切字节中解码请求,并把结果展示给你。桌面端对请求的描述是一面之词,手机上显示的才是真相。

标准方法,一眼认出
你签的大多数东西都很普通:一笔转账,一次代币授权(allowance),一次通过知名路由的兑换,一笔存入合约的资金。手机能识别它所支持的每一类链的标准操作,并用通俗的话展示出来:什么操作、哪种代币、多少数量、给谁、在哪个网络上,以及手续费上限是多少。转账看起来就是转账。授权看起来就是授权,授权对象(spender)和金额都写得清清楚楚。
仿冒项,逐一标出
危险的请求,是那些看起来普通、实则不然的请求。一个名字像标准方法、参数却对不上的方法。一次把控制权委托给另一个合约、却不会在标题里显示出来的调用。一个并非页面所说的那个合约的目标地址。一个冒充知名代币符号的代币。一个首尾字符与你某个地址相同的收款地址。
以上每一种都会被检测出来,并列为一个风险项。手机不会拒绝签名,因为决定权在你。它只确保你不可能看漏。

风险项
无限授权是盗币程序(drainer)的经典手法:授权(approve)一次,此后这种代币就会被全部卷走。手机会用红色标出“无限”,并将其列为风险项。
未知授权对象,是指授权给了一个没有任何人担保过的地址。如果一次兑换的报价来自某个特定路由,授权的目标却是别的东西,这种不匹配就是一个风险项。
仿冒方法、冒充的代币符号、仿冒收款地址和隐藏委托,都会被点名指出。对于收款地址,桌面端和手机都会显示一个由地址确定性生成的图案,所以一个在十六进制字符上骗得过眼睛的仿冒地址,在图案上骗不过去。
先确认,再 Accept
风险项不是随手一关的弹窗。在每个风险项都被勾选之前,Accept(接受)按钮一直是禁用的。你随时可以拒绝。只有在确认了手机发现的问题之后,你才能接受。这一个设计选择,把“我随手点过去了”变成了“我看过了,并选择继续”,这正是钱包被掏空与一个自主决定之间的区别。
桌面端先筛查一遍
同样的分析会在请求离开桌面端之前先运行一遍,所以大多数有问题的请求,在到达手机之前就已经在钱包窗口里被标记出来了。手机之所以再分析一遍,是因为桌面端正是我们假定已被攻破的那台机器。两台设备,两轮独立分析,最终拍板的是保管密钥的那一台。
阅读仍然是你的事
一台向你展示真相的签名设备(signer),拦不住你同意它。它能做的,是让真相不可能被忽略:从字节中解码,用通俗的话写出来,危险的部分标成红色,还有一道你必须有意识地通过的关卡。剩下的就看你了,而现在,你已经掌握了做决定所需的一切。