Binary Ninja提供了許多的方式來修改二進制文件,大致可以分為低級和高級模式兩種, 其中低級模式主要就是原始碼的十六進制編輯和匯編模式, 高級模式可以使用內(nèi)置的C編譯器直接書寫C代碼來進行操作。有需要的小伙伴歡迎來西西下載體驗。
軟件概述:
我們經(jīng)常會收到這樣的問題,比如:
Binary Ninja比xx軟件好在哪里呢?
Binary Ninja這個軟件最主要的作用是什么呢?
對于上面的兩個問題,簡要的回答起來是這樣的:
Binary Ninja相對于其他類似軟件來說, 能夠更快、更便捷的修改二進制文件
Binary Ninja最主要的作用是提供了一個可供操作二進制文件的平臺,你甚至還可以在平臺的基礎上基于API來編寫更方便的腳本和插件
那么我們?yōu)槭裁匆薷默F(xiàn)有的二進制文件呢?總結起來大致有一下幾種情況:
無需長時間的等待編譯完畢,可以快速的測試修改結果
對程序進行黑盒評測
維護或者升級老程序(一般是沒有源碼對情況)
通過修改二進制文件學習現(xiàn)有的一個軟件系統(tǒng)或者修復軟件問題
修復第三方庫的安全問題
反混淆
軟件特征:
HEX編輯模式
是最直觀的修改方式,也是最簡易的一種修改方式。如上圖所示,可以通過右下角的菜單按鈕或者熱鍵H打開(^ + H),這里要注意一下,這里介紹的熱鍵如果沒有效果,可以去參考 用戶文檔.
這種編輯模式下,可以一邊修改,一邊實時的看修改結果,從而到達比較高的修改測試效率,一次修改過程大致的操作步驟如下:
先在圖形視圖或者線性匯編試圖中找一個準備修改的函數(shù)
使用菜單 view -> Split進行一次屏幕視圖拆分
現(xiàn)在可以隨意調(diào)整拆分的視圖,看著舒服就行,把其中一個視圖切換到hex編輯模式,并修改一下上面選定的函數(shù)。你這邊修改,另一個視圖中就會看到同步的修改結果展示,一般情況下,如果修改一個比較大的函數(shù)的時候,操作反應可能會慢一點。編輯器也支持大塊的復制粘貼操作。
結構體實時修改
這個實時預覽功能說起來比反匯編字節(jié)碼有用多了, 這里給出一個實時修改結構體并查看結構體解碼結果的的演示視頻:
這里本來是一段演示視頻,但是是youtube的視頻源,沒有辦法觀看,請在原文鏈接中翻墻觀看(sorry),視頻地址是:http://www.youtube.com/embed/sCKiG_xdNSc
點兩下鼠標就搞定
上面介紹的方法,需要你對二進制的內(nèi)容甚至是系統(tǒng)架構有所了解,對于大多人來說可能還有點困難,但是在Binary Ninja這個平臺上,你甚至不必了解那么多的知識也可以通過平臺來完成二進制文件的修改工作。比如,專有的 右鍵修改菜單,有了這個菜單的幫助,你只需要點兩下鼠標就可以了
這個彈出菜單里面有不少專門用來修改條件分支跳轉的功能,通過這些選項你可以強制性的把一個條件分支改成 永遠跳轉或者永不跳轉。使用 Invert Brach功能,可以進行條件反轉,這些功能使用起來很簡單命令,但是確實能很方便快速的實現(xiàn)你想要的結果。
還有其他的一些有用的功能,比如把一些匯編指令給Nop掉,也就是說,你選中一條指令,然后用這個功能來進行Nop指令替換,這里系統(tǒng)還會自動的進行剩余空間填充,比如原先的指令占4個直接,你直接把這條指令給Nop調(diào)用,那么剩下的3個字節(jié)系統(tǒng)會自動的給你也填充成Nop指令,這個功能對于那種變長指令系統(tǒng)還是很實用的。
這里需要注意的一點是, 如果你把鼠標放到一個條件分支上,這個時候菜單里面可能沒有 Convert to NOP這個選項,因為和 as Never功能是一樣的,軟件顯示一個就夠了。
單行編輯
在Patch這個菜單中,還有一些隱藏的菜單項,比如單行編輯功能。使用單行編輯功能,你可以快速的以匯編形式修改單行指令。選擇一條需要修改的指令,按快捷鍵e或者使用右鍵菜單Patch/Edit current line選項,然后就可以看到選中那條匯編指令就變成了可編輯狀態(tài),編輯完成之后按回車即可,Binary Ninja會自動把修改結果應用到二進制文件中去。
如果編輯匯編的時候,新指令比原先的指令長度小的話,工具會自動填充余下的空間為NOP指令,比如在 x86 x64這些變長指令系統(tǒng)上。
附加說明:工具會盡最大努力保證匯編和反匯編的正確性, 如果遇到指令錯誤或者不支持的指令,可以聯(lián)系我們,把這些特殊的情況跟我們溝通一下