前言
前段時間,PolyNetwork被盜事件的一個小插曲,一地址向黑客地址轉賬在inputdata中告知其USDT已被凍結,不要使用USDT,黑客知曉后向該地址轉賬13.37ETH。
事后很多人便通過inputData在區塊鏈上“聊天”向黑客“索要”虛擬貨幣,那么我們經常在區塊鏈瀏覽器中看到的inputData到底是什么?知道創宇區塊鏈安全實驗室?為您解答。
Inputdata
在以太坊協議中,當交易為合約創建時,inputdata是賬戶初始化程序的EVM代碼;
而當交易為消息調用時,inputdata是合約函數調用數據。
正常情況下簡單的消息調用如調用轉賬函數時需要填寫你要轉賬的地址_to和你要轉賬的數量_amount,這些基本信息都包含在inputdata里面。
我們通過一個調用合約的轉賬交易具體分析,來理解消息調用時inputdata的結構。
解析形式:
原始形式:
我們將原始的inputdata分為三個部分進行分析:
0xa9059cbb:函數標識符
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2:第一個參數為address即你要轉賬的地址,并補位到32字節即64個16進制字符
David Rubenstein:比特幣將繼續存在,對沒有在100美元時買入感到遺憾:金色財經報道,億萬富翁、私募股權巨頭Carlyle Group聯合創始人David Rubenstein在彭博社采訪中表示, 比特幣 (BTC) 將繼續存在,這要歸功于貝萊德 (BlackRock) 申請比特幣 ETF 現貨的機構興趣的增長,以及全球對政府無法控制的貨幣形式的普遍需求。 他說:“世界各地的很多人都希望能夠以政府無法知道他們擁有什么的貨幣進行交易,并且他們希望能夠正確或錯誤地轉移這種貨幣,所以我認為比特幣不會離開,會繼續發展”。
Rubenstein承認,他對沒有在比特幣100美元時買入感到遺憾。他表示,鑒于貝萊德等傳統金融巨頭最近的興趣,曾經嘲笑加密貨幣和整個行業的人們可能會被迫重新審視。Rubenstein此前曾透露,他個人投資于促進加密貨幣交易的公司,盡管他沒有直接擁有任何加密貨幣。[2023/8/9 21:33:08]
0000000000000000000000000000000000000000000054b7d8ed70650b290000:第二個參數為value即你要轉賬的數量,并補位到32字節即64個16進制字符
通過對比分析我們可以發現inputdata的基本結構為函數標識符參數。
函數標識符
這里的函數標識符即為函數選擇器,根據官方文檔可知函數選擇器是某個函數簽名的Keccak哈希的前4字節。
Uniswap部署至Base一天內交易量已突破1萬筆:金色財經報道,在集成上線一天之內,Uniswap(特別是V3)在 Base 上記錄了超過 11,700 筆交易和約365 萬美元的交易量。根據 CoinGecko 的數據,這使其成為 Base 上交易量第四大的 DEX,僅次于 RocketSwap、BaseSwap 和 SushiSwap。[2023/8/9 21:32:50]
我們可以通過代碼?bytess4(keccake256("transfer(adddress,uint256)"))?或者在線工具獲取這種函數簽名。
下圖可以看出加密結果的前四個字節?(a9059cbb)?跟inputdata中函數標識符一致。
這里之所以要將函數簽名截斷到四個字節是考慮到Gas成本問題。
在一筆交易中0字節需要支付4gas,而非0字節需要68gas也就是0字節的17倍。
在SHA-3加密中生成的32字節隨機字符串更傾向于多的非0字節,所以大概成本是32x68=2176gas,而截斷成本大概為4x68=272gas,可見截斷到四個字節能夠節省約8倍的gas費。
而函數標識符的作用是指定調用哪一個函數,在同一個合約中兩個不同函數的SHA-3簽名的前4字節相同的概率是十分小的,所以截斷到四個字節實際不會影響函數調用。
參數
CoinShares:上周數字資產投資產品凈流出3210萬美元:5月22日消息,據CoinShares報告顯示,上周數字資產投資產品凈流出3210萬美元,為連續第五周資金流出,流出資金總量已達2.32億美元。其中比特幣投資產品凈流出3270萬美元,以太坊投資產品凈流出100萬美元,做空比特幣的投資產品凈流出130萬美元。[2023/5/22 15:18:55]
在evm執行字節碼的約定中,靜態類型左補齊零至64長度,而動態類型則是右補齊零至64長度。
歸納下常見的靜態類型:uint,bool,Address,bytes,動態數組類型:bytes,string,address,bytes32.....
我們通過?pyethereum的ABI編碼函數?來研究不同數據類型的編碼方式。
靜態類型
先導入encode_abi函數
importrlp?fromethereum.abiimportencode_abi
我們以函數transfer(address,uint256)為例
>encode_abi(,
).hex()
000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2
數字證券交易平臺ADDX已將持有的Cybavo公司股份出售給Circle:11月21日消息,新加坡數字證券交易平臺ADDX宣布已將持有的數字資產基礎設施平臺Cybavo股份出售給USDC發行方Circle,交易細節暫未對外披露。據悉,這筆交易是Circle收購Cybavo公司計劃的一部分,Circle于今年六月與Cybavo簽署收購協議,具體收購金額未披露,而ADDX是該公司pre-A輪融資的投資方并持有大量股份。(FintechNews)[2022/11/21 7:51:56]
0000000000000000000000000000000000000000000000000000000000000001
對于小于32字節的定長數組會被自動填充到32字節:
>encode_abi("],).hex()
//自動填充0
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
BitMEX聯創:如果美國CPI數據達到7%或8%,加密貨幣可能將再次走低:11月10日消息,BitMEX聯合創始人Arthur Hayes在推特上表示,如果加密行業中最富有的人趙長鵬不能做這筆交易(收購FTX),沒有人可以做這筆交易。 FTX客戶的存款只能在破產法庭上恢復,這需要很多年才能解決。之前破產的Mt Gox債權人仍未收到資金,而且已經快十年了。Hayes向行業呼吁:“不是你的私鑰,也不是你的代幣。期望所有交易所嚴密保護客戶資金。不再從所謂的加密主要經紀人那里獲得信用。不再有禮貌地打電話給大型交易者要求追加保證金。沒有憐憫清算。”
Hayes還表示:“在外匯交易中損失資金的基金管理公司最初將退出交易,并減少其運營的交易場所數量。訂單的流動性將下降。把市場推到更低的水平,迫使其他杠桿率過高的參與者陷入困境,并不需要多少努力。記住,許多流動性提供者會在一旁觀望,舔舐傷口。如果美國CPI數據“火熱”,達到7%或8%,加密貨幣可能將再次走低。”[2022/11/10 12:42:25]
動態類型
動態類型編碼要稍微復雜一些,需要先計算偏移量進行占位處理,我們通過一個簡單的例子來具體說明。
>encode_abi(????","uint256","uint256"],
????,,]
).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將一些信息永久存儲在區塊鏈中,可以通過此項技術在食品藥品監管部門的產品防偽溯源、財稅部門的電子票據打假驗真、學術成果存證等方面實現應用落地。
尊敬的用戶:AOFEX將於2021年10月19日上線ARPA、ELON,具體時間安排如下:充提業務均已開啟ARPA交易時間:10月19日17:00ELON交易時間:10月19日18:00提示:以.
1900/1/1 0:00:00尊敬的用戶: BKEXGlobal舉辦的"VEMP交易特享空投"活動已于2021年9月21日16:00(UTC8)圓滿結束,感謝用戶的大力支持!活動獎勵將于5個工作日內發放,請留意賬戶余額變動.
1900/1/1 0:00:00尊敬的用戶: 為回饋廣大用戶,BKEX現舉行"POKERFI交易大賽"活動,詳情如下: 一、活動時間 2021年10月20日20:00-10月27日20:00 二、活動規則 1.POKERFI交.
1900/1/1 0:00:00尊敬的用戶:AOFEX將於2021年10月18日上線ROOK,具體時間安排如下:充提業務已開啟交易時間:10月18日18:30提示:以下內容來源于公告發布時的網絡現有資料,AOFEX已盡力核對.
1900/1/1 0:00:00尊敬的用戶:AOFEX將於2021年10月20日上線SSV,具體時間安排如下:充提業務均已開啟交易時間:10月20日12:00提示:以下內容來源于公告發布時的網絡現有資料,AOFEX已盡力核對.
1900/1/1 0:00:00一、項目介紹 DefiConnect在這里揭開非洲及其他地區整個數字經濟的神秘面紗。利用基于高度智能的區塊鏈技術流程,我們正在創建一個以去中心化生活方式為特征的生態系統,整個金融市場的積極轉變潛.
1900/1/1 0:00:00