Manual DeObfuscation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Yazılım güvenliği alanında, gizlenmiş kodu anlaşılır hale getirme süreci olan de-obfuscation, kritik öneme sahiptir. Bu kılavuz, de-obfuscation için çeşitli stratejileri ele almakta, statik analiz tekniklerine ve obfuscation desenlerini tanımaya odaklanmaktadır. Ayrıca, pratik uygulama için bir alıştırma sunmakta ve daha ileri konuları keşfetmek isteyenler için ek kaynaklar önermektedir.
Obfuscated code ile uğraşırken, obfuscation'ın doğasına bağlı olarak birkaç strateji uygulanabilir:
DEX bytecode (Java): Etkili bir yaklaşım, uygulamanın de-obfuscation yöntemlerini tanımlamak ve ardından bu yöntemleri bir Java dosyasında çoğaltmaktır. Bu dosya, hedeflenen unsurlar üzerindeki obfuscation'ı tersine çevirmek için çalıştırılır.
Java ve Native Code: Diğer bir yöntem, de-obfuscation algoritmasını Python gibi bir betik diline çevirmektir. Bu strateji, temel amacın algoritmayı tamamen anlamak değil, etkili bir şekilde çalıştırmak olduğunu vurgular.
Obfuscated code'u tanımak, de-obfuscation sürecindeki ilk adımdır. Anahtar göstergeler şunlardır:
Java ve Android'deki string'lerin yokluğu veya karıştırılması, string obfuscation'ı önerebilir.
Assets dizininde ikili dosyaların varlığı veya DexClassLoader
çağrıları, kodun açılması ve dinamik yüklenmesi hakkında ipuçları verebilir.
Tanımlanamayan JNI fonksiyonları ile birlikte native kütüphanelerin kullanımı, native yöntemlerin potansiyel obfuscation'ını gösterebilir.
Kodun kontrol edilen bir ortamda çalıştırılması, dinamik analiz obfuscated code'un gerçek zamanlı olarak nasıl davrandığını gözlemlemeyi sağlar. Bu yöntem, kodun gerçek niyetini gizlemek için tasarlanmış karmaşık obfuscation desenlerinin iç işleyişini ortaya çıkarmada özellikle etkilidir.
Çalışma Zamanı Şifre Çözme: Birçok obfuscation tekniği, yalnızca çalışma zamanında şifresi çözülen string'ler veya kod parçaları içerir. Dinamik analiz sayesinde, bu şifreli unsurlar şifre çözme anında yakalanarak gerçek halleri ortaya çıkarılabilir.
Obfuscation Tekniklerini Tanımlama: Uygulamanın davranışını izleyerek, dinamik analiz belirli obfuscation tekniklerini tanımlamaya yardımcı olabilir; örneğin, kod sanallaştırma, paketleyiciler veya dinamik kod üretimi.
Gizli Fonksiyonelliği Ortaya Çıkarma: Obfuscated code, yalnızca statik analizle belirgin olmayan gizli işlevsellikler içerebilir. Dinamik analiz, koşullu olarak çalıştırılanlar da dahil olmak üzere tüm kod yollarını gözlemleyerek bu tür gizli işlevsellikleri ortaya çıkarmayı sağlar.
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
Bu konuşma, bir Android uygulaması tarafından kullanılan en karmaşık anti-analiz native kütüphanelerinden birinin ters mühendisliğini ele alıyor. Çoğunlukla native kodda obfuscation tekniklerini kapsıyor.
REcon 2019: “The Path to the Payload: Android Edition” [video]
Bu konuşma, bir Android botnetinin davranışını gizlemek için kullandığı yalnızca Java kodunda bir dizi obfuscation tekniğini tartışıyor.