Galileoff Android Spy, Telegram API aracılığıyla uzaktan yönetilen, genişletilmiş veri hasat yeteneklerine sahip devasa bir uzak yönetim ve gözlem konseptidir (PoC). Cihaz arka planında istikrarlı ve gizli çalışacak şekilde yapılandırılmış olup, ağ sorunlarında veri kaybını önlemek amacı ile kendi içinde dahili bir çevrimdışı arşivleme mekanizması işletir.
Caution
YASAL UYARI VE SORUMLULUK REDDİ BEYANI
Bu proje, güvenlik araştırmacılarının, siber güvenlik öğrencilerinin ve sızma testi uzmanlarının, Android işletim sistemindeki izin yönetimi limitlerini, arka plan servis mimarisini ve "C&C (Komuta Kontrol) Zafiyetlerini" analiz etmeleri için salt zafiyet analizi ve eğitim amacıyla hazırlanmıştır.
- Bu yazılım kodlarının herhangi bir cihaza rıza dışı, kasten veya takip/casusluk amacıyla entegre edilmesi kesin suretle yasa dışıdır.
- Proje kodunun yasa dışı kullanımından dogacak kanuni yaptırımlardan bütünüyle kodları sisteme derleyip kuran veya yaydığı tespit edilen kullanıcı sorumludur.
- Geliştirici(ler) ve açık kaynak sağlayıcılar, bu yazılımın amacının dışına çıkarak farklı hedeflerde kullanılmasından doğan hiçbir yasal, hukuki veya idari bir mesuliyet taşımaz. Repoyu klonlayan kişi bu şartları kanunen peşinen kabul etmiş sayılır.
Uygulamanın temel veri iletim dinamiği üç ana ayağa dayanır: Gelen HTTP Payload isteklerini çözümleyen denetleyici sistem, cihaz üzerinden veri emen sınıflar ve çevrimdışı (offline) depolanan verileri sunucuyla senkronize eden WorkManager iş parçacıkları.
Sistemin Komuta Kontrol sunucusuyla haberleşme trafiğini ve veriyi işleme sırasını modelleyen akış şeması:
graph TD
A[Komuta Merkezi / Telegram] <-->|JSON Polling API| B(TelegramApiManager)
B -->|Komut Deşifre Analizi| C{CommandExecutor}
C -->|Örn: /konum, /sms_kaydi| D[Veri Hasat Sınıfları]
C -->|Örn: /kilitle, /yok_et| E[Sistem Önlemi Sınıfları]
D -.->|Ağ Başarısızlıkları ve Timeout| F[(OfflineStorageHelper)]
E -.->|Geri Bildirim Log Kayıtları| F
H[Pasif İşletim Sistemi Dinleyicileri] -->|Sms, Çağrı, Root Check| D
H -->|Bağlantının Tekrar Kurulması| I[ImmediateUploadWorker]
I -->|En Eski Log'un Derlenmesi| F
I -->|Datayı Senkronize Etme| B
Uzaktan gönderilen bir veri çekme emrinin (Örneğin: /arama_kaydi) uygulama içi seyahatinde çalışan modüllerin zaman çizelgesi:
sequenceDiagram
participant Telegram as Telegram Bot
participant Executor as CommandExecutor
participant Helper as Hasat Sınıfı
participant Offline as OfflineBellek
Telegram->>Executor: /arama_kaydi komutunu POST eder
Executor->>Helper: Veritabanından SQL okuma işlevini tetikler
Helper-->>Executor: Formatlanmış logları string döner
alt Ağ İletişimi Aktif ve Kararlı
Executor->>Telegram: Veriyi HTTP üzerinden sunucuya teslim eder
else Ağ İletişimi Pasif / Kopma veya Uçuş Modu
Executor->>Offline: Veriyi ön belleğe aktarır (Maks 5MB FIFO kuralı ile)
Offline-->>Executor: Başarılı şekilde diske yazıldı ibaresi döner
end
Uygulama bütünlüğünü korumak ve Solid prensiplerine uymak (Sınıf Bağımsızlığı) adına her Java servisi farklı bir amaca ve sistem ayrıcalığına hitap etmektedir.
Bu sınıf kümesi, kullanıcı hareketlerini donanım ve yazılım API'larından çekmekle görevlidir.
| Dosya Dizini | Altyapı Desteği ve Amacı |
|---|---|
CallStateReceiver.java |
TelephonyManager aracılığıyla çalışarak EXTRA_STATE_RINGING (çalınma) ve EXTRA_STATE_OFFHOOK (görüşme) fazlarını gözler. |
SmsHelper.java |
Yüksek düzey Android ContentResolver kullanarak content://sms URI adresini tarar; Gelen kutusu ve taslak verilerini asenkron çeker. |
CallLogHelper.java |
Cihazın CallLog.Calls.CONTENT_URI veritabanından çağrı numarası, görüşme tarihi ve süresini alarak kategorize eder. |
ContactsHelper.java |
ContactsContract kütüphanelerini saniye sekteye uğratmadan okuyarak rehber kayıtlarının kimliğini diziler. |
BrowserHistoryHelper.java |
Yalnızca Root erişimi mevcutsa diğer tarayıcıların Protected Sandbox kısımlarına (.db, sqlite) müdahaleyle URL kayıtlarını deşifre eder. |
WhatsAppMessageHandler.java |
Android'in devasa yetkiye sahip AccessibilityService (Erişilebilirlik) ağacına kanca mermi atar ve mesaj kutularını canlı olarak loglar. |
Sistemin kendini yenileyebilmesi ve standart şartlar altında cihazdan kaldırılmasını önlemeyi hedefleyen çekirdek yapı taşlarıdır.
| Dosya Dizini | Hayatta Kalma ve Görev Mekaniği |
|---|---|
GuardianReceiver.java |
AlarmManager ile kurulan saatli bombadır. Her 3 saatte bir aktifleşir, paket gizliliğini doğrular, ikon durumunu onarır (Self-Healing). |
SystemAppManager.java |
Gerekli Root (SU) erişiminde APK gövdesini işletim sisteminin kalbine (system/app/) enjekte ederek fabrika ayarı bağışıklığı kazandırır. |
ServiceRestartReceiver.java |
Intent donanım algılayıcısını takip ederek işletim sistemi başlatıldığında (Boot Phase) Background servisleri Foreground yetkisiyle diriltir. |
MyDeviceAdminReceiver.java |
Standart ayarlardan kasti program temizliğine set çeker, sistem üstü "Device Policy" onayından kilitleme mekanizmalarını donanır. |
ExceptionHandler.java |
Thread.UncaughtExceptionHandler protokolü uyarınca, olası "Fatal Error" çökmelerinde JVM kapanmadan önce işlemi loglayarak servisin dirilme döngüsüne zemin kurar. |
SelfDestructManager.java |
Panik anında uzaktan /yok_et okunduğu an tüm Policy ve Yönetim bayraklarını devrederek yazılımı kendi elleriyle silme emri üretir. |
| Dosya Dizini | Depo Akışı ve Gönderim Davranışı |
|---|---|
OfflineStorageHelper.java |
Çevrimdışı veritabanıdır. Limitsiz boyutlanmayı (OutOfMemory) engellemek adına algoritma bazlı FIFO modeli benimser; boyut şişmesinde eski logu çiğneyerek temiz alanı garanti eder. |
ImmediateUploadWorker.java |
Sistemin ağa tespiti anında "Trigger Action" alarak bağlantı kopana kadar biriken bütün veri dosyalarını HTTP kanallara şutlayan işçi parçasıdır. |
Sistemin uzaktan yönetim mekanizması Telegram platformu üzerinden gerçekleşmekle beraber; gönderilecek her JSON stringinin (komutun) çalışması belli başlı Android işletim izinleri onayına bağlıdır. İlgili yetkinin olmaması durumunda hedefe otonom şekilde Error Code basılacaktır.
| Geçerli C&C Komutu | İşlev Çıktısı Tablosu | Zorunlu Android İzni (Manifest) |
|---|---|---|
/durum |
Dalvik ortamındaki batarya, internet ve mevcut root bayraklarını derleyen acil durum raporudur. | Gereksinim Yok |
/konum |
FusedLocationProviderClient limitleri eşliğinde yüksek çözünürlüklü koordinatı ve harita bağlantısını iletir. | ACCESS_FINE_LOCATION |
/arama_kaydi |
Android çağrı sunucusundaki defter üzerinden tüm arama geçmişini analiz ederek kronolojik format döker. | READ_CALL_LOG |
/sms_kaydi |
Cihazın standart SMS mesaj servisini okuyarak güncel posta dökümlerini çeker. | READ_SMS |
/kisi_listesi |
Rehber listesini alfabetik string verisi olarak bloklar halinde parçalar ve sunucuya aktarır. | READ_CONTACTS |
/izin_listesi |
Mevcut uygulamaya verilmiş, sistem içindeki tehlikeli ve sıradan onayların anlık yetki röntgenini çeker. | Gereksinim Yok |
/kilitle |
Ekran şifrelerini sabote etme riskine dayanarak Android force-lock devresini bypass mantığında kilitler. | BIND_DEVICE_ADMIN |
/tarayici_gecmisi |
SU tespiti olursa SQL komut desteğiyle tarayıcıları deşifre ederek dizin history'lerini analiz eder. | Cihaz Root Yetkisi (SUID) |
/yok_et |
Sistem yöneticisi bayrağını düşürüp kendisini ana sunucudan kök klasörler de dahil silecek imha prosedürüdür. | Uygulama İçi Tetikleme |
Projeyi eğitim laboratuvarınızda test etmek adına Gradle motorunu yapılandırmanız gerekir.
- Proje ana havuzunda bulunan
gradle.properties.exampleyapılandırma taslağının birebir aynısınıgradle.propertiesadıyla çoğaltınız. - Oluşturduğunuz dosyanın içerisine kendi Bot Token ve Chat ID anahtarlarınızı ilave edin.
(Not: Ana
BOT_TOKEN="SECRET_API_TOKEN" CHAT_ID="TARGET_CLIENT_ID"
gradle.propertiesdosyası, hassas veri zafiyetine karşı git platformuna asla gönderilmez) - IDE (Örn: Android Studio) üzerinden Gradle projesini
Syncediniz. - Uygulamayı
Build APKveya Build Bundle metotları ile Debug/Release formatında derleyiniz.
İşlem sonucunda kurulum yapıldığında cihaz ekranına MainActivity bir karşılama arayüzü sunacaktır ve uygulama kurulum esnasındaki kritik izinler devralındığı an kendisini işletim sisteminin gövdesine gizleyecektir.
Açık kaynak destekçilerinin veya mimariyi analiz eden zafiyet uzmanlarının bilgisine sunulan, projede halihazırda bulunan bazı mantıksal eksiklikler ve üzerine çalışılması beklenen yamalar aşağıda kategorize edilmiştir.
galileoff. Notu: Bu listede yer alan zafiyetler ve hata kayıtları benim tarafımdan kademeli olarak çözülmekte olup, pürüzleri giderilen her bir madde güncellemeler eşliğinde bu listeden kaldırılacaktır.
Sistemin karakalem taslağından kurumsal mimariye geçiş sürecinde çözülmesi aciliyet arz eden problemler ve çözüm rotaları tabloyla görselleştirilmiştir:
| Bileşen Kategorisi | Karşılaşılan Sorun ve Zafiyet Anatomisi | Uygulanacak Çözüm Mimarisi |
|---|---|---|
| Telegram C&C Term. | Flood (Yığılma) ve Döngü Riski: İletişim altyapısında herhangi bir kısıtlama mekanizması bulunmadığı için peş peşe gönderilen komutlar asenkron kuyruğu doldurarak işlemciyi kitleyebilir ve uygulamanın sonsuz döngüye girmesine yol açabilir. | Sunucu istekleri arasına eş zamanlı zaman damgaları konumlandırılarak her komuta özel bir Rate Limit (Bekleme süresi / Kısıt) algoritması kodlanacaktır. |
| Telegram C&C Term. | API Limitasyonları ve Callback Eksikleri: /izin_listesi komutu güncel Android API güvenlik standartlarında veri döndürememektedir. Ek olarak, /yeniden_baslat isteği başarıyla sonuçlansa bile sunucuya işlemin bittiğine dair hiçbir onay (handler callback) yollanmamaktadır. |
Bozuk çıktı metotları yeni Java API standartlarına adapte edilecek ve her işlemin sonuna özel başarılı/başarısız dönüt mekanizmaları (Action Handlers) yerleştirilecektir. |
| Veri Hasat Motoru | Mem-Leak ve Bellek Şişmesi: /sms_kaydi filtresiz ve sınırsız çekim yaptığından ötürü, kullanıcının şişik gelen kutularını tararken işletim sisteminin geçici hafızasını patlatabilmektedir (Out Of Memory Exception). |
SMS ve benzeri çok yüklü log çekim algoritmalarına sayfalama mantığı getirilerek yalnızca Son N Adet şeklinde sıkı miktar kotaları uygulanacaktır. |
| WhatsApp Manipülatörü | İzinsiz Gönderim ve Hatalı DOM Analizi: Ekranda tespit edilen sohbet baloncukları okunurken, verinin karşıdan mı yoksa client'ten mi geldiği kesin ayıklanamamaktadır. Ayrıca mesajlar komut beklemeden otonom şekilde fırlatılıp kirlilik yaratmaktadır. | Sistem, sohbeti izinsiz yakalamaktan vazgeçecek; yalnızca komut tetiklendiğinde özel NotificationListenerService yardımıyla son bildirimleri gizlice yansıtacaktır. |
| Arama & Ses Dinleme | İki Yönlü (Two-Way) Kayıt Engelleri: Android OS tarafından getirilen katı donanım limitasyonları sebebiyle gerçekleştirilen çağrıların çift yönlü ses kaydı direkt olarak manipüle edilememekte ve çökmelere sebebiyet vermektedir. | Alternatif medya kanalları ve ses bypass köprüleri (Audio Mixer revizyonları) kurularak çift mikrofon beslemeli donanımsal kod blokları test edilecektir. |
| Arama & Ses Dinleme | Süre Loglarındaki Matematiksel Asimetriler: Cihaz karşıyı aradığında çalma süresi direkt olarak konuşma süresine eklenmekte; çağrı açılıp kapandığında ise baştan sayılarak hatalı bir matematik döndürmekte ve numarayı gizli göstermektedir. | CallLog.Calls statüs algoritmaları tamamen değiştirilecek ve görüşmenin cevaplandığı anı (OffHook event) merkeze alan yeni bir olay (Event) izleyicisi yazılacaktır. |
| İmha ve Güvenlik | Sistemde Anti-Ghosting (Zombileşme) Kalıntıları: Acil panik komutu olan /yok_et veya çevirmeli şifre kullanıldığında, yazılım sadece yetkilerini ezmektedir. Sistemin asıl APK dosyası kalıcı olarak silinmediği için ölü bir paket olarak kalmaktadır. |
Tüm bağları kopardıktan saniyeler sonra işletim sistemine tam donanımlı paket silme isteği Intent.ACTION_UNINSTALL_PACKAGE sekansını dayatacak kalıcı imha döngüsü kullanılacaktır. |
Bu proje açık kaynaklıdır ve topluluk desteğiyle geliştirilebilir. Eğer işinize yaradıysa:
- Fork'layın
- Branch oluşturun (
git checkout -b feature/yeniozellik) - Commit'leyin (
git commit -m 'Yeni özellik: X eklendi') - Push'layın (
git push origin feature/yeniozellik) - Pull Request açın
Bu proje MIT Lisansı ile lisanslanmıştır. Detaylar için LICENSE dosyasına bakınız.