:啟動 Ghidra 并啟用 BSimSearchPlugin 插件)
Ghidra BSim 教程一啟動 Ghidra 并啟用 BSimSearchPlugin 插件【免費(fèi)下載鏈接】ghidraGhidra is a software reverse engineering (SRE) framework項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gh/ghidra本文是 Ghidra BSim 教程系列的第一步講解如何啟動 Ghidra、創(chuàng)建非共享項(xiàng)目并打開代碼瀏覽器Code Browser再通過File → Configure對話框啟用BSimSearchPlugin插件。讀完本篇后你將理解 BSimBehavioral Similarity行為相似性搜索插件在 Ghidra 中的啟用機(jī)制知道啟用成功后會獲得哪些菜單與快捷入口并能順利銜接后續(xù)的 BSim 數(shù)據(jù)庫創(chuàng)建與相似函數(shù)查詢操作。BSim 是什么BSim 用于回答逆向工程中的一類典型問題這個可執(zhí)行文件靜態(tài)鏈接了哪些庫當(dāng)前可執(zhí)行文件與我分析過的另一個可執(zhí)行文件共享哪些代碼同一可執(zhí)行文件的版本 1 和版本 2 之間有什么差異這個函數(shù)是否來自某個開源庫BSim 的基本思路是為二進(jìn)制中的每個函數(shù)生成一個特征向量feature vector。向量由 Ghidra 反編譯器生成每個特征表示該函數(shù)數(shù)據(jù)流和/或控制流的一小片。反編譯器會對特征向量做歸一化處理使不同但功能等價(jià)的代碼片段往往產(chǎn)生相同的特征而常量值、寄存器名、數(shù)據(jù)類型等屬性被刻意排除在特征之外。向量之間使用余弦相似度cosine similarity比較——由編譯器差異、目標(biāo)架構(gòu)差異或源代碼小改動造成的向量差異通常表現(xiàn)為“接近但不完全相同”。從源碼結(jié)構(gòu)看啟用教程中勾選的BSimSearchPlugin正是實(shí)現(xiàn)上述查詢能力的 GUI 插件。其 BSimSearchPlugin.java 的聲明為PluginInfo(category BSim, description This plugin allows users to search selected functions against a database of previously analyzed functions and returns a table of similar functions, packageName BsimPluginPackage.NAME, shortDescription Search Bsim database(s) for similar functions, status PluginStatus.RELEASED) public class BSimSearchPlugin extends ProgramPlugin {注意兩個關(guān)鍵點(diǎn)它繼承自ProgramPlugin按程序生效的插件因此才會出現(xiàn)在File → Configure對話框的插件配置列表中其插件類別為BSim——這與配置對話框中 “BSim entry” 的歸類一致。使用 BSim 的三大組件理解啟用步驟之前先明確 BSim 的三大組成詳見 BSim 教程引言BSim 客戶端即一個啟用了 BSim 插件的 Ghidra 實(shí)例逆向分析在這里進(jìn)行BSim 數(shù)據(jù)庫存儲函數(shù)的 BSim 簽名特征向量以及每個函數(shù)及其所屬可執(zhí)行文件的元數(shù)據(jù)包括關(guān)聯(lián) Ghidra 程序的 ghidra:// URL但不存儲反匯編或反編譯結(jié)果Ghidra 項(xiàng)目存儲用于填充 BSim 數(shù)據(jù)庫的已分析程序。拿到一條 BSim 匹配后BSim 客戶端可通過 ghidra:// URL 從項(xiàng)目中取回程序做并排對比一個 BSim 數(shù)據(jù)庫可以引用多個 Ghidra 項(xiàng)目。支持的數(shù)據(jù)庫后端有三種PostgreSQL隨 Ghidra 發(fā)行版附帶源碼、插件與構(gòu)建腳本從共享項(xiàng)目填充服務(wù)端不支持 Windows、Elasticsearch由BSimElasticPlugin擴(kuò)展提供需安裝到已有 Elasticsearch 數(shù)據(jù)庫以及 H2最簡單文件級后端、無需安裝數(shù)據(jù)庫服務(wù)器、全平臺支持但不適合大規(guī)模或多用戶場景可從本地或共享項(xiàng)目填充。H2 是本教程采用的后端因此第一步只需一個本地 Ghidra 項(xiàng)目即可走通全流程。第一步啟動 Ghidra 并創(chuàng)建非共享項(xiàng)目按照 啟用教程 的原始步驟啟動LaunchGhidra為本教程創(chuàng)建一個新的非共享項(xiàng)目non-shared project啟動代碼瀏覽器Code Browser。選擇非共享本地項(xiàng)目的原因是H2 后端既可以從非共享項(xiàng)目也可以從共享項(xiàng)目填充數(shù)據(jù)庫而本地項(xiàng)目不依賴 Ghidra 服務(wù)器是環(huán)境要求最低的路徑。后續(xù)教程中創(chuàng)建與填充 H2 數(shù)據(jù)庫的腳本CreateH2BSimDatabaseScript.java、AddProgramToH2BSimDatabaseScript.java都是在這個本地項(xiàng)目里運(yùn)行的。第二步通過 File → Configure 啟用 BSim 插件在 Code Browser 中執(zhí)行以下操作打開菜單File → Configure在彈出的程序配置對話框中點(diǎn)擊BSim條目旁的Configure鏈接在隨后打開的對話框中確認(rèn)BSimSearchPlugin復(fù)選框處于勾選狀態(tài)。該對話框是 Ghidra 的按程序工具配置界面列出當(dāng)前程序可用的插件類別每個類別提供一個Configure鏈接鏈接打開的對話框中包含該類別下各個插件的啟用/禁用復(fù)選框與插件級配置項(xiàng)。BSimSearchPlugin作為ProgramPlugin注冊在BSim類別下因此出現(xiàn)在 BSim 條目的配置對話框中未勾選時其提供的 BSim 菜單項(xiàng)在 Code Browser 中不會出現(xiàn)。啟用成功后能得到什么勾選BSimSearchPlugin后代碼瀏覽器會獲得如下入口由 BSimSearchPlugin.java 的createActions()方法注冊BSim 主菜單BSim → Perform Overview...對當(dāng)前程序的全部非樁函數(shù)做一次簽名概覽分析BSim → Search Functions...打開 BSim 查詢對話框?qū)⒐鈽?biāo)所在函數(shù)或選中范圍內(nèi)的函數(shù)與 BSim 數(shù)據(jù)庫中的函數(shù)做相似性比對結(jié)果以表格呈現(xiàn)BSim → Manage Servers管理可查詢的 BSim 服務(wù)器對應(yīng)不同數(shù)據(jù)庫后端/連接方式。右鍵快捷菜單Listing 與反編譯器窗口中反匯編窗口右鍵BSim → Search Function(s)/Search Function(s)...反編譯器窗口右鍵BSim → Search Function/Search Function...光標(biāo)需位于函數(shù)名 token 上。其中不帶省略號...的快捷入口會直接沿用上一次查詢所用的服務(wù)器與設(shè)置發(fā)起搜索帶省略號的重開對話框。源碼中還有一個值得注意的限制插件內(nèi)部通過checkBusy()保證同一時間只允許一個 BSim 查詢或概覽任務(wù)重復(fù)觸發(fā)會提示 “Only one BSim query permitted at a time!”見 BSimSearchPlugin.java。此外插件還內(nèi)置了針對各菜單項(xiàng)的幫助主題如BSimSearchPlugin幫助頁見 BSimSearch.html在 Code Browser 中可通過 Help 菜單檢索 BSim 相關(guān)文檔。驗(yàn)證與銜接下一步啟用完成后可以簡單自檢代碼瀏覽器頂部應(yīng)出現(xiàn)BSim菜單且其下有Perform Overview...、Search Functions...、Manage Servers三個條目若沒有請重新檢查BSimSearchPlugin復(fù)選框是否勾選部分情況下需要關(guān)閉并重新打開已打開的程序配置才會生效。啟用只是教程的起點(diǎn)BSim 客戶端本身不存儲任何簽名查詢前必須先有數(shù)據(jù)庫。接下來的教程步驟是創(chuàng)建并填充一個 H2 后端的 BSim 數(shù)據(jù)庫——運(yùn)行CreateH2BSimDatabaseScript.java腳本創(chuàng)建數(shù)據(jù)庫導(dǎo)入并分析 Ghidra 發(fā)行版自帶的GPL/DemanglerGnu/os/linux_x86_64/demangler_gnu_v2_41可執(zhí)行文件再用AddProgramToH2BSimDatabaseScript.java將其簽名寫入數(shù)據(jù)庫詳見 從 GUI 創(chuàng)建和填充 BSim 數(shù)據(jù)庫之后的章節(jié)將演示基本查詢、過濾器、結(jié)果評估與命令行用法。適用前提小結(jié)本教程面向從本地文件如ghidraRun啟動的標(biāo)準(zhǔn) Ghidra 安裝H2 后端不需要額外安裝數(shù)據(jù)庫服務(wù)器是本教程推薦路徑PostgreSQL/Elasticsearch 后端有各自的安裝要求且服務(wù)端/數(shù)據(jù)庫服務(wù)對運(yùn)行平臺有限制PostgreSQL 服務(wù)端不支持 Windows大型數(shù)據(jù)庫需選用數(shù)據(jù)庫模板Ghidra 提供 medium約 1000 萬條向量與 large約 1 億條向量兩種模板模板在建庫時決定 LSH 索引的具體參數(shù)?!久赓M(fèi)下載鏈接】ghidraGhidra is a software reverse engineering (SRE) framework項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gh/ghidra創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考