真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

什么是Binbloom

本篇內(nèi)容介紹了“什么是Binbloom”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì),小程序制作,網(wǎng)頁設(shè)計(jì)制作,成都做手機(jī)網(wǎng)站,營銷型網(wǎng)站幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

Binbloom

Binbloom是一款針對二進(jìn)制源碼的固件分析軟件,該工具旨在幫助廣大研究人員分析固件的二進(jìn)制源碼,并自動化判斷目標(biāo)固件中的某些功能特性。該工具兼容所有常見的系統(tǒng)架構(gòu),因?yàn)樵摴ぞ咧粫δ繕?biāo)固件進(jìn)行簡單的特性統(tǒng)計(jì)。

為了計(jì)算出加載地址,在使用Binbloom之前,我們還需要一些外部逆向工程分析工具來幫助我們提取目標(biāo)固件中的潛在函數(shù)列表。

功能特性

  • 加載地址:Binbloom可以解析原始二進(jìn)制固件并確定其加載地址。

  • 字節(jié)順序:Binbloom可以使用一些啟發(fā)式算法來確定目標(biāo)固件的字節(jié)順序。

  • UDS數(shù)據(jù)庫:Binbloom可以解析原始二進(jìn)制固件,并檢查它是否存在有包含UDS命令id的數(shù)組。

工具下載/安裝

首先,廣大研究人員需要使用下列命令將該項(xiàng)目源碼克隆至本地:

git clone https://github.com/quarkslab/binbloom.git

cd binbloom

接下來,使用下列命令構(gòu)建最新版本的Binbloom:

mkdir build

cd build

cmake ..

make

最后,使用下列命令安裝最新版本的Binbloom(僅支持Linux系統(tǒng)):

make install

工具使用

判斷字節(jié)順序:

binbloom -f firmware.bin -e

運(yùn)行上述命令后,Binbloom將返回下列的輸出數(shù)據(jù):

Loaded firmware.bin, size:624128, bit:fff00000, 000fffff, nb_segments:4096, shift:20

End address:00098600

Determining the endianness

Computing heuristics in big endian order:

Base: 00000000: unique pointers:1839, number of array elements:217900

Base: 01000000: unique pointers:1343, number of array elements:13085

Base: 02000000: unique pointers:621, number of array elements:5735

Base: 03000000: unique pointers:566, number of array elements:3823

Base: 05000000: unique pointers:575, number of array elements:6139

Base: 80000000: unique pointers:642, number of array elements:528

247210

Computing score in little endian order:

Base: 00000000: unique pointers:8309, number of array elements:515404

515404

This firmware seems to be LITTLE ENDIAN

在上述輸出數(shù)據(jù)中,最后一行才是最重要的一行,因?yàn)樗o出的是最終的分析結(jié)果。其他幾行代表的是Binbloom在目標(biāo)固件中,無論是在大端模式下還是小端模式下能夠找到的唯一指針的數(shù)量和數(shù)組元素的數(shù)量,而這些信息可以用來幫助確定工具在確定字節(jié)順序時(shí)所要使用的啟發(fā)式方法。

判斷加載地址

首先,我們需要提供一個(gè)包含了潛在函數(shù)地址列表的文件,文件內(nèi)數(shù)據(jù)格式為十六進(jìn)制,每個(gè)數(shù)據(jù)占一行,數(shù)據(jù)形式如下所示:

00000010

00000054

000005f0

00000a50

00000a54

00000ac0

00000b40

00000b6c

00000b74

00000bc0

這個(gè)文件需要以固件文件的文件名來進(jìn)行名命,后跟“.fun”作為文件的后綴名。

這個(gè)文件可以利用tag_code.py這個(gè)Python腳本所提供的tag_code()函數(shù)來生成,使用IDA Pro的生成步驟如下:

  • 在IDA Pro中加載固件文件,選擇地址0;

  • 從IDA Pro的文件菜單中,選擇腳本文件,并選擇py;

  • 在IDA Pro窗口底部的命令行終端中,使用tag_code(),此時(shí)將會自動生成函數(shù)文件;

如果你想使用其他工具來生成函數(shù)文件的話,只要你是以地址0加載固件文件話就都可以。比如說,函數(shù)文件中的十六進(jìn)制值對應(yīng)的就是固件中的偏移量。

接下來,我們就可以讓Binbloom通過計(jì)算潛在函數(shù)和固件中的函數(shù)指針數(shù)組之間的相關(guān)分?jǐn)?shù)來計(jì)算潛在加載地址(列表):

binbloom -f firmware.bin -b

上述命令執(zhí)行后,Binbloom將會給我們返回如下所示的輸出結(jié)果:

Loaded firmware.bin, size:2668912, bit:ffc00000, 003fffff, nb_segments:1024, shift:22

End address:0028b970

loaded 14903 functions

 

Highest score for base address: 1545, for base address 80010000

For information, here are the best scores:

For base address 80010000, found 1545 functions

Saving function pointers for this base address...

Done.

在上述輸出文件中,我們可以看到目標(biāo)固件提供了14903個(gè)潛在函數(shù),當(dāng)程序假設(shè)加載的基地址為0x8001000時(shí),工具總共在函數(shù)指針數(shù)組中找到了1545個(gè)符合條件的對象。

如果目標(biāo)固件源碼中存在不同的區(qū)域,那么Binbloom將把固件中的不同區(qū)域以及對應(yīng)的加載地址全部顯示出來:

Highest score for base address: 93, for base address 00000000

For information, here are the best scores:

For base address 00000000, found 93 functions

For base address 00040000, found 93 functions

此時(shí),我們已經(jīng)獲取到了地址0x00000000以及0x00040000處的代碼段了。

Binbloom將生成兩份輸出文件:

  • firmware.fad:該文件中包含了已識別函數(shù)的地址;

  • firmware.fpt:該文件中包含了已識別函數(shù)指針的地址;

現(xiàn)在,我們可以再次打開IDA Pro(或其他逆向工程分析軟件),以指定的地址加載固件,然后將1545個(gè)已識別函數(shù)的地址導(dǎo)入進(jìn)去:

  • 在IDA Pro中以指定地址加載固件;

  • 在文件菜單中,選擇腳本文件,然后選擇py;

  • 選擇.fad文件;

  • 選擇.fpt文件;

尋找UDS數(shù)據(jù)庫(針對ECU固件)

Binbloom可以嘗試搜索任何包含了UDS/KWP2000 ID的數(shù)組,這里可以使用-u選項(xiàng)實(shí)現(xiàn):

binbloom -f firmware.bin -u

上述命令將返回下列輸出內(nèi)容:

Loaded firmware.bin, size:1540096, bit:ffe00000, 001fffff, nb_segments:2048, shift:21

End address:00178000

UDS DB position: 1234 with a score of 12 and a stride of 12:

10 00 31 00 26 27 00 80 00 00 00 00

11 00 31 00 24 3d 01 80 00 00 00 00

22 00 10 00 2c 42 01 80 00 00 00 00

27 00 10 00 1c 41 01 80 60 a8 01 80

28 00 31 00 36 7f 01 80 00 00 00 00

2e 00 10 00 18 88 01 80 08 ae 01 80

31 00 30 00 10 41 01 80 00 00 00 00

34 00 10 00 46 4e 01 80 00 00 00 00

36 00 10 00 2a 2d 01 80 00 00 00 00

37 00 10 00 32 3c 00 80 00 00 00 00

3e 00 31 00 54 5b 01 80 00 b2 01 80

85 00 31 00 6a 2f 01 80 00 00 00 00

“什么是Binbloom”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


當(dāng)前名稱:什么是Binbloom
文章分享:http://weahome.cn/article/giggdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部