跳到主要内容
SaferICO SaferICO智能合约安全
对抗式测试——完整攻击手册公开可读

在攻击者动手之前, 先看清自己会怎么被打穿。

扫描器回答的是「这段代码有什么问题」。而你在上线前真正想问的是另一个问题:攻击者究竟能利用什么?这个工具拿扫描产生的发现,试着把它们拼成一条走得通的路径——并且对拼出的每一条都说清楚:多少是证明,多少是推断,概念验证到底跑没跑过。看着像坏事,它不会因此就说「已确认」。

攻击手册免费公开读取合约不花钱不向链上发送任何交易需要你声明已获授权
//十个攻击族

合约丢钱的 十种方式

每一族之所以在这里,是因为扫描器有能证明其前置条件的检测器。手册里的每条链都写明:必须先成立哪些条件,它才会针对你的代码被报出来。

访问控制

一个能授出权力的函数,忘了检查调用它的人是谁。这是最古老也最常见的一族,因为它不需要任何技巧——只需要有人没写那一行。

重入

在合约把「你拿走了多少」记下来之前,先绕回去再拿一次。这么多年过去它依然有效,因为顺序写反比逻辑写错更难在评审时看出来。

闪电贷路径

不需要本金的攻击——本金是借来的,并在同一笔交易里还清。它把「攻击者得先有一千万美元」这个假设直接删掉了。

预言机操纵

合约要向别的东西询问某样资产值多少钱,而那个答案是可以被挑选的。问题不在合约的算术,在它选择相信谁。

价格操纵

把合约据以定价的那个市场推动一下,或者抢在某个即将成交的人前后下手。代码全对,价格被摆布。

签名与重放

一个签名生效了不止一次、不止一条链,或者不止一件事。签名本身是有效的——正是它有效,才让重放好用。

可升级性

地址背后的代码,已经不是当初被审计的那一份。报告没有写错,只是它描述的对象已经不在那里了。

权限提升

从一个普通调用者走到 owner,或者从 owner 走到比 owner 更多。中间往往隔着好几步,每一步单看都不像问题。

业务逻辑

每一行都是对的,而它们加起来的规则不对。这一族没有可以匹配的模式,只能靠读懂这份合约究竟想做什么。

经济与 DeFi

什么都没坏。只是激励机制付给攻击者的,比付给你的多。

工具本身(扫描器、控制台、SAFI 工作区)目前仍是英文界面。这些页面用中文把一切讲清楚,方便你进去之前先看明白。

判定的 几个等级

这个工具报出的每条路径都带一个可利用性判定。仅凭阅读你的源码,它能给出的最强判定是「可能」——这是刻意设下的天花板,不是忘了拿掉的限制。

🚧 「已确认」这个词,这条通道永远不会说出口

「已确认」的意思是:有人对一份隔离的合约副本执行了概念验证,并且成功了。这条通道不执行任何东西,所以它永远不会产出这个词。

一个把「看起来很糟」写成「已确认」的工具,第一次被人核对时就失去了全部价值。所以宁可让最强的结论停在「可能」。

01可能:路是开着的,不代表有人走过

每一项必需的前置条件,都能在你的代码里指向扫描器真实命中的东西,支撑证据也大都齐全。

它说的是这条路开着,不是说有人已经走过。这两句话之间的差别,就是一份可以拿去开会的报告和一份只会吓唬人的报告之间的差别。

02未验证:给人看的线索,不是结论

必需的前置条件成立,但整条链主要靠结构推断撑着,而不是靠检测器的直接命中。

它被明确标成留给人工评审的线索。把线索包装成结论,是这个行业最常见的失信方式。

03读合约免费,拼链才计费

扫描在你的浏览器里跑,源码不会离开它。只有扫描产生的发现——检测器编号、函数表、访问控制标记——会被发送出去用于拼装攻击链,你可以在网络面板里看着这件事发生。

拼装攻击链属于 AI Agents 套餐,每次消耗 5 个额度。已部署的地址必须在区块浏览器上验证过源码:未验证的字节码里没有函数可读,也就没有东西可以拿来拼。

04它要求你声明已获授权

页面上有一个必须勾选的框:你拥有这份合约、你受托评审它,或者它本来就是你自己的部署。

这里不碰链上:源码从区块浏览器读取,在这个浏览器里分析,从头到尾不会构造也不会发送任何交易。这个框本身证明不了什么,它记录的是意图——而一个随便替谁去测陌生人合约的工具,是另一种产品。

//常见问题

关于 对抗式测试

它和扫描器有什么区别?
扫描器逐行读代码,列出哪里有问题。这个工具拿那些发现,试着拼成一条完整的攻击路径,并为每一环给出证据。前者回答「有什么毛病」,后者回答「这些毛病能怎么被利用」。
它会真的攻击我的合约吗?
不会。全程不向链上发送任何交易,也不会构造交易。源码从区块浏览器读来,在你的浏览器里分析,得到的是一份路径说明,不是一次真实攻击。
攻击手册要付费才能看吗?
不用。完整手册是公开的:每一条链、它的前置条件、以及它对应的真实事故,都可以直接读。付费的是把这些链针对你自己的代码拼出来那一步。
为什么最强的结论只到「可能」?
因为「已确认」应当意味着有人真的跑通了概念验证。这条通道不执行任何东西,所以它没有资格说这个词。把推断说成确认,是最容易也最不该犯的错。
未验证的合约能测吗?
不能。未验证的字节码里没有可读的函数名和结构,也就没有东西可以拼成攻击链。请先在区块浏览器上验证源码,或者直接把 Solidity 源码贴进来。

转账之前,先扫一遍合约

粘贴合约地址,在冒险之前先看清所有者权限、流动性和卖出模拟结果。每次扫描收取一笔小额费用,签名前会先显示金额——订阅任意套餐后则无限次包含。