{{#include ../../banners/hacktricks-training.md}} ## Manuel **De-obfuscation Teknikleri** **Yazılım güvenliği** alanında, gizli kodu anlaşılır hale getirme süreci olan **de-obfuscation**, kritik öneme sahiptir. Bu kılavuz, statik analiz tekniklerine odaklanarak de-obfuscation için çeşitli stratejileri incelemektedir ve obfuscation desenlerini tanımayı amaçlamaktadır. Ayrıca, pratik uygulama için bir alıştırma sunmakta ve daha ileri konuları keşfetmek isteyenler için ek kaynaklar önermektedir. ### **Statik De-obfuscation için Stratejiler** **Obfuscated code** ile başa çıkarken, 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. ### **Obfuscation'ı Tanımlama** 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ıyla birlikte native kütüphanelerin kullanımı**, native yöntemlerin potansiyel obfuscation'ını gösterir. ## **De-obfuscation'da Dinamik Analiz** Kodun kontrollü 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 amacını gizlemek için tasarlanmış karmaşık obfuscation desenlerinin iç işleyişini ortaya çıkarmada özellikle etkilidir. ### **Dinamik Analizin Uygulamaları** - **Çalışma Zamanı Şifre Çözme**: Birçok obfuscation tekniği, yalnızca çalışma zamanında şifresi çözülen string'ler veya kod segmentleri 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, packer'lar 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. ## Referanslar ve Daha Fazla Okuma - [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html) - BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)] - 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](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)] - Bu konuşma, bir Android botnetinin davranışını gizlemek için kullandığı yalnızca Java kodunda bir dizi obfuscation tekniğini tartışıyor. {{#include ../../banners/hacktricks-training.md}}