Her uçuştan sonra telefonunda bir dosya oluşuyor. Uzantısı .txt. Açıyorsun — karşına anlamsız karakterler geliyor.
Bu bir hata değil, bir alışkanlık: dosya ikili ama uzantısı metin bırakılmış ki işletim sistemleri onu özel bir şey sanmasın.
Pilotun uçuşuna dair her şey o dosyada. Ve pilot onu okuyamıyor.
Önce yapıyı anlamak
Başlıkta tek bir bayt her şeyi belirliyor: sürüm.
[ başlık ]
0x00 sihirli bayt dizisi
0x0C sürüm ← her şeyi belirleyen alan
0x10 kayıt bölümü ofseti
0x18 toplam kayıt sayısı
[ kayıtlar ] sabit uzunlukta bloklar, art arda
tip(1) | uzunluk(1) | yük(n) | ayraç(1)
Her blok bir tip taşıyor: konum/irtifa/hız, batarya hücreleri, kumanda girdisi, ev noktası, uçuş modu değişimi, uyarı olayı. Veri aslında düzenli; sorun okunabilir olmaması.
Sürüm 13’ten küçükse: XOR
Eski dosyalarda kayıt bölümü sabit bir anahtarla XOR’lanmış. Bu bir şifreleme değil, bir gizleme — amacı güvenlik değil, sıradan kullanıcının dosyayı karıştırmasını engellemek.
Aynı anahtarla ikinci kez uygulamak orijinali geri verir. Şifreleme ile çözme aynı işlem.
Anahtarı bulmak da zor değil: kayıt bloklarının belli alanları tahmin edilebiliyor. Bilinen düz metin ile şifreli metni XOR’larsan anahtar ortaya çıkıyor.
Sonuç: eski kayıtlar tamamen çevrimdışı çözülüyor.
Sürüm 13 ve 14: AES
Yeni sürümlerde kayıt bölümleri gerçek şifreleme ile korunuyor ve anahtar dosyanın içinde yok.
Dosyada olan şey bir anahtarlık talebi: şifreli her bölüm için bir tanımlayıcı. Bunları üreticinin açık API’sine gönderiyorsun, karşılığında o uçuşa ait anahtarları alıyorsun.
Uçuşu sen yaptın. Dron senin. Veri senin telefonunda. Ama onu okuyabilmek için üreticinin sunucusunun ayakta olmasına ve sana izin vermesine bağlısın. İnternetin yoksa kendi uçuşunun kaydını açamıyorsun.
Bu bir hata değil, bir tasarım tercihi. Ve “veri kimin?” sorusunun teknik karşılığı tam olarak bu.
Çözülünce ne görünüyor
Kayıtlar tabloya yazıldıktan sonra uçuş bir nesneye dönüşüyor: haritada bir rota, bir zaman kaydırıcısı, altında telemetri. Ve ilginç şeyler görünüyor:
- Uydu sayısının düştüğü nokta — genelde bir binanın ya da tepenin arkası. Haritada tam yeri belli.
- Batarya hücrelerinin ayrışması — bir hücre diğerlerinden hızlı düşüyorsa o batarya yaşlanmış demektir; yüzde göstergesi bunu söylemez.
- Kumanda girdisi ile gerçek hareket farkı — rüzgârın ne kadar ittiğini buradan ölçüyorsun.
Üçüncüsü en kıymetlisi: yer istasyonunun bildirdiği rüzgâr tahmini ile dronun harcadığı düzeltme girdisi arasındaki fark, o irtifadaki gerçek rüzgârı veriyor. Tahmin değil, ölçüm. Bu da doğrudan rüzgâr profili modelini doğruluyor.
Ne öğrendim
Bir ikili biçimi çözerken en önemli adım ilk bayt değil, sürüm alanını bulmak. Çünkü biçim tek bir şey değil, zaman içinde değişen bir ailedir.
Ve bir de şu: bir verinin sende olması, sana ait olduğu anlamına gelmiyor. Okuyabiliyorsan seninkidir.