1. 程式人生 > >以太坊 solidity ERC20的短地址攻擊——一槍打八個

以太坊 solidity ERC20的短地址攻擊——一槍打八個

    前一段時間,有個使用者用說發交易的時候提示地址錯誤,後來發現傳送的地址少了一位;所以錢包檢測傳送地址時,會提示錯誤。當時也沒當回事,以為是使用者自己搞錯了。最近研究solidity的時候,才明白了當時是怎麼回事,原來這個使用者遇到了短地址攻擊。今天就來分析一下短地址攻擊,玩ERC20的“韭菜們”都需要注意一下,否則你會發現,你本來要轉1個token,就變成了轉8個token,到時候可沒地方說理去。

    我們先來看一下正常的ERC20轉賬的交易結構是什麼樣子的。正常的ERC20的轉賬交易,from地址是你自己,to地址是你要轉賬的token合約地址,而你要轉賬賬戶地址其實是寫在input data裡;隨便找一個erc20的轉賬地址大家看一下,

大家可以看一下,我紅色標註的地址;我們著重分析一下,input data結構;如果你看了我寫的omni協議分析,有沒有覺得input data和OP_Return有點類似呢;我們把input data用兩種形勢表達一下。

解析形式:

原始形式:

對比一下兩種形式,你會發現,其實是一樣的,也就明白了input data是個什麼樣的結構;主要分為三部分。

1)四個位元組,函式名稱,transfer(address _to, uint256 _amount),這個是把函式名字做keccak256,之後取前四個位元組。

0xa9059cbb

2)32位元組,你要轉賬的地址,不足32位元組,需要補零。

000000000000000000000000641988625108585185752230bde001b3ebd0fc7a

3)32位元組,你要轉賬的數量,不足32位元組,需要補零。

00000000000000000000000000000000000000000000000000000451e804f0e0