Binary Ninja是一款非常好用的逆向編譯平臺(tái)。該平臺(tái)的元素能夠與Python和C++綁定,能夠自動(dòng)完成代碼和數(shù)據(jù)交叉引用、基于置信度的類型傳播、值集分析等一系列操作。軟件分為低級(jí)和高級(jí)兩種模式,提供了許多方式來修改二進(jìn)制文件,幫助用戶更方便的進(jìn)行匯編的指令。
軟件特色
現(xiàn)代UI
并非所有的黑客都會(huì)忽略UI/UX。Binary Ninja使用了現(xiàn)代的UX范式,如果默認(rèn)的主題不適合你,你可以使用眾多替代品中的一種。
廣泛的API
我們的Python和C++綁定能夠與平臺(tái)的幾乎所有元素進(jìn)行交互。UI、ILs、反匯編、頭文件、我們的類型解析器等等。
強(qiáng)大的分析
代碼和數(shù)據(jù)交叉引用、基于置信度的類型傳播、值集分析等--所有這些都是自動(dòng)完成的,并且能夠以一種與架構(gòu)無關(guān)的方式進(jìn)行腳本。
二進(jìn)制忍者中級(jí)語言(BNIL)
我們創(chuàng)建了一個(gè)強(qiáng)大而又易于閱讀的IL系列,涵蓋了分析的多個(gè)階段。最低級(jí)別接近匯編,更高的級(jí)別接近反編譯輸出。對(duì)于不支持的架構(gòu),實(shí)現(xiàn)提升器也極其簡(jiǎn)單。
軟件特征
HEX編輯模式
是最直觀的修改方式,也是最簡(jiǎn)易的一種修改方式。如上圖所示,可以通過右下角的菜單按鈕或者熱鍵H打開(^ + H),這里要注意一下,這里介紹的熱鍵如果沒有效果,可以去參考 用戶文檔。
這種編輯模式下,可以一邊修改,一邊實(shí)時(shí)的看修改結(jié)果,從而到達(dá)比較高的修改測(cè)試效率,一次修改過程大致的操作步驟如下:
先在圖形視圖或者線性匯編試圖中找一個(gè)準(zhǔn)備修改的函數(shù)。
使用菜單 view -》 Split進(jìn)行一次屏幕視圖拆分。
現(xiàn)在可以隨意調(diào)整拆分的視圖,看著舒服就行,把其中一個(gè)視圖切換到hex編輯模式,并修改一下上面選定的函數(shù)。你這邊修改,另一個(gè)視圖中就會(huì)看到同步的修改結(jié)果展示,一般情況下,如果修改一個(gè)比較大的函數(shù)的時(shí)候,操作反應(yīng)可能會(huì)慢一點(diǎn)。編輯器也支持大塊的復(fù)制粘貼操作。
結(jié)構(gòu)體實(shí)時(shí)修改
這個(gè)實(shí)時(shí)預(yù)覽功能說起來比反匯編字節(jié)碼有用多了, 這里給出一個(gè)實(shí)時(shí)修改結(jié)構(gòu)體并查看結(jié)構(gòu)體解碼結(jié)果的的演示視頻:
這里本來是一段演示視頻,但是是youtube的視頻源,沒有辦法觀看,請(qǐng)?jiān)谠逆溄又蟹瓑τ^看(sorry),視頻地址是:http://www.youtube.com/embed/sCKiG_xdNSc。
點(diǎn)兩下鼠標(biāo)就搞定。
上面介紹的方法,需要你對(duì)二進(jìn)制的內(nèi)容甚至是系統(tǒng)架構(gòu)有所了解,對(duì)于大多人來說可能還有點(diǎn)困難,但是在Binary Ninja這個(gè)平臺(tái)上,你甚至不必了解那么多的知識(shí)也可以通過平臺(tái)來完成二進(jìn)制文件的修改工作。比如,專有的 右鍵修改菜單,有了這個(gè)菜單的幫助,你只需要點(diǎn)兩下鼠標(biāo)就可以了。
這個(gè)彈出菜單里面有不少專門用來修改條件分支跳轉(zhuǎn)的功能,通過這些選項(xiàng)你可以強(qiáng)制性的把一個(gè)條件分支改成 永遠(yuǎn)跳轉(zhuǎn)或者永不跳轉(zhuǎn)。使用 Invert Brach功能,可以進(jìn)行條件反轉(zhuǎn),這些功能使用起來很簡(jiǎn)單命令,但是確實(shí)能很方便快速的實(shí)現(xiàn)你想要的結(jié)果。
還有其他的一些有用的功能,比如把一些匯編指令給Nop掉,也就是說,你選中一條指令,然后用這個(gè)功能來進(jìn)行Nop指令替換,這里系統(tǒng)還會(huì)自動(dòng)的進(jìn)行剩余空間填充,比如原先的指令占4個(gè)直接,你直接把這條指令給Nop調(diào)用,那么剩下的3個(gè)字節(jié)系統(tǒng)會(huì)自動(dòng)的給你也填充成Nop指令,這個(gè)功能對(duì)于那種變長(zhǎng)指令系統(tǒng)還是很實(shí)用的。
這里需要注意的一點(diǎn)是, 如果你把鼠標(biāo)放到一個(gè)條件分支上,這個(gè)時(shí)候菜單里面可能沒有 Convert to NOP這個(gè)選項(xiàng),因?yàn)楹?as Never功能是一樣的,軟件顯示一個(gè)就夠了。
單行編輯
在Patch這個(gè)菜單中,還有一些隱藏的菜單項(xiàng),比如單行編輯功能。使用單行編輯功能,你可以快速的以匯編形式修改單行指令。選擇一條需要修改的指令,按快捷鍵e或者使用右鍵菜單Patch/Edit current line選項(xiàng),然后就可以看到選中那條匯編指令就變成了可編輯狀態(tài),編輯完成之后按回車即可,Binary Ninja會(huì)自動(dòng)把修改結(jié)果應(yīng)用到二進(jìn)制文件中去。
如果編輯匯編的時(shí)候,新指令比原先的指令長(zhǎng)度小的話,工具會(huì)自動(dòng)填充余下的空間為NOP指令,比如在 x86 x64這些變長(zhǎng)指令系統(tǒng)上。
附加說明:工具會(huì)盡最大努力保證匯編和反匯編的正確性, 如果遇到指令錯(cuò)誤或者不支持的指令,可以聯(lián)系我們,把這些特殊的情況跟我們溝通一下。
更新日志
2.0.2170 (2020-05-22)
- 修正了、解決了加載數(shù)據(jù)庫時(shí)的崩潰問題。