重現農業局的衛星檢查 | Subsidy Claim | GaianSpace CTF 2026
🌐 English version: English
系列第四篇,也是「農場篇」(Babb 的 AgriLink 世界觀)的收尾。前三篇把 LoRa 解調器練起來了,這篇在解調之外多了一層 GIS 與分類器重現
某種程度上是前面所有技能的綜合應用
系列其他篇:Channel Hop、True Color Is a Lie、Isodata Seven、Two Voices、No Name on the Door、Hopscotch
題目在講什麼

縣農業局,Babb 北邊地塊的面積給付申請被駁回:「地塊已被申報為牧草,衛星檢查通過」。有人用 Babb 的玉米田申請了給付,而辦公室的衛星檢查竟然認同對方。
辦事員順口透露一件事:今年辦公室的分類統計裡少放了一個類別 因為「這裡沒人申報那個作物,而且田野調查很貴」。另外,共用 SDR 在 12:05 錄到陌生人在「又一個頻道」上傳送這一批申報。
目標:找出陌生人這一批申報裡所有的不實申報,把它們的申報代碼依送出順序用連字號連起來。
給的檔案有 SDR 錄波、辦公室的檢查影像(5 頻道 GeoTIFF)、類別統計、訓練田與地塊登記簿、駁回信
先用 SDR 解出申報批次
這次的無線電是 434.65 MHz、SF9、BW125k、前導碼 8、顯式標頭、CR4/5。
沿用解調器,64 個 burst 解出來是:一個批次標頭 + 30 筆申報 + 一個短封包,然後整批再送一次(所以每筆內容有兩份可以互相驗證)

每筆申報的格式是 <序號>;<地塊>;<申報作物>;<面積>;<申報代碼>,例如 01;MZH-8140;legelo;44.67;CUVE(legelo = 牧草)
關鍵:被刪掉的那個類別
辦公室的 .sta 檔用高斯最大似然分類、等先驗,但只有四個類別:牧草、殘茬、耕地、聚落,可以發現 玉米(kukorica)被拿掉了,只是訓練田還留著
監督式分類器只能輸出訓練過的類別,所以沒有玉米統計時,玉米田會被硬分成最像的一類(牧草),檢查就通過了,這就是整題的核心漏洞
我先把訓練田的多邊形光柵化到影像網格,重算每個類別的平均與共變異數,跟 .sta 檔逐位元組吻合,確認座標與取樣慣例都對。
然後用訓練田 T-01 補回玉米的統計,做 5 類分類,再逐筆比對:

辦公室的 4 類分類下 30 筆全部「通過」
補回玉米後,只有 3 筆不符,而且都是 申報牧草、實際是玉米 :
| # | 地塊 | 申報 | 補回玉米後 | 代碼 |
|---|---|---|---|---|
| 1 | MZH-8140(Babb 的地塊) | 牧草 | 玉米 93% | CUVE |
| 10 | MZH-9183 | 牧草 | 玉米 84% | UKEJ |
| 28 | MZH-1402 | 牧草 | 玉米 80% | TRP6 |
Flag
1 | GAIANSPACE{CUVE-UKEJ-TRP6} |
心得
- 「少了一個類別」是整題關鍵。 監督式分類器只能輸出訓練過的類別,沒有玉米的統計就把玉米硬塞進最像的牧草——所以「檢查通過」不代表申報是真的。這是個很真實的遙測詐領情境。
- 先用已知資料驗證自己的處理方式。 訓練田像素數、
.sta的平均與共變異數逐位元組吻合之後,再去補缺少的類別,結論才站得住。 - 解 SDR 的批次要善用重送。 兩次傳輸內容一致,可以交叉確認每個字元,不必猜。
- 到這裡,農場篇的 LoRa 解調器已經很成熟了。接下來系列會跳到另一條故事線——深夜值班、衛星被劫持——同一支解調器會遇到更刁鑽的狀況。


