成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Syscan360會議胸牌破解揭秘

Alex / 1429人閱讀

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

Syscan360會議胸牌破解揭秘 背景

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

初識篇

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

硬件配置如下:

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

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

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

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

外置存儲器: Winbond 25Q32bvsig

32Mbits存儲空間

一個LCD液晶屏

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

使用方法:

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

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

硬件篇

要想了解里面的原理和功能,必須得拿到里面的代碼邏輯。通過查閱MCU CC1310芯片的數(shù)據(jù)手冊,我們發(fā)現(xiàn)它支持jtag仿真調(diào)試,我們只需要外掛支持ARM的仿真器,就可以進(jìn)行整個內(nèi)存空間的訪問和片上動態(tài)調(diào)試,這一點對于我們逆向來講非常有幫助,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根信號線分別是TMS,TCK,TDI,TDO,(RST可選)最后是GND(接地), 具體JTAG的定義和各個信號線的定義大家可以網(wǎng)上搜索,我就不贅述了,找到這幾個信號線接到相應(yīng)的仿真器上就可以進(jìn)行調(diào)試了。

從該MCU的電子手冊我們得知這四個信號線的Pin腳位置如下。

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

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

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

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

下面就是ft2232h mini module

好了,接下來就是激動人心的時刻了。

軟件篇

硬件連接準(zhǔn)備就緒后,我們開始驅(qū)動仿真器來進(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),接下來就可以開始見證奇跡的時刻了。

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

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

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

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

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

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

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

0地址開始到0x10000是我們CC1310F64型號的flash的地址空間

BootROM是從0x10000000到0x10020000

SRAM地址從0x20000000到0x20005000

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

在gdb里面運行如下命令

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

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

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

逆向篇

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

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

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

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

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

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

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

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

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

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

總共9道題的答案分別是

UR1NMYW0RLD!

42

ORDREDUTEMPLE

FQJPVDPOK

VYTX

LOYAL

GNILCS

FIBONACHI

WORLD

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

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

探密TVB Gone功能篇

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

Led Light

TVB Gone

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

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

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

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

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

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

我們挑選其中一組來看

解釋一下每個字段的含義

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

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

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

0x9e38 表示存儲時間對的指針地址

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

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

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

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

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

這個時候我們需要說說存儲時間對的指針了

地址0x9e38存儲的時間對

{60,60,

60,2700,

120,60,

240,60}

這個時間對分別是time on和time off

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

1/38400=26μs(微秒)

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

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

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

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

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

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

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

{60,60,

60,2700,

120,60,

240,60}

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

{600,600,

600,27000,

1200,600,

2400,600}

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

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

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

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

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

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

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

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

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

“ 11100010 ”

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

2400,600

1200,600

600, 600

1200,600

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

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

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

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

time on時長1200微秒,time off時長600微秒

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

time on時長600,time off時長600

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

time on時長1200微秒,time off 600微秒

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

因為最后4位都是bit0,所以直接低電平補位了(猜測)。

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

外置Flash篇

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

存儲一些文字介紹信息

存儲LCD文字顯示映射碼

存儲啟動的圖片

存儲了一個變量

如果dump外置flash?

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

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

運行
flashrom –p ft2232_spi:type=2232H,port=A –r flash_cc.bin

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

漢字通過UTF8解碼然后GBK編碼后存儲

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

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

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

無線通信篇(RF):

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

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

廣播請求客戶端提交你們的用戶id信息

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

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

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

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

0x02 請求命令

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

0x05 序列號(seq)

0x06 地址

0x07 子命令

end 兩個字節(jié)的數(shù)據(jù)包校驗和

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

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

0x01 數(shù)據(jù)包長

0x02 請求命令

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

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

0x06 子命令

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

end兩個字節(jié)的校驗和

校驗和算法:

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

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

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

Seq是序列號,add是地址,各占一個字節(jié)

請求提交你過了多少關(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

請求提交板子的用戶id,名字長度是16個字節(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)的空間,比如在解題算法代碼上面,不要用明文存儲答案,經(jīng)過一些算法混淆處理,可以提高代碼分析的門檻。

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

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

作者:謝君(阿里IoT安全專家),更多安全類文章,請訪問阿里聚安全博客

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/11230.html

相關(guān)文章

  • 2018先知白帽大會 | 議題解讀

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

    Hydrogen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<