TCL Android TV Root Denemeleri
Tersine mühendislik

Sorun
Neden yapıldı
Salonumuzda duran TCL 65T61C (Android TV 12, Realtek platformu) tek bir soruyla projeye dönüştü: “Bu cihazın içinde ne var ve root olabilir mi?” Amaç sızma değil, sahiplikti — cihaz bizim, yazılımı da anlaşılmalıydı. Kural baştan kondu: TV’nin kapağı hiç açılmayacak, aile etkilenmeyecek, her adım geri alınabilir olacak.
Yaklaşım
Yöntem
8 gün boyunca önce kâğıt, sonra cihaz: TCL’nin sunucusundan cihazın tam firmware paketi (~2 GB) indirildi ve daemon, HAL servisleri, hatta kernel image statik olarak çözüldü. Canlı TV’de yalnızca doğrulamalar yapıldı. TCL’nin teşhis servisindeki bir kapı keşfedildi: uid-1000 (system_app) olarak istenen kod çalıştırma. IR tarafında ise kumandanın dilini öğrenmek için kendi verici devremiz kuruldu.
Nasıl çalışıyor
Mimari
TV’nin içinde tclfactoryos adlı root daemon çalışıyor; içinde system() çağrısına açık bir komut işlemcisi var. Bu işlemciye giden tam 3 kanal vardı: fabrika kumanda dizisi (IR), fiziksel UART ve dışarıya kendi bağlanan p2p TCP kanalı. Yani root’a giden yol üç kapılı bir koridora benziyordu — ve çalışma, bu üç kapının da kilitlerini tek tek belgeledi.
Teknik özet
Bulgular
Kumandanın IR protokolü ölçerek çözüldü: kaynaklarda 38 kHz yazar ama alıcı 56 kHz ister — bütün erken denemelerin sessiz ölüm sebebi buydu. 40 tuşun tam kod tablosu çıkarıldı, TV kendi devremizle tuş tuş kontrol edildi. Kernel sürücüsü disassemble edilince fabrika tuşlarının özel type-0x19 olaylarıyla bildirildiği ve dizinin hane değerlerinin tuş tablosundan geldiği görüldü. Son adım matematikti: dizinin sabit 0x01/0x0C marker baytları tabloda hiç yok — hiçbir geçerli dizi kurulamaz.
Önemli değişiklik
Kırılma anları
Üç kırılma anı projeyi döndürdü: (1) ucuz bir alıcı modülüyle kumandanın sinyali ölçülünce 56 kHz gerçeği ortaya çıktı; (2) p2p kanalının daemon açılışında değil, yalnızca geçerli IR dizisinde doğduğu kanıtlandı — “reboot at, düzelir” umudunu öldüren bulgu; (3) transistör bacak sırasının kurulum kılavuzlarında yanlış yazıldığı (C–B–E) fark edildi. Ve bir kaza: P-mode açıkken atılan reboot TV’yi 40 dakika fabrika test ekranına kilitledi — projenin en değerli kuralı (reboot ancak onayla) bu kazadan doğdu.
Sonuç
Kapanış
Root alınamadı — ama kanıtla kapatıldı: bu firmware’de yazılımsal root kurulamaz, çünkü fabrikanın kendi tuş tablosu dizinin sabit baytlarını içermiyor. 20+ kapatılmış saldırı vektörü gerekçeleriyle envanterlendi. Çalışma biterken TV tüm izlerden temizlendi: daemon bir daha açılmayacak şekilde kapatıldı, araçlar silindi, Bluetooth geri açıldı. Her şey — dokümantasyon, araçlar, kanıt kesitleri — açık kaynak repoda: github.com/4onurdemir/tcl-androidtv-root-attempts
Ekranlar
Kanıtlar
Yukarıdaki fotoğraf, TV ile konuşan gerçek devre: Arduino Uno + 2N2222A sürücü + 940nm IR LED. Bu devre TV’nin sesini açıp kapattı ve tüm fabrika problarını taşıdı. Log kesitleri, ham IR ölçümleri ve kernel tuş tablosu repoda: github.com/4onurdemir/tcl-androidtv-root-attempts
Ne öğrendim
Dersler
En büyüğü: ölçmeden inanma. Ne veritabanları ne kernel kaynağı, bu alıcının gerçek taşıyıcısını yazmıyordu. İkincisi: her iddianın ölçütü “ışık çıktı” değil, “TV’de gözlenen etki + log kaydı” olmalı. Üçüncüsü: imkansızlık da sonuçtur — kanıtlı bir kapanış, yarı bırakılmış bir başarıdan değerlidir. Ve dördüncüsü: ölü yolları belgeleyerek öldür; hafızası olmayan proje aynı taşı iki kez kaldırır.
Sıradaki dal senin projen
Ne yapmak istediğini birkaç cümleyle yaz. Genelde aynı gün, en geç ertesi gün dönüyorum.
Şu an yeni işlere açığım: proje bazlı serbest işler, uzaktan ya da İstanbul’da yerinde. Bir web platformu, eğitilecek bir model ya da inatçı bir cihaz; hangisiyse yaz ya da ara.