Skip to content

Latest commit

 

History

History
57 lines (39 loc) · 2.22 KB

File metadata and controls

57 lines (39 loc) · 2.22 KB

CONFidence CTF Teaser - 2020

Misc / 53 - GPIO Tap

We managed to intercept some traffic on the GPIOs, can you find out what was transmitted?

Solution

By @Raagi

可以看到圖片中是一個 rpi3 接 16*2 LCD 螢幕,用 rpi3 的 gpio 送 l2c 訊號給 LCD,此外題目有提供一個 tap.gpio 的檔案,內容紀錄了每個腳位的訊號是 HIGH 還是 LOW

4 -> LOW
25 -> LOW
17 -> HIGH
18 -> LOW
22 -> LOW
23 -> HIGH
24 -> LOW
24 -> HIGH
24 -> LOW
....

根據圖片的電路以及訊號的行為判斷,可以得知腳位與訊號的對應關係:

  • GPIO_25 -> RS
  • GPIO_24 -> Enable
  • GPIO_22 -> D4
  • GPIO_18 -> D5
  • GPIO_17 -> D6
  • GPIO_23 -> D7

HD44780 這個 controller 處理訊號的邏輯是:每個指令都是一組 2-digit heximal ,而 [D4:D7] 訊號每次會先送高四位、再送低四位。 (eg. 1st [D4:D7] = 0011, 2nd [D4:D7] = 1010, [b7:b0] = 00111010)

這邊可以注意到 RS 這個訊號,當 RSLOW 時是指令模式,詳細的指令表可以參照這裡,題目中主要使用到的有 01H:清空畫面、 18H : 整個畫面右移,以及最重要的兩個指令 8XH :將游標移動到第一行的第 X 個位置、 CXH :將游標移動到第二行的第 X 個位置。

RSHIGH 時為資料模式, LCD 中有一個 CGRAM ,事先存放了一些常用的字元和符號,在資料模式的情況下 [D4:D7] 的訊號會被解讀成 CGRAM 的位址,藉由位址找到對應存放的字元或符號。

知道以上的資訊之後,就可以來 parse tap.gpio 的資料和處理如何寫入字元了。

exploit.py

Welcome to p4ctf :) !!
p4{GPIO_t4p_warmup}

Referenece