/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
Binary Ninja(逆向編譯平台)是一款編譯工具,提供了許多的方式來修改二進製文件,大致可以分為低級和高級模式兩種,其中低級模式主要就是原始碼的十六進製編輯和彙編模式,高級模式可以使用內置的C編譯器直接書寫C代碼來進行操作!
我們經常會收到這樣的問題,比如:
Binary Ninja比xx軟件好在哪裏呢?
Binary Ninja這個軟件最主要的作用是什麼呢?
對於上麵的兩個問題,簡要的回答起來是這樣的:
Binary Ninja相對於其他類似軟件來說, 能夠更快、更便捷的修改二進製文件
Binary Ninja最主要的作用是提供了一個可供操作二進製文件的平台,你甚至還可以在平台的基礎上基於API來編寫更方便的腳本和插件
那麼我們為什麼要修改現有的二進製文件呢?總結起來大致有一下幾種情況:
無需長時間的等待編譯完畢,可以快速的測試修改結果
對程序進行黑盒評測
維護或者升級老程序(一般是沒有源碼對情況)
通過修改二進製文件學習現有的一個軟件係統或者修複軟件問題
修複第三方庫的安全問題
反混淆
現代UI
並非所有的黑客都會忽略UI/UX。Binary Ninja使用了現代的UX範式,如果默認的主題不適合你,你可以使用眾多替代品中的一種。
廣泛的API
我們的Python和C++綁定能夠與平台的幾乎所有元素進行交互。UI、ILs、反彙編、頭文件、我們的類型解析器等等。
強大的分析
代碼和數據交叉引用、基於置信度的類型傳播、值集分析等--所有這些都是自動完成的,並且能夠以一種與架構無關的方式進行腳本。
二進製忍者中級語言(BNIL)
我們創建了一個強大而又易於閱讀的IL係列,涵蓋了分析的多個階段。最低級別接近彙編,更高的級別接近反編譯輸出。對於不支持的架構,實現提升器也極其簡單
HEX編輯模式
是最直觀的修改方式,也是最簡易的一種修改方式。如上圖所示,可以通過右下角的菜單按鈕或者熱鍵H打開(^ + H),這裏要注意一下,這裏介紹的熱鍵如果沒有效果,可以去參考 用戶文檔.
這種編輯模式下,可以一邊修改,一邊實時的看修改結果,從而到達比較高的修改測試效率,一次修改過程大致的操作步驟如下:
先在圖形視圖或者線性彙編試圖中找一個準備修改的函數
使用菜單 view -> Split進行一次屏幕視圖拆分
現在可以隨意調整拆分的視圖,看著舒服就行,把其中一個視圖切換到hex編輯模式,並修改一下上麵選定的函數。你這邊修改,另一個視圖中就會看到同步的修改結果展示,一般情況下,如果修改一個比較大的函數的時候,操作反應可能會慢一點。編輯器也支持大塊的複製粘貼操作。
結構體實時修改
這個實時預覽功能說起來比反彙編字節碼有用多了, 這裏給出一個實時修改結構體並查看結構體解碼結果的的演示視頻:
這裏本來是一段演示視頻,但是是youtube的視頻源,沒有辦法觀看,請在原文鏈接中翻牆觀看(sorry),視頻地址是:http://www.youtube.com/embed/sCKiG_xdNSc
點兩下鼠標就搞定
上麵介紹的方法,需要你對二進製的內容甚至是係統架構有所了解,對於大多人來說可能還有點困難,但是在Binary Ninja這個平台上,你甚至不必了解那麼多的知識也可以通過平台來完成二進製文件的修改工作。比如,專有的 右鍵修改菜單,有了這個菜單的幫助,你隻需要點兩下鼠標就可以了
這個彈出菜單裏麵有不少專門用來修改條件分支跳轉的功能,通過這些選項你可以強製性的把一個條件分支改成 永遠跳轉或者永不跳轉。使用 Invert Brach功能,可以進行條件反轉,這些功能使用起來很簡單命令,但是確實能很方便快速的實現你想要的結果。
還有其他的一些有用的功能,比如把一些彙編指令給Nop掉,也就是說,你選中一條指令,然後用這個功能來進行Nop指令替換,這裏係統還會自動的進行剩餘空間填充,比如原先的指令占4個直接,你直接把這條指令給Nop調用,那麼剩下的3個字節係統會自動的給你也填充成Nop指令,這個功能對於那種變長指令係統還是很實用的。
這裏需要注意的一點是, 如果你把鼠標放到一個條件分支上,這個時候菜單裏麵可能沒有 Convert to NOP這個選項,因為和 as Never功能是一樣的,軟件顯示一個就夠了。
單行編輯
在Patch這個菜單中,還有一些隱藏的菜單項,比如單行編輯功能。使用單行編輯功能,你可以快速的以彙編形式修改單行指令。選擇一條需要修改的指令,按快捷鍵e或者使用右鍵菜單Patch/Edit current line選項,然後就可以看到選中那條彙編指令就變成了可編輯狀態,編輯完成之後按回車即可,Binary Ninja會自動把修改結果應用到二進製文件中去。
如果編輯彙編的時候,新指令比原先的指令長度小的話,工具會自動填充餘下的空間為NOP指令,比如在 x86 x64這些變長指令係統上。
附加說明:工具會盡最大努力保證彙編和反彙編的正確性, 如果遇到指令錯誤或者不支持的指令,可以聯係我們,把這些特殊的情況跟我們溝通一下
- 修正了。解決了加載數據庫時的崩潰問題