前言
前段時間,PolyNetwork被盜事件的一個小插曲,一地址向黑客地址轉賬在inputdata中告知其USDT已被凍結,不要使用USDT,黑客知曉后向該地址轉賬13.37ETH。
事后很多人便通過inputData在區塊鏈上“聊天”向黑客“索要”虛擬貨幣,那么我們經常在區塊鏈瀏覽器中看到的inputData到底是什么?知道創宇區塊鏈安全實驗室為您解答。
Inputdata
在以太坊協議中,當交易為合約創建時,inputdata是賬戶初始化程序的EVM代碼;
而當交易為消息調用時,inputdata是合約函數調用數據。
正常情況下簡單的消息調用如調用轉賬函數時需要填寫你要轉賬的地址_to和你要轉賬的數量_amount,這些基本信息都包含在inputdata里面。
我們通過一個調用合約的轉賬交易具體分析,來理解消息調用時inputdata的結構。
解析形式:
原始形式:
彭博社:法官裁定Celsius必須向用戶歸還4400萬美元的加密貨幣:金色財經報道,首席破產法官Martin Glenn在參與Celsius破產案的各方認為資金屬于用戶而非Celsius后,于周三發布裁定命令加密貨幣貸款機構Celsius Network必須將價值約4400萬美元的加密貨幣返還給客戶,即使它沒有進入Celsius的有息賬戶。(彭博社)[2022/12/8 21:30:25]
我們將原始的inputdata分為三個部分進行分析:
0xa9059cbb:函數標識符
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2:第一個參數為address即你要轉賬的地址,并補位到32字節即64個16進制字符
0000000000000000000000000000000000000000000054b7d8ed70650b290000:第二個參數為value即你要轉賬的數量,并補位到32字節即64個16進制字符
通過對比分析我們可以發現inputdata的基本結構為函數標識符+參數。
函數標識符
這里的函數標識符即為函數選擇器,根據官方文檔可知函數選擇器是某個函數簽名的Keccak哈希的前4字節。
我們可以通過代碼bytess4(keccake256("transfer(adddress,uint256)"))或者在線工具獲取這種函數簽名。
幣安上線新一批BTC云算力挖礦產品,預計挖礦開始時間為12月4日:11月29日,據官方公告,幣安宣布上線新一批BTC云算力挖礦產品,現已開放申購,此批云算力挖礦產品預計挖礦開始時間為2022年12月4日12:00。
此前消息,幣安礦池10月14日宣布推出5億美元礦工貸款項目,11月22日推出了其云挖礦服務。據介紹,與Bitdeer和BitFuFu等提供自營算力不同,幣安從第三方購買算力。[2022/11/29 21:09:25]
下圖可以看出加密結果的前四個字節(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長度。
Animoca Brands聯創:向Web3過渡將會很會更快發生:金色財經報道,Animoca Brands的聯合創始人Yat Siu在接受采訪時表示,向下一代互聯網Web3的過渡將比許多人想象得更快發生。“在接下來的18個月左右,我們預計將有數以億計的人開放元宇宙,因為開放元世界產品的質量,如新的和更高質量的區塊鏈游戲,將會推出,并將吸引新一波人加入這個空間。(forbes)[2022/9/2 13:05:30]
歸納下常見的靜態類型: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字節:
Walken:因Solana發生安全事件無法與鏈交互,Walken應用程序暫時不可用:8月3日消息,Solana生態Move to Earn應用Walken發推稱,由于Solana發生的安全事件和正在進行的調查,目前無法與該區塊鏈交互,這導致了加載失敗和Walken應用程序出現錯誤,該應用程序將因維護而不可用,恢復時間未知。Walken團隊正在密切關注這一情況。[2022/8/3 2:55:59]
>encode_abi("],).hex()
//自動填充0
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
動態類型
動態類型編碼要稍微復雜一些,需要先計算偏移量進行占位處理,我們通過一個簡單的例子來具體說明。
>encode_abi(","uint256","uint256"],
,,]
).hex()
//參數1的偏移量:32*3=96十六進制0x600000000000000000000000000000000000000000000000000000000000000060
紐約聯邦儲備銀行總裁:流動資產支持的CBDC和穩定幣具有創新潛力:金色財經報道,紐約聯邦儲備銀行總裁兼首席執行官John Williams周三對來自世界各地的央行官員、學者和金融業領袖表示,準備好迎接貨幣和支付方式的根本變化。這位央行行長用一句話評論駁斥了大部分數字資產領域,即并非所有加密貨幣都由非加密資產支持。由安全、流動資產支持的中央銀行數字貨幣(CBDC)和穩定幣具有創新潛力。
Williams沒有詳細說明數字貨幣未來可能產生的影響。相反,他通過指出 2014 年引入隔夜逆回購 (ON RRP) 協議的影響來說明潛在變化。在維持 2 萬億美元的 ON RRP 協議的情況下,它們極大地改變了美聯儲資產負債表的結構。[2022/6/2 3:58:02]
//參數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將一些信息永久存儲在區塊鏈中,可以通過此項技術在食品藥品監管部門的產品防偽溯源、財稅部門的電子票據打假驗真、學術成果存證等方面實現應用落地。
Tags:ATADATPUTDATAQATARMedical data linkBitconch Reputation HeatFuture data network
播報數據由Greeks.liveDataLab格致數據實驗室和Deribit官網提供。近兩天熱點是新公鏈,大部分新興公鏈都在輪流拉升,主流幣熱度不高.
1900/1/1 0:00:00波卡,可以說是喊著金鑰匙出生的項目。在項目啟動階段,半個月就募集到了50萬枚以太坊,即便放到今天也是非常亮眼的成績。 創始人 加文·伍德(GavinWood),區塊鏈技術大牛,最頂尖的那部分.
1900/1/1 0:00:0011月2日消息,《證券日報》刊發文章《數字化轉型浪潮滾滾,區塊鏈造就可信“數字經濟底座”》,文章指出:多位業內人士認為.
1900/1/1 0:00:00“波卡知識圖譜”是我們針對波卡從零到一的入門級文章,我們嘗試從波卡最基礎的部分講起,為大家提供全方位了解波卡的內容,當然這是一項巨大的工程,也充滿了挑戰.
1900/1/1 0:00:00當今市場競爭變得越來越動態和苛刻,導致競爭環境充滿挑戰。為了適應這種動態環境,供應鏈越來越依賴于接管者之間的協作、集成、靈活性和信任。因此,新技術應用在供應鏈中的重要性與日俱增.
1900/1/1 0:00:00前言 11月以來知道創宇區塊鏈安全實驗室檢測到的攻擊事件相較于10月更加多樣化。這主要得益于區塊鏈威脅情報中心功能的正式開放,其大大提高了我們檢測攻擊的能力.
1900/1/1 0:00:00