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)
Nel campo della sicurezza del software, il processo di rendere comprensibile il codice oscurato, noto come de-obfuscazione, è cruciale. Questa guida esplora varie strategie per la de-obfuscazione, concentrandosi sulle tecniche di analisi statica e sul riconoscimento dei modelli di offuscamento. Inoltre, introduce un esercizio per l'applicazione pratica e suggerisce ulteriori risorse per coloro che sono interessati ad esplorare argomenti più avanzati.
Quando si tratta di codice offuscato, possono essere impiegate diverse strategie a seconda della natura dell'offuscamento:
Bytecode DEX (Java): Un approccio efficace consiste nell'identificare i metodi di de-obfuscazione dell'applicazione, quindi replicare questi metodi in un file Java. Questo file viene eseguito per invertire l'offuscamento sugli elementi mirati.
Codice Java e Nativo: Un altro metodo è tradurre l'algoritmo di de-obfuscazione in un linguaggio di scripting come Python. Questa strategia evidenzia che l'obiettivo principale non è comprendere completamente l'algoritmo, ma eseguirlo efficacemente.
Riconoscere il codice offuscato è il primo passo nel processo di de-obfuscazione. Gli indicatori chiave includono:
L'assenza o la confusione delle stringhe in Java e Android, che possono suggerire offuscamento delle stringhe.
La presenza di file binari nella directory delle risorse o chiamate a DexClassLoader
, che suggeriscono l'unpacking del codice e il caricamento dinamico.
L'uso di librerie native insieme a funzioni JNI non identificabili, che indicano un potenziale offuscamento dei metodi nativi.
Eseguendo il codice in un ambiente controllato, l'analisi dinamica consente di osservare come il codice offuscato si comporta in tempo reale. Questo metodo è particolarmente efficace per scoprire il funzionamento interno di modelli di offuscamento complessi progettati per nascondere il vero intento del codice.
Decrittazione a Runtime: Molte tecniche di offuscamento comportano la crittografia di stringhe o segmenti di codice che vengono decrittografati solo a runtime. Attraverso l'analisi dinamica, questi elementi crittografati possono essere catturati nel momento della decrittazione, rivelando la loro vera forma.
Identificazione delle Tecniche di Offuscamento: Monitorando il comportamento dell'applicazione, l'analisi dinamica può aiutare a identificare specifiche tecniche di offuscamento utilizzate, come la virtualizzazione del codice, i packer o la generazione dinamica di codice.
Scoprire Funzionalità Nascoste: Il codice offuscato può contenere funzionalità nascoste che non sono evidenti attraverso l'analisi statica da sola. L'analisi dinamica consente di osservare tutti i percorsi del codice, inclusi quelli eseguiti condizionalmente, per scoprire tali funzionalità nascoste.
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
Questo intervento tratta il reverse engineering di una delle librerie native anti-analisi più complesse che ho visto utilizzate da un'applicazione Android. Copre principalmente tecniche di offuscamento nel codice nativo.
REcon 2019: “The Path to the Payload: Android Edition” [video]
Questo intervento discute una serie di tecniche di offuscamento, esclusivamente nel codice Java, che un botnet Android stava utilizzando per nascondere il suo comportamento.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)