EYDefterEmre Yakut
← tüm yazılar
Protokol · Mobil · derin

Uçuş kaydını çözmek: aynı uzantı, iki ayrı dünya

Drone’un bıraktığı .txt dosyası düz metin değil. Eski sürümleri bilgisayarında çözebiliyorsun; yenileri için üreticinin sunucusundan anahtar istemen gerekiyor. Sürüm baytı hangisi olduğunu söylüyor.

.txt uçuş kaydı header sürüm baytı v < 13v 13/14 XOR çevrimdışı çözülür AES anahtar DJI’de Open API keychain isteği kayıt çözüldü konum · irtifa · batarya aynı uzantı, iki ayrı dünya: sürüm baytı hangisi olduğunu söylereski kayıtlar tamamen sizin; yenileri için üreticinin sunucusuna sormanız gerekir

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.

XOR’un tersinirliği
(A ⊕ K) ⊕ K = A

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.

buradaki asıl mesele teknik değil

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.

ProtokolMobil