- 10 Ağu 2019
- 985
- 17
Merhabalar, Android (De)Obfuscation Teknikleri konusunda sizlere android uygulamalarında kullanılan obfuscation ve deobfuscation yöntemlerinin temellerini anlattım. İyi okumalar dilerim.
İçerik
Obfuscation/Obufscator Nedir?
Obfuscationun Amacı Nedir?
Obfuscation İşlem Yapıları
Deobfuscation İşlem Yapıları
ProGuard/DexGuard Nedir?
DeGuard Nedir?
Obfuscation Teknikleri
Packerlar
Literal Encryption
White Noise
Identifier Remapping
Debug Obfuscation
Custom Encoding
Deobfuscation Teknikleri
Pattern Matching
Dex-Oracle
Virtual Execution
Smalivm
Simplify
Obfuscation/Obfuscator Nedir?
Obfuscation, anlaşılması zor bir şey yapma pratiğidir. Zararlı yazılımları geliştiren kişiler ise kaynak kodlarının okunmasını engellemek ve zorlaştırmak amacıyla obfuscation ismini verdiğimiz karmaşıklaştırma ya da gizleme anlamına gelen yöntemlere başvurmaktadırlar. Gizleme, kodun bir kısmını veya tamamını şifrelemeyi, aqua/turkhackteam.org potansiyel olarak ortaya çıkan metâ verileri çıkarmayı, yararlı sınıfları ve değişken adlarını anlamsız etiketlere yeniden adlandırmayı veya bir uygulama dosyasına kullanılmayan veya anlamsız kod eklemeyi içerebilir.
Obfuscationun Amacı Nedir?
Bir önceki konumda da anlattığım gibi zararlı yazılımlarda programın analiz edilememesi için kaynak kodları kritik bir noktadır.
Eğer bir zararlı yazılımın kaynak kodları okunabilirse istisnalar bulunmakla beraber yapacağı/yapabileceği çoğu işlem okunulabilir, tespit edilebilir.
Birçok farklı obfuscation yöntemi bulunmakla beraber obfuscatorler kaynak aqua/turkhackteam.org kodlarının okunmasını ve anlaşılabilirliğini ciddi derecede önleyebilir.
Obfuscation programları ise bu kaynak kodlarının okunmasını engellemeyi amaçlamaktadır.
Obfuscation İşlem Yapıları
Öncelikle programın java kodları compiler aracılığıyla classlara çevirilir. Çevirilen classlar dex compiler kullanılarak dex dosyalarına dönüştürülür. Bu dönüşüm sırasında da obfuscator işlemleri gerçekleştirilir.
Deobfuscation İşlem Yapıları
Dex dosyaları deobfuscate yöntemleri ile çözülmeye çalışılır. Çözülebilirse dex decompiler ile classlara dönüştürülür. Classlar ise java dosyalarına dönüştürülür ve jadx, jd-gui gibi programlar ile kaynak kodları okunur.
ProGuard/DexGuard Nedir?
Günümüzde en popüler android obfuscator programlarından biri ise proguard'dır. Bu program açık kaynak kodlu olmakla beraber java kodlarını şifrelemeyi/karıştırmayı hedeflemektedir. Ücretsizdir aqua/turkhackteam.org ve GNU lisansı bulunmaktadır. DexGuard ise aynı yazılımın daha gelişmiş ve ücretli halidir. Geliştiricileri aynıdır
DeGuard Nedir?
Makine öğrenimi ile çalışan bir deobfuscation websitesidir. Geliştiriciler bu sitenin obfuscate edilmiş android uygulamalarında class, method ve 3. parti kütüphane adlarını, içeriğini debobfuscate edebileceğini belirtmektedirler.
(tıkla)
Obfuscation Teknikleri
Günümüzde birçok aqua/turkhackteam.org obfuscation yöntemi bulunmakla beraber en çok kullanılan yöntemler aşağıda listelenmiştir;
Packerlar
Literal Encryption
White Noise
Identifier Remapping
Debug Obfuscation
Custom Encoding
Packerlar
Sadece android değil windows, mac gibi diğer platformlar için geliştirilen zararlı yazılımlar ve kaynak kodları okunması istenmeyen programlarda da kullanılmaktadırlar. Program içerisinde bulunan orijinal dex dosyaları unpacker dex dosyaları ile yer değiştirilir ve orijinal olanlar genellikle programın içerisinde şifrelenmiş bir şekilde saklanmaktadır. Dex dosyalarının çalıştırılma anlarında değiştirilmiş olan unpacker dexleri bunları çözer ve program çalışır. Android packer olarak genellikle APKProtect ve Qihoo kullanılmaktadır.
Literal Encryption
Türkçeye çevirildiğinde "Kelimesi kelimesine şifreleme" gibi bir anlamı çıkmaktadır. Adından da anlaşılabileceği üzere string, numara, array gibi değerler şifrelenmektedir. Orijinal aqua/turkhackteam.org değerler şifrelenmiş değerler ile yer değiştirlir ve çalıştırılması gerekildiği zaman decryption metodları çağırılır. Fazla yaygın olmasa da lookup metodları ile de yer değiştirilebilir. Custom encoding olarak da geçmektedir.
White Noise
Türkçede gündellik hayatta beyaz gürültü olarak kullanılmaktadır. İnsan kulağının duyabileceği bütün ses frekanslarının birleşiminden oluşan ses topluluğudur. Bu obfuscation yönteminde birçok gereksiz, kullanışsız işlem oluşturulur ve metod çağırılır. Return değerlerini etkilemeden, class değerlerini değiştirmeden karmaşıklık yaratılmaya çalışılır.
Identifier Remapping
Değişken adları, class adları, method gibi değerlerin isimleri değiştirilir ve kafa karışıklığı yaratabilecek a, b, c gibi isimler yerini alır. En bilindik programlarından biri yukarıda da bahsetmiş olduğum proguard'dır.
Debug Obfuscation
Programın debug, decompile, recompile gibi eylemlerde bulunmasını engeller. Daha önce de belirttiğim gibi obfuscation yöntemleri yukarıdakiler ile sınırlı kalmamaktadır. Bunların yanında kullanılan birçok obfuscation yöntemi bulunmaktadır.
Deobfuscation/Deobfuscator Nedir?
Sizlerin de artık bildiği gibi günümüzde farklı amaçlar için çoğu programda obfuscator kullanılmakta. Deobfuscator ismini verdiğimiz bu programlar ise gerek belirli bir obfuscatorü hedef aqua/turkhackteam.org alarak gerek ise farklı algoritmaları kullanarak programlar üzerindeki obfuscation algoritmalarını ve yöntemlerini çözmeye, kaynak kodlarına saf bir şekilde ulaşmaya çalışmaktadırlar.
Deobfuscation Teknikleri
Obfuscationda olduğu gibi deobfuscation içerisinde de birçok farklı teknik bulunmaktadır;
Pattern Matching
Dex-Oracle
Virtual Execution
Smalivm
Simplify
Pattern Matching
Program içerisinde bulunan obfuscate edilmiş dosyalar üzerinde eğer herhangi bir patern, düzen bulunduruyorsa bu tespit edilir ve program deobfuscate edilebilir. Hepsi için olmasa bile temel obfuscation yöntemlerinde program başarılı şekilde deobfuscate edilebilir. Ancak bu yöntemde kodların uzun ve fazla olması işlem süresini ve zorluğunu arttırmaktadır. Ek olarak obfuscation içerisinde bir değişiklik bile gerçekleşirse patern, düzen bozulur ve program bu yöntem aracılığıyla deobfuscate edilemez.
Dex-Oracle
Bu program DexGuard içerisinde bulunan Android.Obad'ı hedef almaktadır. Smali kodları içerisinde bulunan patern ve düzenlerin içerisinde bulunan düzenli, stabil ifadeleri aramaktadır.
Virtual Execution
Programın işleyişlerinin takip edilebilmesi amacıyla bütün metodlar çalıştırılır. Bu yöntemde aqua/turkhackteam.org deobfuscate işlemleri, obfuscate edilmiş ve kompleks işlemleri kolaylaştırılmaya çalışılarak gerçekleştirilmektedir.
Smalivm
Biraz uğraştırıcı ancak etkili bir yöntemdir. Sandbox ortamda dalvik sanal makine gibi davranılır. Smali, dex ya da apk dosyaları input olarak alınmaktadır. Ancak analiz edilen ortamam zarar gelmemesi açısından API'ler çalıştırılmaz, whitelisted olarak geçmektedir. Belirttiğim üzere ne kadar etkili olsa da günümüzde android zararlı yazılımlarında fazla kullanılmayan anti-vm teknikleri varsa bu smalivm tekniği işe yaramamaktadır.
Simplify
Analiz ve grafik oluşturmak için yine smalivm kullanmaktadır ancak ek olarak gereksiz kodların çıkarılması(White Noise Deobfuscation), herhangi bir kafa karışıklığı ya da manipilasyon için reflection yani yanıstma kullanılıyorsa onların çıkarılması, okunabilirliği arttırmak amacıyla optimizasyonlar yapılarak grafiğe dökülmektedir.(Tıkla)
İçerik
Obfuscation/Obufscator Nedir?
Obfuscationun Amacı Nedir?
Obfuscation İşlem Yapıları
Deobfuscation İşlem Yapıları
ProGuard/DexGuard Nedir?
DeGuard Nedir?
Obfuscation Teknikleri
Packerlar
Literal Encryption
White Noise
Identifier Remapping
Debug Obfuscation
Custom Encoding
Deobfuscation Teknikleri
Pattern Matching
Dex-Oracle
Virtual Execution
Smalivm
Simplify
Obfuscation/Obfuscator Nedir?
Obfuscation, anlaşılması zor bir şey yapma pratiğidir. Zararlı yazılımları geliştiren kişiler ise kaynak kodlarının okunmasını engellemek ve zorlaştırmak amacıyla obfuscation ismini verdiğimiz karmaşıklaştırma ya da gizleme anlamına gelen yöntemlere başvurmaktadırlar. Gizleme, kodun bir kısmını veya tamamını şifrelemeyi, aqua/turkhackteam.org potansiyel olarak ortaya çıkan metâ verileri çıkarmayı, yararlı sınıfları ve değişken adlarını anlamsız etiketlere yeniden adlandırmayı veya bir uygulama dosyasına kullanılmayan veya anlamsız kod eklemeyi içerebilir.
Obfuscationun Amacı Nedir?
Bir önceki konumda da anlattığım gibi zararlı yazılımlarda programın analiz edilememesi için kaynak kodları kritik bir noktadır.
Eğer bir zararlı yazılımın kaynak kodları okunabilirse istisnalar bulunmakla beraber yapacağı/yapabileceği çoğu işlem okunulabilir, tespit edilebilir.
Birçok farklı obfuscation yöntemi bulunmakla beraber obfuscatorler kaynak aqua/turkhackteam.org kodlarının okunmasını ve anlaşılabilirliğini ciddi derecede önleyebilir.
Obfuscation programları ise bu kaynak kodlarının okunmasını engellemeyi amaçlamaktadır.
Obfuscation İşlem Yapıları
Öncelikle programın java kodları compiler aracılığıyla classlara çevirilir. Çevirilen classlar dex compiler kullanılarak dex dosyalarına dönüştürülür. Bu dönüşüm sırasında da obfuscator işlemleri gerçekleştirilir.
Deobfuscation İşlem Yapıları
Dex dosyaları deobfuscate yöntemleri ile çözülmeye çalışılır. Çözülebilirse dex decompiler ile classlara dönüştürülür. Classlar ise java dosyalarına dönüştürülür ve jadx, jd-gui gibi programlar ile kaynak kodları okunur.
ProGuard/DexGuard Nedir?
Günümüzde en popüler android obfuscator programlarından biri ise proguard'dır. Bu program açık kaynak kodlu olmakla beraber java kodlarını şifrelemeyi/karıştırmayı hedeflemektedir. Ücretsizdir aqua/turkhackteam.org ve GNU lisansı bulunmaktadır. DexGuard ise aynı yazılımın daha gelişmiş ve ücretli halidir. Geliştiricileri aynıdır
DeGuard Nedir?
Makine öğrenimi ile çalışan bir deobfuscation websitesidir. Geliştiriciler bu sitenin obfuscate edilmiş android uygulamalarında class, method ve 3. parti kütüphane adlarını, içeriğini debobfuscate edebileceğini belirtmektedirler.
Obfuscation Teknikleri
Günümüzde birçok aqua/turkhackteam.org obfuscation yöntemi bulunmakla beraber en çok kullanılan yöntemler aşağıda listelenmiştir;
Packerlar
Literal Encryption
White Noise
Identifier Remapping
Debug Obfuscation
Custom Encoding
Packerlar
Sadece android değil windows, mac gibi diğer platformlar için geliştirilen zararlı yazılımlar ve kaynak kodları okunması istenmeyen programlarda da kullanılmaktadırlar. Program içerisinde bulunan orijinal dex dosyaları unpacker dex dosyaları ile yer değiştirilir ve orijinal olanlar genellikle programın içerisinde şifrelenmiş bir şekilde saklanmaktadır. Dex dosyalarının çalıştırılma anlarında değiştirilmiş olan unpacker dexleri bunları çözer ve program çalışır. Android packer olarak genellikle APKProtect ve Qihoo kullanılmaktadır.
Literal Encryption
Türkçeye çevirildiğinde "Kelimesi kelimesine şifreleme" gibi bir anlamı çıkmaktadır. Adından da anlaşılabileceği üzere string, numara, array gibi değerler şifrelenmektedir. Orijinal aqua/turkhackteam.org değerler şifrelenmiş değerler ile yer değiştirlir ve çalıştırılması gerekildiği zaman decryption metodları çağırılır. Fazla yaygın olmasa da lookup metodları ile de yer değiştirilebilir. Custom encoding olarak da geçmektedir.
White Noise
Türkçede gündellik hayatta beyaz gürültü olarak kullanılmaktadır. İnsan kulağının duyabileceği bütün ses frekanslarının birleşiminden oluşan ses topluluğudur. Bu obfuscation yönteminde birçok gereksiz, kullanışsız işlem oluşturulur ve metod çağırılır. Return değerlerini etkilemeden, class değerlerini değiştirmeden karmaşıklık yaratılmaya çalışılır.
Identifier Remapping
Değişken adları, class adları, method gibi değerlerin isimleri değiştirilir ve kafa karışıklığı yaratabilecek a, b, c gibi isimler yerini alır. En bilindik programlarından biri yukarıda da bahsetmiş olduğum proguard'dır.
Debug Obfuscation
Programın debug, decompile, recompile gibi eylemlerde bulunmasını engeller. Daha önce de belirttiğim gibi obfuscation yöntemleri yukarıdakiler ile sınırlı kalmamaktadır. Bunların yanında kullanılan birçok obfuscation yöntemi bulunmaktadır.
Deobfuscation/Deobfuscator Nedir?
Sizlerin de artık bildiği gibi günümüzde farklı amaçlar için çoğu programda obfuscator kullanılmakta. Deobfuscator ismini verdiğimiz bu programlar ise gerek belirli bir obfuscatorü hedef aqua/turkhackteam.org alarak gerek ise farklı algoritmaları kullanarak programlar üzerindeki obfuscation algoritmalarını ve yöntemlerini çözmeye, kaynak kodlarına saf bir şekilde ulaşmaya çalışmaktadırlar.
Deobfuscation Teknikleri
Obfuscationda olduğu gibi deobfuscation içerisinde de birçok farklı teknik bulunmaktadır;
Pattern Matching
Dex-Oracle
Virtual Execution
Smalivm
Simplify
Pattern Matching
Program içerisinde bulunan obfuscate edilmiş dosyalar üzerinde eğer herhangi bir patern, düzen bulunduruyorsa bu tespit edilir ve program deobfuscate edilebilir. Hepsi için olmasa bile temel obfuscation yöntemlerinde program başarılı şekilde deobfuscate edilebilir. Ancak bu yöntemde kodların uzun ve fazla olması işlem süresini ve zorluğunu arttırmaktadır. Ek olarak obfuscation içerisinde bir değişiklik bile gerçekleşirse patern, düzen bozulur ve program bu yöntem aracılığıyla deobfuscate edilemez.
Dex-Oracle
Bu program DexGuard içerisinde bulunan Android.Obad'ı hedef almaktadır. Smali kodları içerisinde bulunan patern ve düzenlerin içerisinde bulunan düzenli, stabil ifadeleri aramaktadır.
Virtual Execution
Programın işleyişlerinin takip edilebilmesi amacıyla bütün metodlar çalıştırılır. Bu yöntemde aqua/turkhackteam.org deobfuscate işlemleri, obfuscate edilmiş ve kompleks işlemleri kolaylaştırılmaya çalışılarak gerçekleştirilmektedir.
Smalivm
Biraz uğraştırıcı ancak etkili bir yöntemdir. Sandbox ortamda dalvik sanal makine gibi davranılır. Smali, dex ya da apk dosyaları input olarak alınmaktadır. Ancak analiz edilen ortamam zarar gelmemesi açısından API'ler çalıştırılmaz, whitelisted olarak geçmektedir. Belirttiğim üzere ne kadar etkili olsa da günümüzde android zararlı yazılımlarında fazla kullanılmayan anti-vm teknikleri varsa bu smalivm tekniği işe yaramamaktadır.
Simplify
Analiz ve grafik oluşturmak için yine smalivm kullanmaktadır ancak ek olarak gereksiz kodların çıkarılması(White Noise Deobfuscation), herhangi bir kafa karışıklığı ya da manipilasyon için reflection yani yanıstma kullanılıyorsa onların çıkarılması, okunabilirliği arttırmak amacıyla optimizasyonlar yapılarak grafiğe dökülmektedir.(Tıkla)
Son düzenleme: