【區塊鏈安全 | 第九篇】基于Heimdall設計的智能合約反編譯項目

文章目錄

    • 背景
    • 目的
    • 安裝
      • 1、安裝 Rust
      • 2、克隆 heimdall-dec
      • 3、編譯 heimdall-dec
      • 4、運行 heimdall-dec
    • 使用說明
      • 1、訪問 Web 界面
      • 2、輸入合約信息
      • 3、查看反編譯結果
    • 實戰演示
      • 1、解析普通合約
      • 2、解析代理合約

在這里插入圖片描述

背景

在區塊鏈安全研究中,智能合約的審計和分析至關重要。

RPC端點為與區塊鏈節點(如以太坊、Polygon、BSC等)之間的通信提供了一種方式。通過RPC端點,任何人都可以訪問區塊鏈上合約的字節碼、狀態數據等信息。而合約地址則是定位特定智能合約的唯一標識符。

通過RPC端點和合約地址,我們能夠與區塊鏈節點上的合約進行通信,查詢該合約的字節碼。合約字節碼是編譯后的 Solidity 代碼,包含了合約的執行邏輯,但不以可讀的形式展示。

Heimdall 是一款智能合約反編譯工具,通過反編譯字節碼,可將其還原為易于理解的可讀 Solidity 代碼。

基于 Heimdall 的反編譯功能,heimdall-dec 項目實現了一個 Web 前端,能夠通過圖形化界面展示反編譯后的合約代碼。它不僅支持普通合約的反編譯,還能自動解析代理合約(Proxy Contract),并找到對應的實現合約(Implementation Contract)進行反編譯,極大地方便了合約分析工作。

該項目的 GitHub 地址如下:

https://github.com/smartdone/heimdall-dec

目的

本篇文章的目的:

1.介紹 heimdall-dec 反編譯工具的安裝和使用方法。
2.解析智能合約,包括普通合約和代理合約。
3.實戰演示,展示如何使用 heimdall-dec 反編譯合約。

安裝

由于 heimdall-dec 是基于 Rust 開發的,首先需要安裝 Rust。

1、安裝 Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安裝完成后,執行以下命令確認 Rust 是否安裝成功:

source $HOME/.cargo/env  # 讓終端識別 Rust 命令rustc --version

在這里插入圖片描述

2、克隆 heimdall-dec

克隆項目代碼倉庫:

git clone https://github.com/smartdone/heimdall-dec.git
cd heimdall-dec

在這里插入圖片描述

3、編譯 heimdall-dec

使用 cargo build 進行編譯:

cargo build --release

在這里插入圖片描述

編譯完成后,生成的可執行文件位于:

./target/release/heimdall-dec

4、運行 heimdall-dec

./target/release/heimdall-dec

在這里插入圖片描述

此時,heimdall-dec 將啟動一個本地 Web 服務器,默認監聽 http://127.0.0.1:8080。

使用說明

1、訪問 Web 界面

在瀏覽器中打開:http://127.0.0.1:8080

在這里插入圖片描述

2、輸入合約信息

RPC 鏈接:輸入區塊鏈網絡的 RPC 端點(可從 Chainlist 獲取)。例如:

以太坊主網:https://mainnet.infura.io/v3/YOUR_API_KEYPolygon:https://polygon-rpc.comBSC:https://bsc-dataseed.binance.org

合約地址:輸入需要反編譯的智能合約地址。

3、查看反編譯結果

點擊提交后,Heimdall 將查詢該地址的合約字節碼。如果是代理合約,自動解析其實現合約,反編譯字節碼并顯示可讀的 Solidity 代碼。

實戰演示

1、解析普通合約

Polygon(Matic)對應的 RPC 為:

https://polygon-rpc.com

該網絡上的 USDC(Token USD Coin)智能合約地址為:

0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174

輸入 RPC 和合約地址,點擊提交:

在這里插入圖片描述

查看解析后的 Solidity 代碼,分析其邏輯:

在這里插入圖片描述

2、解析代理合約

在智能合約部署之后,通常無法修改其邏輯代碼。一旦合約發布,就無法直接更新或者修復漏洞。為了解決這個問題,代理合約采用了將邏輯合約和存儲分離的設計。代理合約只是一個轉發請求的合約,而實際的業務邏輯由實現合約(Implementation Contract)來執行。如果發現某些漏洞或需要添加新功能時,開發者只需要部署新的實現合約,并將代理指向新合約。

許多 DeFi 項目使用代理合約(如 Transparent Proxy、UUPS Proxy),直接查詢合約無法獲取完整代碼。

但該項目能夠解析代理合約,并找到對應的實現合約(Implementation Contract)進行反編譯。

舉個例子,提交:

RPC:https://eth.llamarpc.com
Address:0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9

輸出結果如下圖所示:

// proxy address: 0x5D4Aa78B08Bc7C530e21bf7447988b1Be7991322

在這里插入圖片描述

這意味著:

  • 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9 是一個代理合約(Proxy Contract)
  • 0x5D4Aa78B08Bc7C530e21bf7447988b1Be7991322 是實現合約(Implementation Contract)

同時,也可通過終端查看輸出(不含源碼):

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75111.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用 PCI-Express 交換機實現面向未來的推理服務器

在數據中心系統的歷史上,沒有比被 Nvidia 選為其 AI 系統的組件供應商更高的贊譽了。 這就是為什么新興的互連芯片制造商 Astera Labs 感到十分高興,因為該公司正在 PCI-Express 交換機、PCI-Express 重定時器和 CXL 內存控制器方面與 Broadcom 和 Marv…

智能交通預警桿:守護道路安全的科技先鋒

在城市化進程加速以及機動車保有量持續增長的背景下,道路交通安全與擁堵問題漸趨嚴峻。智能交通預警桿應時而生,其集成多種高科技功能,正逐步成為現代城市交通管理中至關重要的智能裝備,對于提升交通效率、保障出行安全發揮著關鍵…

flink 基站與服務器長連接,每次連接和斷開都會上報數據,統計過去一小時每個基站斷開次數和時長

模擬生成數據 CREATE TABLE ods_station_log (base_station_id int, -- 基站IDevent_type int, -- 事件類型: connect/disconnectevent_time TIMESTAMP_LTZ(3), -- 事件時間WATERMARK FOR event_time AS event_time - INTERVAL 5 SECOND -- 允許5秒亂序 ) WITH …

自定義一些C語言的字符串函數

一、代碼如下 (一)十六進制字符串轉十進制整數 #include<stdio.h> // 把一個十六進制字符轉成十進制整數 int hexToInt(char hexs[]){ int index; int k 0; for(k 0; ; k) { if(hexs[k] \0) { index k; break; …

核函數(機器學習深度學習)

一、核函數的基本概念 核函數&#xff08;Kernel Function&#xff09; 是機器學習中處理非線性問題的核心工具&#xff0c;通過隱式映射將數據從原始空間轉換到高維特征空間&#xff0c;從而在高維空間中實現線性可分或線性建模。其數學本質是計算兩個樣本在高維空間中的內積…

微服務架構中的精妙設計:服務注冊/服務發現-Eureka

一.使用注冊中心背景 1.1服務遠程調用問題 服務之間遠程調?時, 我們的URL是寫死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 缺點&#xff1a; 當更換機器, 或者新增機器時, 這個URL就需要跟著變更, 就需要去通知所有的相關服…

極速版:棧的內存/局部變量表/堆的內存細分

1. 棧的存儲 每個線程都有自己的棧&#xff0c;棧中數據以棧幀&#xff08;Stack Frame&#xff09;為基本單位 線程上正在執行的每個方法都各自對應一個棧楨&#xff08;Stack Frame&#xff09; 棧楨是一個內存區塊&#xff0c;是一個數據集&#xff0c;維系著方法執行過程…

【操作系統】內存泄漏 vs 內存碎片

【操作系統】內存泄漏 vs 內存碎片 內存泄漏&#xff08;Memory Leak&#xff09; vs 內存碎片&#xff08;Memory Fragmentation&#xff09;1. 內存泄漏&#xff08;Memory Leak&#xff09;2. 內存碎片&#xff08;Memory Fragmentation&#xff09;3. 內存泄漏 vs 內存碎片…

力扣HOT100之矩陣:73. 矩陣置零

這道題我沒有想到什么好的辦法&#xff0c;直接暴力AC了&#xff0c;直接遍歷兩次矩陣&#xff0c;第一次遍歷用兩個向量分別記錄出現0的行數和列數&#xff0c;第二次遍歷就判斷當前的元素的行數或者列數是否出現在之前的兩個向量中&#xff0c;若出現了就直接置零&#xff0c…

?Flink/Kafka在python中的用處

一、基礎概念 1. ?Apache Kafka 是什么&#xff1f; ?核心功能&#xff1a;Kafka 是一個分布式流處理平臺&#xff0c;主要用于構建實時數據管道和流式應用程序。?核心概念&#xff1a; ?生產者&#xff08;Producer&#xff09;?&#xff1a;向 Kafka 發送數據的程序。…

推薦系統(十八):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用

在商品推薦系統中&#xff0c;粗排和精排環節的知識蒸餾方法主要通過復雜模型&#xff08;Teacher&#xff09;指導簡單模型&#xff08;Student&#xff09;的訓練&#xff0c;以提升粗排效果及與精排的一致性。本文將以淘寶的一篇論文《Privileged Features Distillation at …

深度學習四大核心架構:神經網絡(NN)、卷積神經網絡(CNN)、循環神經網絡(RNN)與Transformer全概述

目錄 &#x1f4c2; 深度學習四大核心架構 &#x1f330; 知識點概述 &#x1f9e0; 核心區別對比表 ? 生活化案例理解 &#x1f511; 選型指南 &#x1f4c2; 深度學習四大核心架構 第一篇&#xff1a; 神經網絡基礎&#xff08;NN&#xff09; &#x1f330; 知識點概述…

R語言對偏態換數據進行轉換(對數、平方根、立方根)

我們進行研究的時候經常會遇見偏態數據&#xff0c;數據轉換是統計分析和數據預處理中的一項基本技術。使用 R 時&#xff0c;了解如何正確轉換數據有助于滿足統計假設、標準化分布并提高分析的準確性。在 R 中實現和可視化最常見的數據轉換&#xff1a;對數、平方根和立方根轉…

第十四屆藍橋杯省賽電子類單片機學習記錄(客觀題)

01.一個8位的DAC轉換器&#xff0c;供電電壓為3.3V&#xff0c;參考電壓2.4V&#xff0c;其ILSB產生的輸出電壓增量是&#xff08;D&#xff09;V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析&#xff1a; ILSB&#xff08;最低有效位&#xff09;的電壓增量計算公式…

HarmonyOSNext_API16_媒體查詢

媒體查詢條件詳解 媒體查詢是響應式設計的核心工具&#xff0c;通過判斷設備特征動態調整界面樣式。其完整規則由媒體類型、邏輯操作符和媒體特征三部分組成&#xff0c;具體解析如下&#xff1a; 一、媒體查詢語法結構 基本格式&#xff1a; [媒體類型] [邏輯操作符] (媒體特…

Python+拉普拉斯變換求解微分方程

引言 在數學和工程學中,微分方程廣泛應用于描述動態系統的行為,如電路、電氣控制系統、機械振動等。求解微分方程的一個常見方法是使用拉普拉斯變換,尤其是在涉及到初始條件時。今天,我們將通過 Python 演示如何使用拉普拉斯變換來求解微分方程,并幫助大家更好地理解這一…

【算法】手撕快速排序

快速排序的思想 任取一個元素作為樞軸&#xff0c;然后想辦法把這個區間劃分為兩部分&#xff0c;小于等于樞軸的放左邊&#xff0c;大于等于樞軸的放右邊 然后遞歸處理左右區間&#xff0c;直到空或只剩一個 具體動畫演示詳見 數據結構合集 - 快速排序(算法過程, 效率分析…

《八大排序算法》

相關概念 排序&#xff1a;使一串記錄&#xff0c;按照其中某個或某些關鍵字的大小&#xff0c;遞增或遞減的排列起來。穩定性&#xff1a;它描述了在排序過程中&#xff0c;相等元素的相對順序是否保持不變。假設在待排序的序列中&#xff0c;有兩個元素a和b&#xff0c;它們…

深度學習篇---paddleocr正則化提取

文章目錄 前言一、代碼總述&介紹1.1導入必要的庫1.1.1cv21.1.2re1.1.3paddleocr 1.2初始化PaddleOCR1.3打開攝像頭1.4使用 PaddleOCR 進行識別1.5定義正則表達式模式1.6打印提取結果1.7異常處理 二、正則表達式2.1簡介2.2常用正則表達式模式及原理2.2.1. 快遞單號模式2.2.2…

JavaScript DOM與元素操作

目錄 DOM 樹、DOM 對象、元素操作 一、DOM 樹與 DOM 對象 二、獲取 DOM 元素 1. 基礎方法 2. 現代方法&#xff08;ES6&#xff09; 三、修改元素內容 四、修改元素常見屬性 1. 標準屬性 2. 通用方法 五、通過 style 修改樣式 六、通過類名修改樣式 1. className 屬…