前言
前段時間,PolyNetwork被盜事件的一個小插曲,一地址向黑客地址轉賬在inputdata中告知其USDT已被凍結,不要使用USDT,黑客知曉后向該地址轉賬13.37ETH。
事后很多人便通過inputData在區塊鏈上“聊天”向黑客“索要”虛擬貨幣,那么我們經常在區塊鏈瀏覽器中看到的inputData到底是什么?知道創宇區塊鏈安全實驗室為您解答。
Inputdata
在以太坊協議中,當交易為合約創建時,inputdata是賬戶初始化程序的EVM代碼;
而當交易為消息調用時,inputdata是合約函數調用數據。
正常情況下簡單的消息調用如調用轉賬函數時需要填寫你要轉賬的地址_to和你要轉賬的數量_amount,這些基本信息都包含在inputdata里面。
我們通過一個調用合約的轉賬交易具體分析,來理解消息調用時inputdata的結構。
解析形式:
原始形式:
Grayscale與SEC之間的裁決可能需要等三到六個月的時間:金色財經報道,Grayscale在法庭上度過了一天,現在資產管理公司以及其 Grayscale Bitcoin Trust 的投資者必須等待裁決,這可能需要三到六個月的時間。[2023/3/8 12:48:28]
我們將原始的inputdata分為三個部分進行分析:
0xa9059cbb:函數標識符
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2:第一個參數為address即你要轉賬的地址,并補位到32字節即64個16進制字符
0000000000000000000000000000000000000000000054b7d8ed70650b290000:第二個參數為value即你要轉賬的數量,并補位到32字節即64個16進制字符
通過對比分析我們可以發現inputdata的基本結構為函數標識符+參數。
函數標識符
這里的函數標識符即為函數選擇器,根據官方文檔可知函數選擇器是某個函數簽名的Keccak哈希的前4字節。
我們可以通過代碼bytess4(keccake256("transfer(adddress,uint256)"))或者在線工具獲取這種函數簽名。
馬斯克入主Twitter后 已有500多家廣告商逃離Twitter:金色財經報道,據The Information報道,知情人士今日稱,Twitter經理西達斯·拉奧(Siddharth Rao)日前在一次內部會議上透露,自特斯拉CEO埃隆·馬斯克(Elon Musk)于去年10月接管Twitter以來,已有500多家廣告商逃離Twitter。此外,拉奧還表示,Twitter當地時間1月17日的營收(日營收)較去年同期下降了40%,突顯出Twitter核心的廣告業務所面臨的危機。[2023/1/18 11:19:10]
下圖可以看出加密結果的前四個字節(a9059cbb)跟inputdata中函數標識符一致。
這里之所以要將函數簽名截斷到四個字節是考慮到Gas成本問題。
在一筆交易中0字節需要支付4gas,而非0字節需要68gas也就是0字節的17倍。
在SHA-3加密中生成的32字節隨機字符串更傾向于多的非0字節,所以大概成本是32x68=2176gas,而截斷成本大概為4x68=272gas,可見截斷到四個字節能夠節省約8倍的gas費。
而函數標識符的作用是指定調用哪一個函數,在同一個合約中兩個不同函數的SHA-3簽名的前4字節相同的概率是十分小的,所以截斷到四個字節實際不會影響函數調用。
參數
在evm執行字節碼的約定中,靜態類型左補齊零至64長度,而動態類型則是右補齊零至64長度。
以太坊擴容項目AltLayer推出Alpha開發者網絡:10月3日消息,以太坊擴容項目AltLayer推出Alpha開發者網絡,開發者可以嘗試部署Solidity合約以及測試跨鏈解決方案。
此前報道,AltLayer于7月初宣布完成了由Polychain Capital、Jump Crypto和Breyer Capital領投的720萬美元種子輪融資。[2022/10/3 18:38:16]
歸納下常見的靜態類型:uint,bool,Address,bytes,動態數組類型:bytes,string,address,bytes32.....
我們通過pyethereum的ABI編碼函數來研究不同數據類型的編碼方式。
靜態類型
先導入encode_abi函數
importrlpfromethereum.abiimportencode_abi
我們以函數transfer(address,uint256)為例
>encode_abi(,
).hex()
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2
0000000000000000000000000000000000000000000000000000000000000001
對于小于32字節的定長數組會被自動填充到32字節:
快手萬鵬飛:發力元宇宙,快手有技術積淀和長期規劃:9月3日,在2022世界人工智能大會上,快手Y—tech AI技術中心負責人萬鵬飛表示,元宇宙是快手發展路徑上的重要方向。“快手發力元宇宙產業非常自然,并不是刻意而為,有扎實的技術積淀和行業認可度。”萬鵬飛表示,快手對元宇宙的布局主要圍繞現有業務展開,包括數字人、VR、AR等,重視其實際落地。從長期來看,公司對此有整體規劃,從短期來看,也希望快速地發揮現有業務的價值。(澎湃新聞)[2022/9/3 13:06:51]
>encode_abi("],).hex()
//自動填充0
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
動態類型
動態類型編碼要稍微復雜一些,需要先計算偏移量進行占位處理,我們通過一個簡單的例子來具體說明。
>encode_abi(","uint256","uint256"],
,,]
).hex()
//參數1的偏移量:32*3=96十六進制0x600000000000000000000000000000000000000000000000000000000000000060
莫斯科附近的大型加密礦場遭搶劫,被搶價值超1.8萬美元挖礦設備:金色財經消息,據當地媒體報道,武裝劫匪搶劫了離俄羅斯首都不遠的一個大型加密貨幣采礦設施。在此事件中,身份不明的肇事者拿走了四個容器,里面裝有大約100個GPU和其他用于提取數字貨幣的硬件。執法當局估計被盜采礦設備的價值約為100萬盧布(在撰寫本文時超過18,000美元)。
這是繼伊爾庫茨克一家采礦酒店的經營者于6個月前被竊取了價值約190萬美元的采礦設備后,又一起礦機被盜竊的案件。隨著采礦業的日益普及,此類事件的數量在過去幾年中有所增加。
比特幣挖礦是俄羅斯聯邦尚未監管的加密相關活動之一。與此同時,俄羅斯當局一直在采取措施,通過提高俄羅斯人在地下室和車庫臨時安裝的“設備”來限制家庭加密采礦的普及。這一現象已導致一些地區居民用電過度和出現故障。(news.bitcoin)[2022/7/22 2:31:16]
//參數2的偏移量=參數1偏移量+參數1數據部分長度=96+32*4=224十六進制0xE000000000000000000000000000000000000000000000000000000000000000e0
//參數3的偏移量=參數2偏移量+參數2數據部分長度=224+32*4=352十六進制0x1600000000000000000000000000000000000000000000000000000000000000160
//偏移量0x60位置開始傳入參數1的數據
0000000000000000000000000000000000000000000000000000000000000003//元素個
00000000000000000000000000000000000000000000000000000000000000a1//第一個數組元素
00000000000000000000000000000000000000000000000000000000000000a2//第二個數組元素
00000000000000000000000000000000000000000000000000000000000000a3//第三個數組元素
//0xe0位置。參數2的數據
0000000000000000000000000000000000000000000000000000000000000003
00000000000000000000000000000000000000000000000000000000000000b1
00000000000000000000000000000000000000000000000000000000000000b2
00000000000000000000000000000000000000000000000000000000000000b3
//0x160位置。參數3的數據
0000000000000000000000000000000000000000000000000000000000000003
00000000000000000000000000000000000000000000000000000000000000c1
00000000000000000000000000000000000000000000000000000000000000c2
00000000000000000000000000000000000000000000000000000000000000c3
短地址攻擊
經過前面的分析當靜態類型如address長度不足32字節時EVM會根據規則將長度補齊到32字節,如果當轉賬的地址以00結尾,如0x641988625108585185752230bde001b3ebd0fc00,轉賬時將地址后面的兩個零去掉,EVM依然會認為address_to是32位的,所以它會從_value的高位取0來補充,amount的位數會多兩位也就是會乘以256。
攻擊過程如下:
將惡意轉賬地址最后一個字節的0去掉
函數標識符:a9059cbb
轉賬地址:
000000000000000000000000641988625108585185752230bde001b3ebd0fc
轉賬金額:
00000000000000000000000000000000000000000000000000000000000000001
由于EVM的補位規則,解析結果為:0xa9059cbb000000000000000000000000641988625108585185752230bde001b3ebd0fc0000000000000000000000000000000000000000000000000000000000000000100
我們分解后發現,轉賬金額已經多了兩位也就是多了一個字節,即為原來轉賬的256倍
函數標識符:a9059cbb
轉賬地址:
000000000000000000000000641988625108585185752230bde001b3ebd0fc00
轉賬金額:
00000000000000000000000000000000000000000000000000000000000000100
如何在inputdata附著信息
在以太坊中直接進行轉賬交易的inputdata字段默認是沒有內容的,但是我們可以通過設置錢包實現文章開頭的“聊天功能”。
我們以MetaMask錢包為例展示如何通過轉賬在inputdata字段附著一些額外的信息。
1、首先我們需要打開錢包高級選項的顯示十六進制數據開關
2、在轉賬時將你要附著的信息通過十六進制編碼后填入下方十六進制數據中,記得在開頭加上0x然后進行轉賬
3、轉賬成功后在etherscan中就能夠看到附著信息
總結
我們能夠通過交易中的inputdata將一些信息永久存儲在區塊鏈中,可以通過此項技術在食品藥品監管部門的產品防偽溯源、財稅部門的電子票據打假驗真、學術成果存證等方面實現應用落地。
第一章加密市場的十大投資話題 1.機構信任的崩塌 我們為什么要了解這件事?或許你是眾多“千禧一代“和“X世代“中的一名投資者,這一代的人常說“只有奇跡降臨“才有可能能退休.
1900/1/1 0:00:00SundaeSwapLabs是Cardano上的第一個也是最大的去中心化交易平臺之一。 將DeFi引入新的鏈接 WorldMobile的愿景是連接未連接的人,但連接后會發生什么?通過與Sunda.
1900/1/1 0:00:00播報數據由Greeks.liveDataLab格致數據實驗室和Deribit官網提供。主流幣連續兩日上漲,市場信心在回暖,也出現一些分化.
1900/1/1 0:00:00摘要 整體TVL下降9.13B,已連續四周下跌。Solana上的Serum和Solend協議帶動公鏈TVL逆勢增長。VeefriendsNFT價格持續上漲.
1900/1/1 0:00:00與許多其他領域一樣,元宇宙的這個虛擬空間激發了金融創新者的渴望,他們希望了解金融科技和新的金融科技解決方案如何在這個全新的世界中提供金融服務.
1900/1/1 0:00:00隨著通訊和可視化移動終端設備的逐漸普及,人們簇擁于web3或元宇宙的概念。而對于通往全新世界的道路要怎么走?卻沒有很明晰的答案.
1900/1/1 0:00:00