「力场」——公链挖矿第一社区!
上个月,作者向Eveem.org发布了一个API,通过这个API,可以对以太坊ETH智能合约进行简单的静态分析。
访问如下网址:http://eveem.org/code/0x06012c8cf97bead5deae237070f9587f8e7a266d.json
你会看到一个JSON文件,所有函数都将被反编译成一种相对容易分析的中间语言。
例如,就像https://showme-1389.appspot.com/ 网站工具那样,可以向您展示一些有关智能合约的有趣的事实。
屏幕快照 2019-02-12 下午9.27.45.png这种中间语言表示,很酷的地方在于 - 它使分析智能合约的安全性,变得非常容易和快速。
并且,由于所有智能合约都已经反编译,因此可以进行批量操作。
最初,我是从控制台操作,使用的python脚本一个接一个地对所有的智能合约进行了操作。这对我来说很方便,但是不允许其他人尝试这项技术——如果通过API访问分析1.2M(120万)智能合约将是让人抓狂的慢。
幸运的是,在EthSingapore期间,Google的Allen Day向我介绍了BigQuery,您可能从他们最近关于以太坊数据集的公告中得知了BigQuery。
BigQuery很酷的地方在于——它是一个数据库,专为顺序访问数据而设计,并在其上进行批量操作。换句话说,如果你有一个数据集,BigQuery不会擅长提取随机行,但如果你想访问所有行,并执行一些操作,效率是惊人的。
更酷的是,它支持UDF(用户定义函数),但不仅仅支持常规UDF。BigQuery完全支持Javascript(以及WASM文件),所以,如果你基于BigQuery编写一个脚本来做一些数据分析,那么在整个数据集上运行它,几秒钟内就搞定,是非常容易的。
##你问,有多简单?
我只花了几个小时,就将所有反编译智能合约的数据集上传到BigQuery,然后编写Asterix——一个示例脚本,用于查找所有反编译智能合约中的所有开放的自动销毁(open self-destructs)。
你问,执行起来有多快?
查询一次与给定模式匹配的所有智能合约,只需要23秒——比如查询匹配「开放自动销毁」的智能合约,会在ETH主网上发现——大约700个智能合约,(太恐怖了!)现在任何人都可以随时销毁这700个智能合约。其它500份智能合约,在某些条件下,也可以被随意销毁。
2.png接下来呢?
我公开了数据集:
5.png 4.pngAsterix(笔者写的脚本)是完全开源的,请点击:
https://github.com/kolinko/asterix
如果有人有兴趣,可以试一试!您可以先从BigQuery快速入门开始,大约需要1-2个小时。在熟悉它们之后,获取Asterix并运行它以获得具有开放自动销毁的智能合约的列表。
如果您对某些更深入的分析感兴趣,请查看showme.js文件。您还需要熟悉Eveem提供的中间语言 - showme python演示对此有帮助。
结语
Eveem仍然是一项正在进行的工作,并且遗漏了很多东西——许多智能合约和功能都没有完全被反编译。还有一些失误。例如,使用safesub库时,它通常不会显示在减法之前已经完成检查,所以你会得到大量的误报。
坦率地说 - 这是我写过的最鼓舞人心和最可怕的工具。如果存在漏洞,可以编写类似于您使用Mythril或Manticore的扫描程序,并立即获取该漏洞的所有处于活动状态的智能合约的列表。
它也让人想知道如何在这种情况下,进行合理利用——显然,找到有大量ETH或交易量的合约,然后找到这些智能合约的所有者,报告错误似乎是正确的做法。
该工具还有其他潜在的有趣用途 - 找出已部署智能合约中的模式。如果你曾经好奇有多少合约使用某种编程模式(比如可升级性,或管理交易之间的套利,或某种循环),这可能是第一个让你轻松搞清楚这些细节的工具。
另外一个有趣的事情可以建立在这个基础之上:现在很容易弄清楚智能合约需要访问的其他合约。可以编写一个脚本,对它们之间的所有连接进行静态分析。像Bloxy.info这样的网站已经通过分析交易来动态地执行此操作,但似乎没有人静态地这样做。我想知道会发生什么。
玩得开心!:)
谢谢阅读!欢迎点赞!
网友评论