Bayt kodu seviyesinde çalışmanın kimi zaman zorlayıcı olduğuna hak veriyorum. Mevzu bahis bir Java zararlı yazılımını analiz etmek olduğunda, eldeki class dosyalarını Java kaynak koduna çevirmek, çoğu analistin izleyeceği adımların başında yer alıyor. Ancak Temmuz ayındaki yazımda (Java Bayt Kod Hata Ayıklaması) da bahsettiğim üzere, gizleme (obfuscator) aracından (Allatori gibi) faydalanan bir zararlı yazılım ile karşı karşıya kaldığınızda, kaynak koduna dönüştürücüleri (JD gibi) çoğu zaman sizi yarı yolda bırakabiliyor.
Aralık ayı gibi, sahte bir e-posta ile hacklenmiş olduğunu düşündüğüm bir web sitesi üzerinden indirilmesi sağlanan ve her indirilme isteğinde, farklı bir şifre ile paketlenen siparisler.rar (siparisler.jar) adında bir Java zararlı yazılımı dikkatimi çekti.
Allatori gizleme aracının güçlü özelliklerinden (uzun sınıf ve metod isimleri, AUX gibi rezerve isimler vs.) faydalanarak oluşturulan bu JAR paketi içinde yer alan class dosyalarına baktığımda, dosya isimlerinin ~8000 hane uzunluğunda olduğunu gördüm.
Bu uzun dosya isimleri sayesinde zararlı yazılımı Winrar, 7zip, unzip gibi araçlarla işletim sistemine açmak (extract) istediğimde, işletim sistemi sınırlarına takıldığımı ve dosyaları açamadığımı farkettim. Ayrıca uzun dosya isimleri ve metod isimleri nedeniyle çoğu kaynak kod dönüştürücüsünün (CFR hariç) bu dosyayı kaynak koduna çevirme işlemi esnasında hata aldığını gördüm.
Bu dosyanın, kum havuzu analizi yapan ticari bir ürünü analiz esnasında çökerttiğine şahit olmuş biri olarak, sadece ve sadece cihazlara yatırım yapan ve bel bağlayan kurumların pamuk ipliğinde yaşadıklarını yeri gelmişken tekrar söylemiş olayım.
Tabii Python ile Allatori Zip Shortener gibi basit bir araç yazarak bu zip dosyasını açılabilir hale getirmem çok zor olmadı.
Daha detaylı bilgi edinmek için Temmuz ayında yayımlamış olduğum yazıda olduğu gibi bundan sonra bayt kod seviyesinde analize devam edebilirdim. Eğer amacım sadece bunun hangi türde bir zararlı yazılım olduğunu öğrenmek olsaydı, zahmete girmeden bellek dosyası üzerinde yapacağım ufak bir araştırma ile bunun Jsocket RAT yazılımı olduğunu da öğrenebilirdim.
Bu zararlı yazılımı incelerken, http://www.javadecompilers.com/ sitesi sayesinde çoğu kaynak kod dönüştürücüsünün Allatori’ye karşı yetersiz olduğunu gördüm. Çoğu dönüştürücü, bu zararlı yazılımı ya kaynak koda çevirmekte başarsız oldu ya da çevirdiği kaynak kodu, tekrar derlenemeyecek durumdaydı. Bayt kodu seviyesinde statik analiz ile ilerlemek isteseydim, Allatori’nin karakter dizilerini gizlediğini görecek ve bunu çözmek için gizleme yöntemini bulmam gerekecekti ve bu bayt kod seviyesinde işlerimi biraz daha uzatacaktı. Ben de bu vesileyle, Allatori’ye karşı mevcut kod dönüştürücüleri değerlendirmeye ve karakter dizi gizlemesi için kullanılan algoritmayı hangi dönüştürücünün başarıyla ortaya çıkartabildiğini öğrenmeye karar verdim. Bunun için de başarı kriteri olarak, kaynak koduna çevrilen class dosyasının tekrar derlenebilmesini ve çalıştırılabilmesini kabul ettim.
İlk olarak Java ile komut satırına “Hello World” yazan basit bir kod yazdım ve bunu JAR paketine çevirdim. Ardından bu paketi Allatori’ye vererek gizlenmiş (obfuscated) paket oluşturmasını sağladım. Son olarak da http://www.javadecompilers.com/ sitesi üzerinden her bir JAR dosyasını kaynak koduna çevirip derlemeye ve çalıştırmaya başladım.
Değerlendirme sonucunda JadX, Procyon kaynak kodu dönüştücülerinin başarıyla Allatori v5.6 Demo sürümü ile gizlenmiş kodları orjinal haline çevirebildiğini gördüm.
Procyon ve JadX sayesinde Allatori v5.6 tarafından kullanılan karakter dizisi gizleme algoritması da ortaya çıkmış oldu :)
Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.
7 comments
teşekkürler mert bey hızlı dönüş için çok tehlikeli bir durum ben şok.
merhaba mert bey bir soru soracağım, biyografinizde yazılanlara bakarak cevap gelebileceğini düşündüm. şimdi web sitenizde kaynağı görüntüle dediğimiz de analitik kullanıyorsanız orada analitiğin UA ile başlayan bir kodu var. UA-1111111-1 gibi mesela bu kodu gizlemek istiyorum. bu konu hakkında yardımcı olabilir misiniz? kaynağı görüntüle dediklerinde görememeleri için ne yapmamız lazım
Hiçbir şey yapamazsınız çünkü o analitik kodunun kullanıcının internet tarayıcısında çalışması gerekir.
java ile masaüstü uygulama yazıyorum, ama jar dosyalarının içindeki kodlarının görülebildiğini yakın zamanda öğrendim, Kodların çalınmasını engellemenin bir yolu varmıdır, yoksa vb.net temi uygulama yapayım, teşekkürler
Maalesef yoktur.
Android zararlılarını aynı şekilde obfuscate edilebiliyor mu ?
Bilmiyorum, araştırmanız gerekecektir.