阅读etherscan上所有的合约转账代码

时间:2024-04-13 08:16:17

自从出了智能合约溢出攻击事件之后,大家纷纷讨论发现了智能合约漏洞了之后怎么*之类的,整天意淫着能找到一个合约漏洞自此*后逍遥人间。。。

当然这只是玩笑了,玩笑之余,想着看看众多合约中是否还有漏洞。当然如果真有漏洞基本上已经被黑客默默的利用了(或者等待机会利用),等我来发现黄花菜都凉了去了。

怎么分析呢,想着从etherscan上看一个个合约代码吧,笨办法来搞吧。

刚开始是找了一个小交易所,然后一个个在etherscan上搜,再查看合约代码,想着上小交易所的合约被人盯的机会比较小,看了几十个没发现问题

再从etherscan上市值倒数来看,也是基于低市值合约黑客暂不去攻击的想法去看看能不能发现新的攻击。在看了一两百个智能合约后,发现了一个合约有问题,但是这个未上市,就watch一下吧

看了一两百个也晕了,还是怎么能省点功夫吧,一个个去点,点的累,还有时候看重了,最好是把合约代码下载下来本地搜索出transfer关键函数看一看好了。

抓包工具web scraper

恰好之前同事用过一个web scraper的chrome插件,就拿来用用,还真方便使用,一下就把etherscan上的501个合约地址找到了(后面发现可能不止501个,但是从这个地址只能找到501个)

https://etherscan.io/tokens
安装了web scraper之后,可以很方便的把tokens的所有地址抓下来,具体使用规则可以搜索到

比如EOS的token地址是:https://etherscan.io/token/0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0

那么EOS的合约地址就是https://etherscan.io/address/0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0#code

抓取智能合约代码用web scraper比较麻烦,一则它只能抓取可见框区域的代码,二则一个个合约的遍历也不方便,之前接触过python代码抓取网页内容,所以就写了个python脚本去抓取合约代码。

python脚本抓取合约代码

过程如下:

1 根据web scraper抓取到的所有的token地址保存到一个文件

2 python脚本做一下事情:

    a: 读取所有的token地址,循环处理

    b: 把token地址更改为code地址

    c: 通过查看code地址的源代码找到定位合约地址的规则,把合约代码抓取下来保存在文件(可以使用token地址来命令)

3 总共抓取到了501个合约地址的文件,有的合约没有上传源代码就没有抓取下来

4 然后grep出transfer函数后的10行代码来看有没有问题,这个也是人肉看,也是比较痛苦的过程,不过比etherscan上一个个点好多了,保存的文件如下如所示:

阅读etherscan上所有的合约转账代码
这默认图片也搞的有点大了吧。。。

最后又发现了一个合约有问题,但是目前市值太小,估计黑客也关注到了,我也同样watch吧

总结一下

在我前一篇分析合约漏洞的文章有提到,有些合约作者不知道为什么不按照规范来写,非要自己写transfer函数,导致出现各种漏洞,给黑客以可乘之机,希望合约创建者以后能避免类似低级错误,不要给黑产以割韭菜的机会,我也是被割的欲哭无泪啊,说好的价值投资呢