買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > FIL幣 > Info

PUSH:智能合約安全系列文章反匯編·上篇_ChargeDeFi Charge

Author:

Time:1900/1/1 0:00:00

智能合約安全系列文章反匯編·上篇

前言

通過上一篇反編譯文章的學習,我們對智能合于opcode的反編譯有了基礎的學習,對于初學者來說,要想熟練運用還得多加練習。本篇我們來一塊學習智能合約反匯編,同樣使用的是OnlineSolidityDecompiler在線網站,智能合約反匯編對于初學者來說,較難理解,但對于智能合約代碼來說,只要能讀懂智能合約反匯編,就可以非常清晰的了解到合約的代碼邏輯,對審計合約和CTF智能合約都有非常大的幫助

反匯編內容

由于solidity智能合約的opcode經過反匯編后,指令較多,我們本篇分析簡明要義,以一段簡單合約代碼來分析其反匯編后的指令內容

合約源碼如下:

?pragma?solidity?^0.4.24;

?contract?Tee?{

?????

?????uint256?private?c;

?????function?a()?public?returns?(uint256)?{?self(2);?}

?????

?????function?b()?public?{?c++;?}

?????function?self(uint?n)?internal?returns?(uint256)?{

?????????

韓國檢方查獲并搜查涉嫌參與WEMIX大規模清算的兩家公司:8月4日消息,韓國首爾南部地方檢察廳于8月3日至4日兩天內,以上市游戲公司WeMade發行的虛擬資產WEMIX流通量欺詐等罪名,查獲并搜查了兩家曾參與WEMIX大規模清算的公司,但未透露具體是哪兩家公司。檢方發現WeMade通過這兩家公司出售了大量WEMIX,據悉正在調查這是否是在未告知用戶細節的情況下進行的交易。[2023/8/4 16:18:31]

?????????if?(n?<=?1)?{?return?1;?}

?????????return?n?*?self(n?-?1);

?????}

?}

合約部署后生成的opcode:

?0x6080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630dbe671f14604e5780634df7e3d0146076575b600080fd5b348015605957600080fd5b506060608a565b6040518082815260200191505060405180910390f35b348015608157600080fd5b5060886098565b005b60006094600260ab565b5090565b6000808154809291906001019190505550565b600060018211151560be576001905060cd565b60c86001830360ab565b820290505b9190505600a165627a7a7230582003f585ad588850fbfba4e8d96684e2c3fa427daf013d4a0f8e78188d4d475ee80029

Lido Finance DAO考慮引入雙重治理模式:金色財經報道,流動性質押解決方案Lido Finance正在為其代幣經濟展開全新的布局。LidoDAO業務發展貢獻者Marin Tvrdi?表示,其成員正在“推動”雙重治理模式。如果通過,它將賦予Lido用戶,特別是質押以太坊并持有stETH的用戶,將擁有對LDO持有者批準的治理提案的否決權。

根據Dune獲取的數據,Lido目前占據整個stake市場的31.7%。Coinbase排名第二(9.6%),其次是幣安(5%)。[2023/7/26 16:00:23]

通過在線網站OnlineSolidityDecompiler反匯編后結果如下:

反匯編分析

我們從第一部分指令label_0000開始

??0000????60??PUSH1?0x80

??0002????60??PUSH1?0x40

??0004????52??MSTORE

??0005????60??PUSH1?0x04

??0007????36??CALLDATASIZE

??0008????10??LT

??0009????60??PUSH1?0x49

??000B????57??*JUMPI

BTC Lightning交易比MasterCard和Visa便宜1000倍:金色財經報道,Glassnode表示,BTC Lightning交易比 MasterCard 和 Visa 便宜 1000 倍。[2023/4/23 14:21:52]

push指令是將字節壓入棧頂,push1-push32依次代表將1字節-32字節推壓入棧頂,這里PUSH10x80和PUSH10x40表示將0x80和0x40壓入棧頂,故目前棧的布局如下:

?1:?0x40

?0:?0x80

MSTORE指令表示從棧中依次出棧兩個值arg0和arg1,并把arg1存放在內存的arg0處。目前來說棧中已無數據,這里將0x80存放在內存0x40處。

PUSH10x04將0x04壓入棧中,CALLDATASIZE指令表示獲取msg.data調用數據,目前棧的布局如下:

?1:?calldata

?0:?0x04

LT指令表示將兩個棧頂的值取出,如果先出棧的值小于后出棧的值則把1入棧,反之把0入棧。這里如果calldata調用數據小于0x04字節,就將1入棧;如果calldata調用數據大于等于0x04字節,就將0入棧。目前棧的布局為:0:0或0:1。

繼續分析,PUSH10x49指令將0x49壓入棧頂,目前棧的布局為:

?1:0x49

?0:?0?或者?1

Crypto.com調整Visa卡獎勵政策,取消低等級卡用戶的返利獎勵:金色財經消息,Crypto.com發布公告稱,將調整其Visa卡的商家福利政策。現有Jade Green、Royal Indigo和Ruby Steel Crypto.com Visa卡用戶在2022年7月23日15:00 UTC之前激活的,將在6個月內(至2023年1月23日15:00 UTC)享受通過其卡片等級提供的商戶返利優惠(包括Spotify、Netflix)。此后,持卡人在這些商家消費時將不會收到返利,而是依據卡的等級。持有Icy White、Frosted Rose Gold或Obsidian卡的用戶將繼續享受他們現有的商戶返利優惠。[2022/7/24 2:33:37]

下面一條指令JUMPI指令表示從棧中依次出棧兩個值arg0和arg1,如果arg1的值為真則跳轉到arg0處,否則不跳轉。如果arg1值為1,則指令會跳轉到0x49處;如果arg1值為0,則會順序執行下一條指令。具體執行過程如下:

這里我們先來分析順序執行的內容label_000C,指令如下

??000C????60??PUSH1?0x00

??000E????35??CALLDATALOAD

??000F????7C??PUSH29?0x0100000000000000000000000000000000000000000000000000000000

貝萊德策略師:由于經濟衰退的迫近,歐洲央行可能會比美聯儲更早停止加息:7月18日消息,貝萊德策略師稱:在本周加息25個基點之后,由于經濟衰退的迫近,歐洲央行可能會比美聯儲更早停止加息。(金十)[2022/7/19 2:21:37]

??002D????90??SWAP1

??002E????04??DIV

??002F????63??PUSH4?0xffffffff

??0034????16??AND

??0035????80??DUP1

??0036????63??PUSH4?0x0dbe671f

??003B????14??EQ

??003C????60??PUSH1?0x4e

??003E????57??*JUMPI

目前經過上一步運算棧中布局為空,PUSH10x00指令將0壓入棧中。CALLDATALOAD指令接受一個參數,該參數可以作為發往智能合約的calldata數據的索引,然后從該索引處再讀取32字節數,由于前一個指令傳入的索引值為0,所以這一步指令會彈出棧中的0,將calldata32字節壓入棧中。PUSH29指令將29個字節壓入棧中。目前棧的布局如下:

?1:0x0100000000000000000000000000000000000000000000000000000000

?0:calldata值

SWAP1指令表示將堆棧頂部元素與之后的第一個元素進行交換,也就是0x0100000000000000000000000000000000000000000000000000000000和calldata值進行交換。接下來DIV指令表示取a//b的值,這里也就是calldata的32字節除29字節,由于除法的運算關系,這里進行除法運算后的字節為4位,估計大家也可以想到,這就是函數標識符4字節。那么目前棧的布局如下:

0:函數標識符4字節

PUSH4指令將0xffffffff壓入棧中。AND指令表示將取棧中前兩個參數進行AND運算,也就是函數標識符前四位0xffffffff進行AND操作,最終得到前四位的函數標識符及后28位為空補0的數值。下一條指令DUP1表示復制當前棧中第一個值到棧頂,目前棧中布局如下:

1:調用參數中的函數標識符?0:調用參數中的函數標識符

下一個指令PUSH4指令繼續將函數標識符0x0dbe671f壓入棧中,這里的標識符為a()函數,函數標識符我們可以在https://www.4byte.directory/在線網站查看。目前棧中布局如下:

2:0x0dbe671f?1:調用參數中的函數標識符?0:調用參數中的函數標識符

EQ指令表示取兩個棧頂值,如果兩值相等就將1入棧,反之將0入棧。下一步PUSH1將0x4e壓入棧頂。之后JUMPI指令從棧中依次出棧兩個值arg0和arg1,如果arg1的值為真則跳轉到arg0處,否則不跳轉。目前棧中布局如下:

2:0x4e?1:1?或?0??0:調用參數中的函數標識符

從前面三個指令可看出,EQ對函數標識符進行判斷后,下一步壓入0x4e是為了JUMPI進行判斷并跳轉。也就是說如果EQ判斷a()函數標識符相等,JUMPI執行后就會跳轉到0x4e的偏移位置;反之如果EQ判斷a()函數標識符不相等,JUMPI執行后就會順序執行下一條語句。目前棧中布局如下:

0:調用參數中的函數標識符

具體執行過程如下:

目前我們對label_0000和label_000C已進行分析,從上圖來看,該流程中除了順序執行外,label_0000處0x49,label_003F處0x76和label_000C處0x4e都有相應的跳轉條件。本篇我們繼續分析順序執行部分指令。首先來看第一部分label_003F:

?003F????80??DUP1?0040????63??PUSH4?0x4df7e3d0?0045????14??EQ?0046????60??PUSH1?0x76?0048????57??*JUMPI

由于目前棧中只有一條數據

DUP1指令表示復制棧中第一個值到棧頂。PUSH4指令將0x4df7e3d0函數標識符壓入棧頂,這里函數標識符代表b()函數,故目前棧中布局如下:

2:0x4df7e3d0?1:調用參數中的函數標識符?0:調用參數中的函數標識符

接下來三個指令會進行棧中值進行運算和偏移量跳轉設置,EQ指令把棧頂的兩個值出棧,如果0x4df7e3d0和調用參數中的函數標識符相等則把1入棧,否則把0入棧。PUSH1指令將偏移量0x76壓入棧中。JUMPI指令從棧中依次出棧兩個值:0x76和EQ指令判斷的值,如果EQ指令判斷的值為真則跳轉到0x76處,否則按順序執行不跳轉。故目前棧中布局如下:

2:0x76?1:1?或?0??0:調用參數中的函數標識符

我們假設EQ指令判斷的值為0,那么通過JUMPI指令條件判斷后,會按照順序繼續執行下一條指令。執行后,棧中依然只有一條指令。

我們繼續進行順序執行,label_0049:

?0049????5B??JUMPDEST?004A????60??PUSH1?0x00?004C????80??DUP1?004D????FD??*REVERT

JUMPDEST指令在該上下文中表示跳轉回來,也就是label_0000處0x49的跳轉。之后的兩條指令PUSH1和DUP1總體意思為將0壓入棧頂并復制,沒有實際意義。REVERT指令則表示并未有函數簽名匹配,從而停止執行,回滾狀態。

總結

由于反匯編內容過多,我們分為兩篇分享給大家,本篇我們對反匯編的內容進行了詳細講解,下篇我們將會繼續分析并串聯所有指令,梳理代碼邏輯。

來源:金色財經

Tags:PUSHUSH0X0ARGpush幣怎么樣PUSH價格0x0.ai: AI Smart ContractChargeDeFi Charge

FIL幣
COI:鄴峰:自反性與算法穩定性悖論_穩定幣USDT

為了使算法穩定幣長期可行,它們必須實現穩定。對于許多算法穩定幣而言,由于其固有的自反性,因此特別難以實現此任務。算法上的供應變化是反周期的,擴大供應量應降低價格,反之亦然.

1900/1/1 0:00:00
NFT:烤友記 | Conflux鏈上首款DeFi+NFT+RPG游戲 ConDragon首次預售開啟_WEB

《烤友記》系列,將精選Conflux網絡中創新、有趣、有潛力的生態項目,記錄他們“從出生到成長”的全過程,為大家展現異彩紛呈的Conflux生態.

1900/1/1 0:00:00
TBD:12/15 以太坊午間操作策略僅供參考_BOND

以太坊行情分析: 短線4小時圖來看,MA5日均線是一個比較強勁的支撐位,這個位置不被跌破,價格短期間難以形成很大的跌幅.

1900/1/1 0:00:00
穩定幣:波場鏈—智能合約—TRX_print幣怎么刪除

?波場鏈(Abc123b666)?波場鏈就是跑道,波場公鏈三大公鏈之首,點也不擁堵的 智能合約??.? 美SEC首席會計師:會計師事務所與加密公司合作時應牢記義務和風險:金色財經報道.

1900/1/1 0:00:00
Filecoin:“高富帥”階層開始涉足Filecoin -請珍惜時代給普通人逆襲的機會_filecoin幣在哪個交易所

“高富帥”階層開始涉足Filecoin?請珍惜時代給普通人逆襲的機會 70后炒股、80后炒房、90后炒幣、00后炒鞋智者說,生活中總是需要一些愛好和樂趣.

1900/1/1 0:00:00
TUR:實戰解析幣圈:12/15 以太坊實力帶單 多單斬獲18個點位 相信我 做奇跡的創造者_Vivid Labs

口說不如身逢,耳聞不如目見,留得五湖明月在,不愁無處下金鉤,鬧里有錢,靜外安身,酒中不語真君子,財上分明大丈夫.

1900/1/1 0:00:00
ads