前言
前段時間,PolyNetwork被盜事件的一個小插曲,一地址向黑客地址轉賬在inputdata中告知其USDT已被凍結,不要使用USDT,黑客知曉后向該地址轉賬13.37ETH。
事后很多人便通過inputData在區塊鏈上“聊天”向黑客“索要”虛擬貨幣,那么我們經常在區塊鏈瀏覽器中看到的inputData到底是什么?知道創宇區塊鏈安全實驗室?為您解答。
Inputdata
在以太坊協議中,當交易為合約創建時,inputdata是賬戶初始化程序的EVM代碼;
而當交易為消息調用時,inputdata是合約函數調用數據。
正常情況下簡單的消息調用如調用轉賬函數時需要填寫你要轉賬的地址_to和你要轉賬的數量_amount,這些基本信息都包含在inputdata里面。
我們通過一個調用合約的轉賬交易具體分析,來理解消息調用時inputdata的結構。
解析形式:
原始形式:
我們將原始的inputdata分為三個部分進行分析:
0xa9059cbb:函數標識符
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2:第一個參數為address即你要轉賬的地址,并補位到32字節即64個16進制字符
首爾南區檢察院成立專門調查加密相關犯罪的虛擬資產聯合調查組:金色財經報道,韓國首爾南部地區檢察官辦公室將成立一個\"虛擬資產聯合調查組\",以調查涉及虛擬貨幣的犯罪。它將獨立于金融和證券犯罪部門,后者目前負責調查南部地區檢察官辦公室的金融犯罪。
據悉,檢察官和金融服務委員會、金融監管局和韓國存款保險公司等相關組織的官員將于本月19日舉行第一次聯席會議,以便在7月初啟動虛擬資產聯合調查組。這是首次在檢察院內成立一個只調查加密貨幣等虛擬資產的組織。[2023/6/14 21:36:08]
0000000000000000000000000000000000000000000054b7d8ed70650b290000:第二個參數為value即你要轉賬的數量,并補位到32字節即64個16進制字符
通過對比分析我們可以發現inputdata的基本結構為函數標識符參數。
函數標識符
這里的函數標識符即為函數選擇器,根據官方文檔可知函數選擇器是某個函數簽名的Keccak哈希的前4字節。
我們可以通過代碼?bytess4(keccake256("transfer(adddress,uint256)"))?或者在線工具獲取這種函數簽名。
下圖可以看出加密結果的前四個字節?(a9059cbb)?跟inputdata中函數標識符一致。
幣安:沒有裁員計劃,擬在上半年再招聘500多人:3月3日消息,加密交易所幣安發言人表示:“截至今天,我們正在積極招聘500多個職位,目標是在上半年結束前填補職位空缺。我們沒有任何裁員計劃。”該發言人表示,自2023年初以來,該公司已雇用了600多名員工。
在撰寫本文時,幣安在其職位空缺頁面上列出了463個職位,職位涉及業務開發、通信、客戶支持和工程等。
此前1月11日消息,趙長鵬表示,幣安計劃在2023年將員工人數增加15%至30%。(Cointelegraph)[2023/3/3 12:40:09]
這里之所以要將函數簽名截斷到四個字節是考慮到Gas成本問題。
在一筆交易中0字節需要支付4gas,而非0字節需要68gas也就是0字節的17倍。
在SHA-3加密中生成的32字節隨機字符串更傾向于多的非0字節,所以大概成本是32x68=2176gas,而截斷成本大概為4x68=272gas,可見截斷到四個字節能夠節省約8倍的gas費。
而函數標識符的作用是指定調用哪一個函數,在同一個合約中兩個不同函數的SHA-3簽名的前4字節相同的概率是十分小的,所以截斷到四個字節實際不會影響函數調用。
參數
在evm執行字節碼的約定中,靜態類型左補齊零至64長度,而動態類型則是右補齊零至64長度。
歸納下常見的靜態類型:uint,bool,Address,bytes,動態數組類型:bytes,string,address,bytes32.....
NFT項目“胖企鵝”Pudgy Penguins與Retail Monster達成合作將在線下店推出Pudgy Toyline:金色財經報道,NFT項目“胖企鵝”Pudgy Penguins在社交媒體宣布已與Retail Monster達成合作,將在全球線下零售店上架其IP商品Pudgy Toyline,Retail Monsters擁有代理迪士尼、夢工廠和孩之寶等大品牌的經驗,后續還將作為授權代理,通過他們的合作伙伴和關系為 Pudgy Penguins 提供授權機會。[2023/2/21 12:19:10]
我們通過?pyethereum的ABI編碼函數?來研究不同數據類型的編碼方式。
靜態類型
先導入encode_abi函數
importrlp?fromethereum.abiimportencode_abi
我們以函數transfer(address,uint256)為例
>encode_abi(,
).hex()
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2
0000000000000000000000000000000000000000000000000000000000000001
Web3瀏覽器Opera推出NFT分析工具DegenKnows:金色財經報道,Web3瀏覽器Opera推出了DegenKnows,這是一個新的NFT分析、跟蹤和探索工具,包括鏈上和鏈下分析。這個新工具旨在幫助用戶瀏覽NFT項目,并獲得來自社交媒體社區的分析。
除了常規的鏈上數據分析,如個人交易,DegenKnows旨在向用戶提供來自社交媒體來源的鏈下數據,包括Twitter和Discord。(coindesk)[2022/11/3 12:13:51]
對于小于32字節的定長數組會被自動填充到32字節:
>encode_abi("],).hex()
//自動填充0
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
動態類型
動態類型編碼要稍微復雜一些,需要先計算偏移量進行占位處理,我們通過一個簡單的例子來具體說明。
>encode_abi(????","uint256","uint256"],
韓國當局封鎖KuCoin等16家未在韓注冊的數字資產運營商:8月18日消息,韓國金融情報機構(FIU)18日宣布,已向調查機構通報了MEXC和KuCoin等16家未注冊的外國數字資產運營商。FIU指出,這些運營商涉嫌違反特定金融信息法。未注冊的非法經營活動將被處以5年以下有期徒刑或5000萬韓元以下罰款,這些平臺未來一定時期內作為境內數字資產運營商申報也受到限制。此外,韓國金融情報機構要求韓國通信委員會和韓國通信標準委員會阻止相關運營商在韓國接入服務,以防止韓國人使用未注冊的運營商。信用卡公司正計劃檢查和阻止使用外國數字資產商業信用卡在韓國使用數字資產購買和支付服務。已注冊的數字資產經營者被勒令暫停與未注冊的經營者的交易。(韓聯社Infomax)[2022/8/18 12:33:26]
????,,]
).hex()
//參數1的偏移量:32*3=96十六進制0x600000000000000000000000000000000000000000000000000000000000000060
//參數2的偏移量=參數1偏移量參數1數據部分長度=9632*4=224十六進制0xE000000000000000000000000000000000000000000000000000000000000000e0
//參數3的偏移量=參數2偏移量參數2數據部分長度=22432*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將一些信息永久存儲在區塊鏈中,可以通過此項技術在食品藥品監管部門的產品防偽溯源、財稅部門的電子票據打假驗真、學術成果存證等方面實現應用落地。
親愛的ZT用戶: ZT創新板即將上線GOMA,並開啟GOMA/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月19日11:00; GOMA ZT Global交易所已完成B.
1900/1/1 0:00:0010月20日消息,資產管理規模超過15億美元的加密指數基金管理公司BitwiseAssetManagement宣布推出BitwisePolygonFund.
1900/1/1 0:00:00尊敬的用戶: 為更好的服務國際市場,MEXC已與Bybit達成重要戰略合作,未來雙方將協同佈局全球數字資產領域.
1900/1/1 0:00:00據CoinDesk10月19日消息,BlockchainMoonAcquisitionCorp是一家新成立的特殊目的收購公司,總部位于佛羅里達州,已獲得美國證券交易委員會批準.
1900/1/1 0:00:00根據Horizen(ZEN)官方消息,Horizen(ZEN)計劃于區塊#1027500時進行強制升級,預計時間10月27日14點-18點UTC8.
1900/1/1 0:00:00尊敬的用戶:?????????????BKEXGlobal即將上線FINA,詳情如下:上線交易對:FINA/USDT幣種類型:BEP20?充值功能開放時間:已開放交易功能開放時間:2021年10.
1900/1/1 0:00:00