
在惡意軟件分析,軟件逆向工程和更廣泛的安全研究領域中,修補程序集代碼改變現有程序的行為並不少見。該項目擴展了流行的IDA Pro拆卸器,以創建一個為快速迭代而設計的更強大的交互式二進制補丁工作流。
該項目目前由無處不在的Keystone發動機的次要叉子提供動力,支持X86/X64和ARM/ARM64補丁,併計劃在以後的版本中啟用其餘的Keystone Architectures。
特別感謝Hex射線支持此插件的開發。
該插件需要IDA 7.6和Python 3。它支持Windows,Linux和MacOS。
請注意,IDA的較舊版本(8.2及以下)與Python 3.11及以上不兼容。
在IDA控制台中運行以下行以自動安裝插件:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())另外,可以通過從版本頁面下載各自平台的可分配插件包並將其解壓縮到插件文件夾來手動安裝插件。
強烈建議您將此插件安裝到IDA的用戶插件目錄中:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))修補插件將自動加載支持的架構(X86/X64/ARM/ARM64),並將相關的補丁操作注入右鍵單擊IDA拆卸視圖的上下文菜單:

以下各節描述了上下文修補操作的完整列表。
可以通過右鍵單擊上下文菜單中的“彙編”啟動“主修補”對話框。它模擬了基本的IDA拆卸視圖,該視圖可用於快速連續編輯一個或幾個指令。

彙編線是一個可編輯的字段,可用於實時修改說明。按Enter將提交(補丁)輸入的指令到數據庫中。
您當前的位置(又稱您的光標)將始終以綠色突出顯示。在進行補丁之前,將以紅色突出顯示,將因您的補丁 /編輯而被關閉的說明。

最後,可以使用UP和DOWN箭頭鍵,同時仍集中在可編輯的彙編文本字段上,以在不使用鼠標的情況下快速移動光標上下拆卸視圖。
最常見的修補操作是刪除一個或多個說明。因此,在右鍵單擊菜單中,NOP操作將始終可見。

單個說明可以被淘汰,以及選定的說明範圍。
強迫有條件的跳躍始終執行“好”路徑是另一個常見的修補操作。插件僅在右鍵單擊有條件的跳躍指令時顯示此操作。

如果您永遠不希望有條件的跳躍,那麼您就可以改用它!
可以隨時通過修補子菜單將補丁保存(應用)到所選的可執行文件中。快速應用程序使使用相同的設置保存後續補丁更快。

該插件還將積極努力保留原始可執行文件的備份( .bak ),用於在每次保存過程中使用當前的數據庫補丁。
最後,如果您對補丁不滿意,則可以右鍵單擊修補程序(黃色)指令塊,以將其恢復為原始價值。

雖然將字節恢復為原始價值很“容易”,但將分析恢復到以前的狀態可能是“難以”的。恢復補丁可能有時需要其他人類修復程序。
時間和動機允許,未來的工作可能包括:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
我歡迎外部貢獻,問題和功能請求。如果您希望將其考慮以將來發布,請向該存儲庫的develop分支提出任何拉動請求。