嗨嗨,我是 Kazma。
今天的目標是帶過 Derek Jamison Rolling Code 系列影片的後半段,但因為他真的教的太仔細了,其實很難在鐵人賽完整的教學這塊,所以今天的目標是介紹裡面一些比較有趣的內容介紹,並且鼓勵大家之後都去看看他做的影片,可以學得很扎實。
請注意,透過 Flipper Zero 所學到的技術與知識,主要目的是提升個人技術能力與資訊安全意識。我們強烈呼籲各位,不要將這些知識應用於任何違法活動。您有責任確保所學知識的合法用途。針對今天的主題,大家務必要注意以下幾點:
我們昨天的文章主要帶過了 Derek Jamison 影片清單的前四個,而到了第五個的時候,有網友留言問能不能做成大學等級的課程。所以第五個影片 Derek Jamison 嘗試把我們錄製到的 Security+ 1.0 和 Security+ 2.0 原始訊號一步步 decode 給大家看。在影片一開始作者嘗試播放了兩個協議原始訊號的聲音讓我們理解他們的差異:
圖片來源:https://youtu.be/CEFb-8htKOA?si=wHgyISB-a4X7Ss
接著他就開始一步步拆解封包內容 decode 給大家看:
圖片來源:https://youtu.be/CEFb-8htKOA?si=wHgyISB-a4X7Ss
因為真的太仔細了,用文章教這個大概會截一百多張圖,但很歡迎各位去看看,真的教的扎實:https://youtu.be/CEFb-8htKOA?si=hRW667rNi6sh1hSd。
第六部影片在介紹 Sub-GHz 的 decoder 和 encoder 是怎麼運作的。
圖片來源:https://youtu.be/O4bEuYwytv0?si=iDzJmKERKojx1zjR
在 decoder 開始運作後,首先就會呼叫 alloc
把資源 allocate 進來並且 load 進需要的設定檔,free
就是結束時會把所有 allocate 的資料釋放。feed
會包含訊號裡面的許多資訊,像是 level 現在是 on/off,pulse 的 duration 和 processes,以及 count 跟 data。reset
則是會把 feed
還原成初始狀態。deserialize
會把 flipper 裡面的 .sub file 反序列化出 .data_count_bit
和 .data
,像是照片裡面的例子是 12 bit 和 0x00005461。get_hash_data
則是會根據剛剛的 .data_count_bit
還有 .data
取得一個值,同時會去比較他是已經存在歷史紀錄的值還是沒出現過的。serialize
則是把 .data_count_bit
和 .data
轉換成 .sub 檔案儲存。get_string
則是會 return .data_count_bit
還有 .data
到 flipper 螢幕上顯示以及 CLI 介面上。
圖片來源:https://youtu.be/O4bEuYwytv0?si=iDzJmKERKojx1zjR
encoder 其實跟 decoder 差不多,但 dederialize
的時候會多設定 .upload
,.size_upload
,.front
,.repeat
,然後當我們發射信號的時候會呼叫 yield
,然後會檢查有沒有正常運行,如果沒有的話會返回一個 reset level,然後要結束時會呼叫 stop
。
接著作者會透過 Flipper 的 CLI 工具,以及在原始碼下斷點的方式,來走一遍 encoder 和 decoder 的流程:
Flipper Cli 的網址:https://lab.flipper.net/cli
我們可以透過像是上面的方式來呼叫 decode_raw
,接著就可以用 vs code 之類的工具進入 debugging mode 下斷點來看看剛剛學到的流程:
圖片來源:https://www.youtube.com/watch?v=O4bEuYwytv0&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=6
有興趣追完整個 debug 流程的歡迎去看第六集:https://www.youtube.com/watch?v=O4bEuYwytv0&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=6
接著在七到九集作者用 Genie Garage Door 跟大家示範前面提到那些運作機制是怎麼應用在實際例子中。
接著在這個系列的最後一集,作者想跟大家提到其實 Brute Force KeyLoq 並非不可能,而且 Brute Force 也並非單純的一個一個猜,是一些方式可以提高我們成功的機率以及技巧的,像是:
圖片來源:https://www.youtube.com/watch?v=-LtyF7LUQvs&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=10
從上圖可以看到每次增加 19 會比每次增加 1 的成功速度更快,而每次增加 27 會跟每次增加 1 插到兩倍以上。
圖片來源:https://www.youtube.com/watch?v=-LtyF7LUQvs&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=10
作者這邊提供了 brute force 的時間和機率關係,可以看到超過 75% 的機率都會超過一年,最大值甚至到 44 年。
圖片來源:https://www.youtube.com/watch?v=-LtyF7LUQvs&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=10
這裡還有另外一個更詳細的數據,這次影片展示的是第一種情況也就是在 12978 種情況下,當我們每秒測試 2.87 個,大約七十五分鐘會成功,而當數量來到最大值四十億的時候,在同樣的測試速度下會需要我們大約四十四年才會成功。
圖片來源:https://www.youtube.com/watch?v=-LtyF7LUQvs&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=10
上面這張圖可以看到上次作者測試的狀況。
接著作者示範了如何用 flipperzero-subbrute 這個應用程式去做到剛才的 brute force,詳情可見:https://www.youtube.com/watch?v=-LtyF7LUQvs&list=PLM1cyTMe-PYJfnlDk3NjM85kU5VyCViNp&index=10
OK,這大概是今天的介紹。因為 Flipper Zero 其實還有很多有趣的協議和功能等著我們去介紹,所以今天比較像是告訴大家 Sub-GHz 還有很多有趣的東西可以玩,大家可以自行去做更深入的探索,也非常推薦大家去觀看 Derek Jamison 做的影片。明天我們則會開始介紹 125 kHz RFID,各位明天見!