身為一個電子逆向工程師,除了分析常標準的電子協議(SPI,I2C,UART,ISO7816 等….)
假設遇到客製化的電子協議訊號那又該如何分析?
這篇逆向工程Apple lighting 協議就是讓我們去思考頂尖硬體駭客idea
原文出自於 法國資安專家 Ramtin-amin ,OSSLab翻譯
http://ramtin-amin.fr/#tristar
Top down view of a Lightning cable, showing the 8-pin connector
|
|||
Type | Data and power connector | ||
---|---|---|---|
Production history | |||
Designer | Apple Inc. | ||
Produced | 2012–present | ||
Superseded | 30-pin dock connector | ||
General specifications | |||
Pins | 8 | ||
Pin out | |||
Receptacle view | |||
Pin 1 | GND | Ground | |
Pin 2 | L0p | Lane 0 positive | |
Pin 3 | L0n | Lane 0 negative | |
Pin 4 | ID0 | Identification/control 0 | |
Pin 5 | PWR | Power (charger or battery) | |
Pin 6 | L1n | Lane 1 negative | |
Pin 7 | L1p | Lane 1 positive | |
Pin 8 | ID1 | Identification/control 1 | |
Lane 0 and 1 may swap in IC of device connector (lanes don’t swap if accessory identification chip connect to ID0 pin) |
Apple lightning 是單面 8針連接器。 它可以被插入兩側.從蘋果公司的專利中找到了引腳定義
在閱讀了關於連接器的一些信息之後,收集了一些信息和洩漏的技術文件,其中一個有趣的部分是這個
可以看到,實際上有4種連接器類型:
C10A USB主機
C10B USB設備
C10C SERIAL
C10D電源
因此,想先找到一個C10C 串口,試試分析串口訊號。 這個串口設備必須取得Apple MFI授權。
。
拆開時候,我們看到它是基於帶有MFi芯片的STM32。 提取固件分析。
此STM32 ,在閃電端口的第二個通道上提供設備認證(MFI),然後將第一個通道轉發給電壓轉換器。
花了點功夫,買到C10C 連接器.
但是測試時候,用它開機時,串口訊號沒有任何回應!
從引腳說明中,Lighting接點在兩面的連接方式並不完全相同。 事實上,ACC_ID可能在兩個不同的地方。 想到的第一件事就是找到一種方法來了host 跟clinet 是如何完成電子協議通訊。 為了做到這一點,我決定使用那些沒有屏蔽的中國電纜,而且便宜。
將它們連接到邏輯分析儀,可以看到通信的一些片段
通信協議看起來像SDQ(OSSLab 曰對 這就是SDQ協議),它是一種單線協議。 不同的是,在1-Wire中,時鐘由主控完成。 在SDQ中,Master發送請求並給它發送時鐘,然後從設備也一樣。 通信始終從兩個可能的ACC_ID中的一個開始。
所以看起來好像是一個偶數的數字(第一個是0x74)發送一個命令,並且用一個奇數(CMD + 1)的奇數發送一個響應。(0x75)為了使它更好,我們需要看看 tristar
在看一些中國的網上商店時,他們實際上是做了一 Lighting Reader:
tristar (CBTL1608A1)
找到了一些原理圖後,在這裡我們可以看到tristar(CBTL1608A1) 是如何連線的
看來tristar是一個MUX 多工器,可以處理:
- Mikey(用於prime)
- BB調試USB(基帶)
- SoC USB(片上插座)
- 附件UART(C10C在這裡)
- 調試UART(非常有興趣)
- BB UART(基帶UART)
- JTAG(SWD是ARM串行線調試器)
另一方面,我們可以看到幾乎所有的Lighting街口:ACC_ID 1,2以及PAIR1和PAIR2。 在看芯片時:
這是一個非常小的WLCSP (晶圓級晶粒尺寸封裝IC),看起來像一個0.35毫米間距的36球的BGA!
有趣的是它通過I2C連接到SoC。 為了弄清楚它是如何連接的,並最終確定是否有可能嗅探I2C,有必要解開Tristar以及SoC。
有趣的部分是,發現了i2c的測試點! 唯一的問題是,它只接受1.8電壓。 電壓轉換器是必要的。 但是這個必須應付i2c所使用的開放。
強化tristar的解決方案之一就是每次發送一個序列並查看mux是如何完成的。 為了做到這一點,要連接到tristar。 但芯片太小,沒有測試腳座。
在這張照片中,我們可以看到球柵。 每個外殼= 0.1mm,所以芯片不大於2.5×2.5mm
通過放大,我們甚至可以看到下面的DIE。
我設計了一個帶有盲孔4層的PCB適配器。 間隙是0.1mm。 只有激光精密工具可以用於此,使其非常昂貴。
第一批已經創建。 然後tristar用回流焊爐焊接在它上面
可以從那裡觸發一個對應於連接器連接的中斷,發送對應於某個連接器ID的序列,然後測試左邊的每個連接,看它是否連接到PAIR1 / PAIR2。
Redpark:
--------
74:75 08 c0 00 00 00 00 9f
76:77 01 25 01 00 86 71 35 38 54 3a 39
78:79 46 31 31 34 31 33 32 31 37 53 31 46 36 39 4b 42 41 00 5e 88 7e
7a:7b 43 30 38 34 32 35 37 41 38 50 39 46 39 34 48 31 45 00 38 08 b8
72:73 80 00 c0 00 87
C10C:
--------
74:75 08 c0 00 00 00 00 9f
76:77 01 25 01 00 a3 2a 49 34 18 0d 6b
78:79 44 57 48 35 37 31 34 31 52 5a 46 4c 39 35 31 42 5a 00 04 08 99
7a:7b 46 43 39 34 31 38 35 30 43 4c 37 46 57 4c 38 42 4c 00 30 00 57
72:73 80 00 c0 00 87
OTG Orignial:
-----------------
74:75 11 f0 00 00 00 00 d6
76:77 01 25 01 80 8c 7b 19 25 01 c8 a4
78:79 44 57 48 32 34 34 35 32 41 36 5a 46 35 4c 34 41 47 00 97 88 7b
7a:7b 43 30 38 32 34 38 35 30 41 4a 39 44 59 37 50 41 56 00 30 00 32
72:73 80 00 c0 00 87
OTG fake (chinese):
--------------
74:75 11 f0 00 00 00 00 d6
76:77 01 25 01 80 97 01 6f 25 5f 6b 90
78:79 44 57 48 32 34 34 37 32 5a 30 54 46 35 4c 34 41 46 00 6b 88 01
7a:7b 43 30 38 32 34 36 36 30 32 37 34 44 59 37 50 41 43 00 30 00 3e
72:73 00 00 c0 00 5e
HDMI:
---------------
74:75 0b f0 00 00 00 00 42
76:77 01 25 01 80 ac 38 af 44 26 3e 25
78:79 44 59 47 34 32 38 31 35 46 4a 45 46 36 4c 47 32 44 00 fa 88 13
7a:7b 43 43 34 34 33 31 34 31 30 44 31 44 59 37 48 41 47 00 20 00 de
72:73 80 00 c0 00 87
Chinese Sync
-----
74:75 10 0c 00 00 00 00 66
76:77 01 25 01 80 b0 25 83 25 5a d0 f2
78:79 46 31 31 32 36 33 35 51 31 58 4b 46 35 56 39 41 36 00 d7 88 cd
7a:7b 43 34 4d 32 34 37 34 30 47 4c 50 46 37 43 30 41 39 00 33 08 ba
72:73 00 00 c0 00 5e
連接器仿真
為了模擬連接器,我寫了一些STM32F4Discover板的代碼。 它基本上以我嗅探它的方式實現了一個SDQ協議。 然後,我回應電話的要求。 為了做到這一點。 我不得不找到一些中國的連接器製造商同意出售我一些
然後,我創建的一些PCB可以切換閃電的兩側,因此可以在兩個方向上插入連接器
現在連接電纜到一個3.3V / 1.8V的電壓轉換器