国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Syscan360會(huì)議胸牌破解揭秘

Alex / 1427人閱讀

摘要:會(huì)議胸牌破解揭秘背景有幸參加今年月份的上海安全會(huì)議,會(huì)議期間有一個(gè)亮點(diǎn)就是的獨(dú)角獸團(tuán)隊(duì)設(shè)計(jì)了一款電子胸牌供參加人員進(jìn)行破解嘗試,類似于美國上面的那種解密的比賽,在參會(huì)現(xiàn)場(chǎng)的人都可以參加這種破解,總共道題,規(guī)則是現(xiàn)場(chǎng)會(huì)給每道題謎面,在這塊胸牌

Syscan360會(huì)議胸牌破解揭秘 背景

有幸參加今年11月份的上海Syscan360安全會(huì)議,會(huì)議期間有一個(gè)亮點(diǎn)就是360的獨(dú)角獸團(tuán)隊(duì)設(shè)計(jì)了一款電子badge(胸牌)供參加人員進(jìn)行破解嘗試,類似于美國Defcon上面的那種解密puzzle的比賽,在參會(huì)現(xiàn)場(chǎng)的人都可以參加這種破解,總共9道題,規(guī)則是現(xiàn)場(chǎng)會(huì)給每道題謎面,在這塊胸牌上面輸入正確的謎底才能進(jìn)入下一題,解題需要開腦洞,有好些人參與破解,而且有好些人都解出來了,今天筆者從這塊胸牌的硬件和軟件層面去揭密這個(gè)胸牌的一些有意思的功能和如何在不需要知道謎面的情況下,快速解密答案,算是硬件破解方面拋磚引玉。

初識(shí)篇

我這邊看到有兩塊板,一塊黑色一塊紅色,其中黑色如下

硬件配置如下:

MCU:德州儀器TI CC1310 型號(hào)(CC1310F64RGZ)VQFN (48) 7.00 mm × 7.00 mm

ARM Cortex-M3處理器,時(shí)鐘速度高達(dá)48Mhz

64KB片上可編程flash,20KB靜態(tài)內(nèi)存SRAM,30個(gè)GPIO口

RF Core支持收發(fā)1Ghz以下的無線信號(hào)

外置存儲(chǔ)器: Winbond 25Q32bvsig

32Mbits存儲(chǔ)空間

一個(gè)LCD液晶屏

四個(gè)led燈,若干電阻和電容,6個(gè)按鍵和開關(guān),所有的這些構(gòu)成一個(gè)小型的嵌入式系統(tǒng)

使用方法:

6個(gè)按鍵,分別負(fù)責(zé)切換不同的可打印的ASCII碼,刪除,進(jìn)入和返回等功能

只有所有的關(guān)卡通過后才能出現(xiàn)控制閃燈和產(chǎn)生紅外信號(hào)去關(guān)閉遙控電視的功能,這是后話,后面細(xì)講。

硬件篇

要想了解里面的原理和功能,必須得拿到里面的代碼邏輯。通過查閱MCU CC1310芯片的數(shù)據(jù)手冊(cè),我們發(fā)現(xiàn)它支持jtag仿真調(diào)試,我們只需要外掛支持ARM的仿真器,就可以進(jìn)行整個(gè)內(nèi)存空間的訪問和片上動(dòng)態(tài)調(diào)試,這一點(diǎn)對(duì)于我們逆向來講非常有幫助,CC1310芯片布局如下。

DIO_16 26 Digital I/O GPIO, JTAG_TDO, high-drive capability

DIO_17 27 Digital I/O GPIO, JTAG_TDI, high-drive capability

我們知道要進(jìn)行jtag調(diào)試需要至少4根信號(hào)線分別是TMS,TCK,TDI,TDO,(RST可選)最后是GND(接地), 具體JTAG的定義和各個(gè)信號(hào)線的定義大家可以網(wǎng)上搜索,我就不贅述了,找到這幾個(gè)信號(hào)線接到相應(yīng)的仿真器上就可以進(jìn)行調(diào)試了。

從該MCU的電子手冊(cè)我們得知這四個(gè)信號(hào)線的Pin腳位置如下。

TMS——24
TCK——25
TDO——26
TDI——27

然后我們可以通過萬電表量出這幾個(gè)引腳引出來的位置,剛好這板子已經(jīng)把這幾個(gè)信號(hào)腳引出來了,也省去我們不少麻煩。

好了,焊好線后,需要我們的仿真器出場(chǎng)了,筆者使用的ft2232h mini module,當(dāng)然大家也可以選用別的仿真器,像jlink之類的,簡(jiǎn)單說一下這個(gè)mini module,它是一個(gè)多硬件協(xié)議(MPSSE)集一身的小模塊,比如SPI/JTAG/I2C等,共用GPIO口,非常方便,接下來就是連線了,連接圖如下。

右邊是mini module CN-2接口Pin腳,左邊是CC1310的引腳,GND隨便找一個(gè)板子接地的地方接上就好了。

下面就是ft2232h mini module

好了,接下來就是激動(dòng)人心的時(shí)刻了。

軟件篇

硬件連接準(zhǔn)備就緒后,我們開始驅(qū)動(dòng)仿真器來進(jìn)行片上調(diào)試。

調(diào)試工具準(zhǔn)備如下:

OpenOCD (開源的硬件調(diào)試軟件)

Arm-none-eabi-gdb (arm版的gdb)

在使用openocd之前需要準(zhǔn)備好cc1310的調(diào)試配置文件cc1310.cfg,在這里可以找到。

一切準(zhǔn)備妥當(dāng),接下來就可以開始見證奇跡的時(shí)刻了。

運(yùn)行telnet localhost 4444進(jìn)行命令行來控制操作cpu或者內(nèi)存空間,在這里我們可把cpu halt暫停下來,cpu重置,設(shè)置斷點(diǎn)等操作。

在這里我們執(zhí)行halt命令,cpu就斷下來了,效果如下

這個(gè)時(shí)侯我的gdb就可以遠(yuǎn)程attach上去進(jìn)行動(dòng)態(tài)調(diào)試與內(nèi)存空間訪問了。

運(yùn)行arm-none-eabi-gdb,gdb里面執(zhí)行target remote localhost:3333

進(jìn)行遠(yuǎn)程調(diào)試連接,可以內(nèi)存空間訪問與動(dòng)態(tài)調(diào)試。

好了,我們可以內(nèi)存空間訪問了,先把固件,flash,和內(nèi)存數(shù)據(jù)dump出來,靜態(tài)分析一下吧。

如下是cc13xx芯片的內(nèi)存空間地址映射表,它可以讓我們知道dump哪些有用的數(shù)據(jù)

0地址開始到0x10000是我們CC1310F64型號(hào)的flash的地址空間

BootROM是從0x10000000到0x10020000

SRAM地址從0x20000000到0x20005000

好了,我們就dump這三塊位置。

在gdb里面運(yùn)行如下命令

dump binary memory cc1310_flash.bin 0 0x10000
dump binary memory cc1310_brom.bin 0x10000000 0x10020000
dump binary memory cc1310_sram.bin 0x20000000 0x20005000

好了,合并這三個(gè)文件用IDA進(jìn)行反匯編,不同的段進(jìn)行地址重定位,可以做到地址精確引用,如下。

好了,接下來就是逆向篇了,如何找到答案和分析其代碼邏輯等等。

逆向篇

我們通過IDA里面的一些字符串獲得一些線索。

然后我們很快找到每一道題的答案了

解釋一下這里面的一些邏輯。

這里面每一道題的提示和答案,還有用戶自定義ID存儲(chǔ)在flash 0xe000開始的區(qū)域里面,總共長(zhǎng)度0xe2個(gè)字節(jié),運(yùn)行時(shí)會(huì)把這塊區(qū)域數(shù)據(jù)讀到SRAM里面,在SRAM里面進(jìn)行操作,然后把SRAM結(jié)果寫回到0xe000這塊區(qū)域里,以保證下次設(shè)備重啟數(shù)據(jù)和進(jìn)度不會(huì)丟失,其結(jié)構(gòu)如下。

0xe000 ---0xe010 存儲(chǔ)用戶設(shè)置的ID

0xe014 --- 0xe015 存儲(chǔ)用戶過了多少關(guān)了(直接改成9就通關(guān)了:),修改SRAM里面相應(yīng)的存儲(chǔ)的數(shù)據(jù),然后通過ID設(shè)置來觸發(fā)寫回到0xe014,這樣就生效了)

如下是不同關(guān)卡的提示和答案

比較每一個(gè)關(guān)卡的用戶輸入答案,并進(jìn)行更新

0x20001060存儲(chǔ)著flash地址0xe000里面的數(shù)據(jù)

偏移0x14就是用戶當(dāng)前所在關(guān)卡數(shù),如果答案比較相等,這個(gè)關(guān)卡數(shù)加1并寫回到flash里面,并在屏幕上顯示『right!』。

總共9道題的答案分別是

UR1NMYW0RLD!

42

ORDREDUTEMPLE

FQJPVDPOK

VYTX

LOYAL

GNILCS

FIBONACHI

WORLD

通關(guān)最后的結(jié)果如下

如果你只想知道答案,看到這里就可以了,接下來會(huì)講講里面的一些其它功能。

探密TVB Gone功能篇

當(dāng)所有的關(guān)卡都通過后,會(huì)多出來兩項(xiàng)列表,分別是

Led Light

TVB Gone

進(jìn)入Led Light前置的兩個(gè)led燈可以顯示3種顏色,這里是通過設(shè)置12號(hào)GPIO和19號(hào)GPIO口,對(duì)應(yīng)在芯片上的引腳是18和29.

這里我們重點(diǎn)關(guān)注這個(gè)TVB Gone功能,這個(gè)一個(gè)可以通過紅外信號(hào)遠(yuǎn)程關(guān)閉很多不同品牌的電視的小應(yīng)用,具體介紹參考:https://en.wikipedia.org/wiki...

我們知道我們家里面使用的電視的遙控器,一般都是發(fā)射的紅外信號(hào),來控制電視的開關(guān),調(diào)臺(tái)等操作,這個(gè)TVB Gone的功能就是通過發(fā)射不同品牌和不同頻率的控制信息來達(dá)到關(guān)閉遙控電視的目的。

紅外控制信號(hào)通過一定頻率的PWM(脈沖寬度調(diào)制)調(diào)制方式輸出給led燈,led燈產(chǎn)生的紅外信號(hào)影響遙控電視。

研究發(fā)現(xiàn)這個(gè)板子里面存儲(chǔ)了80組紅外控制信號(hào)源數(shù)據(jù),通過特定的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ),例如如下。

如下是存儲(chǔ)每一組數(shù)據(jù)的地方指針列表

我們挑選其中一組來看

解釋一下每個(gè)字段的含義

0x9600 表示這種數(shù)據(jù)的發(fā)射頻率38400Hz

0x1a 表示有多少對(duì)數(shù)據(jù)需要發(fā)送出去

0x02 表示每發(fā)送一對(duì)信號(hào)里面承載著2個(gè)bit數(shù)據(jù)

0x9e38 表示存儲(chǔ)時(shí)間對(duì)的指針地址

0x97b4 表示要發(fā)送的數(shù)據(jù)的指針地址

地址0x97b4在存儲(chǔ)的數(shù)據(jù)如下

{0xe2, 0x20, 0x80,0x78,0x88,0x20,x10}

上面有講這些數(shù)據(jù)需要發(fā)送26次,每次是2個(gè)bit,總共就是52個(gè)bit

上面是7個(gè)字節(jié),總共是56個(gè)bit,還有4個(gè)bit怎么辦,后面再說。

這個(gè)時(shí)候我們需要說說存儲(chǔ)時(shí)間對(duì)的指針了

地址0x9e38存儲(chǔ)的時(shí)間對(duì)

{60,60,

60,2700,

120,60,

240,60}

這個(gè)時(shí)間對(duì)分別是time on和time off

解釋這兩個(gè)概念時(shí)先計(jì)算一下PWM調(diào)制的周期時(shí)間

1/38400=26μs(微秒)

該MCU的系統(tǒng)時(shí)鐘是46Mhz,這里使用了一個(gè)16位的通用定時(shí)器GPT TimerB

我們通過代碼得知該P(yáng)WM調(diào)制的占空比(duty cycle)是33.3%,什么是占空比,就是在一個(gè)PWM周期里面高電平占總電平的比例,如下圖

這個(gè)PWM的周期是26μs,高電平是8.84μs,所以占空比就是8.84/26=33.3%,也就是1/3,我們從代碼里面也能看到。

這個(gè)PWM輸出使用的是4號(hào)GPIO口,地址0x40022090是設(shè)置各個(gè)GPIO口置bit1的地方,這里賦值0x10剛好是置4號(hào)GPIO口bit1,也就是高電平,地址0x4001002c設(shè)置定時(shí)器時(shí)間,也就是這個(gè)高電平持續(xù)多長(zhǎng)時(shí)間,后面0x400220a0是設(shè)置各個(gè)GPIO口清除bit1,也就是置bit0,這個(gè)是0x10,表示置4號(hào)GPIO口bit0,也就是進(jìn)入低電平,設(shè)置定時(shí)器長(zhǎng)度在地址0x4001002c,時(shí)長(zhǎng)是高電平的2倍,這就是一個(gè)周期time on的狀態(tài),通過計(jì)算我們能夠得出一個(gè)周期高電平的時(shí)長(zhǎng)。

系統(tǒng)時(shí)鐘周期1/46000000

(46000000/38400/3.0)*( 1/46000000)=8.67μs

好了,繼續(xù)回來上面的時(shí)間對(duì)Time on和time off

{60,60,

60,2700,

120,60,

240,60}

把每個(gè)數(shù)字乘以10,時(shí)間單位是微秒,這個(gè)10怎么來的,代碼里面看到的,不知道原因(搞硬件的同學(xué)幫忙解釋下)

{600,600,

600,27000,

1200,600,

2400,600}

每對(duì)數(shù)字前的數(shù)字表示Time on,就是在這個(gè)數(shù)字的時(shí)間內(nèi),PWM信號(hào)周期性出現(xiàn),后面的數(shù)字Time Off表示低電平?jīng)]有PWM周期性變化。

這兩個(gè)組合在一起的PWM信號(hào)就是表示數(shù)字信號(hào)里面的2個(gè)bit位,上面有提到

{600,600, 代表bit 位『0 0』

600,27000, 代表bit 位『0 1』

1200,600, 代表bit 位『1 0』

2400,600} 代表bit 位『1 1』

所以這個(gè)紅外信號(hào)就是通過PWM的這種方法調(diào)制發(fā)射出去的,繼續(xù)上面的例子,我們要發(fā)送的數(shù)據(jù)如下。

{0xe2, 0x20,0x80,0x78,0x88,0x20,x10}

發(fā)送數(shù)據(jù)的順序是MSB,就是從左到右開始發(fā),比如0xe2的比特?cái)?shù)據(jù)是

“ 11100010 ”

先發(fā)11,10,00,10對(duì)應(yīng)的發(fā)送時(shí)間序列對(duì)就是

2400,600

1200,600

600, 600

1200,600

我們可以通過邏輯分析儀來看這些信號(hào)發(fā)送的情況

第一組發(fā)送的比特11

Time on 2400微秒(也就是2.4毫秒),我們觀察到按照周期性變化的PWM信號(hào)長(zhǎng)度就是2.4毫秒,低電平的時(shí)長(zhǎng)就是600微秒左右

*第二組發(fā)送的比特10

time on時(shí)長(zhǎng)1200微秒,time off時(shí)長(zhǎng)600微秒

第三組發(fā)送的比特00

time on時(shí)長(zhǎng)600,time off時(shí)長(zhǎng)600

第四組發(fā)送的比特10

time on時(shí)長(zhǎng)1200微秒,time off 600微秒

好了,上面我們有提到要發(fā)送的數(shù)據(jù)是7個(gè)字節(jié),56bit,但是只發(fā)送了26對(duì)也就是52bit,還有4bit怎么辦,我們看最后一個(gè)字節(jié)0x10對(duì)應(yīng)的比特位是00010000

因?yàn)樽詈?位都是bit0,所以直接低電平補(bǔ)位了(猜測(cè))。

最后在14秒左右遍歷了80組紅外信號(hào)來嘗試關(guān)閉遠(yuǎn)端的搖控電視

外置Flash篇

我們似乎忘記了那個(gè)4MB的winbond的外置flash了,它的功能如下:

存儲(chǔ)一些文字介紹信息

存儲(chǔ)LCD文字顯示映射碼

存儲(chǔ)啟動(dòng)的圖片

存儲(chǔ)了一個(gè)變量

如果dump外置flash?

先祭出我的神器FT2232h Min Module,用熱風(fēng)槍把外置flash吹下來,然后夾住,連線如下圖,SPI接口一一對(duì)應(yīng)好就可以了。

通過軟件flashrom來讀取flash里面的內(nèi)容

運(yùn)行
flashrom –p ft2232_spi:type=2232H,port=A –r flash_cc.bin

LCD顯示是通過硬件I2C協(xié)議寫入數(shù)據(jù),ASCII碼和UNICODE顯示邏輯如下

漢字通過UTF8解碼然后GBK編碼后存儲(chǔ)

所以想在顯示屏上面顯示中文漢字,只需要把漢字UTF8解碼然后GBK編碼后放到相應(yīng)的位置就可以了,例如

>>> "謝君".decode("utf8").encode("gbk")
"xd0xbbxbexfd"

這四個(gè)字節(jié)寫入地址0x20001060處,然后寫回內(nèi)置flash就出來如下效果了。

無線通信篇(RF):

該板子帶一個(gè)無線收發(fā)功能,中心頻率是433.92Mhz,速率50Kbps,2-GFSK方式調(diào)制,該無線功能一直處于監(jiān)聽狀態(tài),當(dāng)收到服務(wù)端發(fā)過來的相應(yīng)命令的數(shù)據(jù)包時(shí),會(huì)做相應(yīng)的解析,并且發(fā)相應(yīng)的包響應(yīng)。

這個(gè)無線功能有如下一些功能,我就挑選了幾個(gè):

廣播請(qǐng)求客戶端提交你們的用戶id信息

廣播請(qǐng)求客戶端提交你們的通過關(guān)卡數(shù)的信息

服務(wù)端器發(fā)送無線數(shù)據(jù)格式如下:

0x00 0xaa無線通信前導(dǎo)碼(preamble)

0x01 數(shù)據(jù)包payload長(zhǎng)度

0x02 請(qǐng)求命令

0x03-0x04 header 0x5555或者0x2b2

0x05 序列號(hào)(seq)

0x06 地址

0x07 子命令

end 兩個(gè)字節(jié)的數(shù)據(jù)包校驗(yàn)和

客戶端發(fā)送數(shù)據(jù)格式如下:

0x00 0xaa前導(dǎo)碼

0x01 數(shù)據(jù)包長(zhǎng)

0x02 請(qǐng)求命令

0x03-0x04頭部header 0x02 0xb2

0x05 對(duì)應(yīng)服務(wù)端發(fā)過來的地址

0x06 子命令

0x7—需要提交的一些數(shù)據(jù)

end兩個(gè)字節(jié)的校驗(yàn)和

校驗(yàn)和算法:

把字段數(shù)據(jù)包長(zhǎng)度后面的數(shù)據(jù),不包括校驗(yàn)和字段,每個(gè)字節(jié)數(shù)據(jù)相加結(jié)果再和校驗(yàn)和作比較。

我節(jié)選了幾個(gè)數(shù)據(jù)交互對(duì),由于我們現(xiàn)在不可能收到服務(wù)器發(fā)的數(shù)據(jù),所以只能根據(jù)逆向代碼來判斷發(fā)送的內(nèi)容是什么樣的:

recv是來自服務(wù)器發(fā)的,send是我們的板子響應(yīng)發(fā)出去的。

Seq是序列號(hào),add是地址,各占一個(gè)字節(jié)

請(qǐng)求提交你過了多少關(guān):

recv 0xaa 0x06 0x02 0x55 0x55 seq add 0x01 chk1 chk2

send 0xaa 0x08 0x03 seq 0x02 0xb2 add 0x01 0xff 0x09 chk1 chk2

請(qǐng)求提交板子的用戶id,名字長(zhǎng)度是16個(gè)字節(jié)

recv 0xaa 0x06 0x02 0x55 0x55 seq add 0x03 chk1 chk2

send 0x0a 0x16 0x03 seq 0x02 0xb2 add 0x03 username chk1 chk2

其它

recv 0xaa 0x06 0x04 0x02 0xb2 seq add 0x01 chk1 chk2

send 0xaa 0x05 0x05 seq 0x02 0xb2 add chk1 chk2

結(jié)論

當(dāng)然還有改進(jìn)的空間,比如在解題算法代碼上面,不要用明文存儲(chǔ)答案,經(jīng)過一些算法混淆處理,可以提高代碼分析的門檻。

硬件上面的一些反調(diào)試對(duì)抗,可以考慮一些芯片硬件特性的支持,比如今年defcon上面使用的intel在quark d2000 x86芯片,里面有一個(gè)jtag的disable的OTP比特位,燒錄設(shè)置后jtag硬件調(diào)試就不能用了。

相信他們?cè)谠O(shè)計(jì)這塊板子的時(shí)候也是付出了很多精力,逆向也是一個(gè)學(xué)習(xí)的過程,感謝。

作者:謝君(阿里IoT安全專家),更多安全類文章,請(qǐng)?jiān)L問阿里聚安全博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/11230.html

相關(guān)文章

  • 2018先知白帽大會(huì) | 議題解讀

    摘要:摘要今年的先知白帽大會(huì),與會(huì)者將能夠親身感受到非常多有趣的技術(shù)議題,如在國際賽事中屢奪佳績(jī)的團(tuán)隊(duì),其隊(duì)長(zhǎng)將親臨現(xiàn)場(chǎng),分享穿針引線般的漏洞利用藝術(shù)。從數(shù)據(jù)視角探索安全威脅阿里云安全工程師議題解讀本議題討論了數(shù)據(jù)為安全人員思維方式帶來的變化。 摘要: 今年的先知白帽大會(huì),與會(huì)者將能夠親身感受到非常多有趣的技術(shù)議題,如HITCON在國際賽事中屢奪佳績(jī)的CTF團(tuán)隊(duì),其隊(duì)長(zhǎng)Orange將親臨現(xiàn)場(chǎng)...

    Hydrogen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<