Il 0% ha trovato utile questo documento (0 voti)
10 visualizzazioni30 pagine

Android Reverse Engineering

cours

Caricato da

barbare
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
10 visualizzazioni30 pagine

Android Reverse Engineering

cours

Caricato da

barbare
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 30

Android reverse-engineering

find a trojan information in a closed source apps


Chi sono

Fabio Zito (@ZiteLOG)


Che cos’è il reverse-engineering?
Reverse engineering (in italiano "ingegneria inversa", "ingegnerizzazione inversa") è un anglicismo che indica
quell'insieme di analisi delle funzioni, degli impieghi, della collocazione, dell'aspetto progettuale, geometrico
e materiale di un manufatto o di un oggetto che è stato rinvenuto (ad esempio un reperto, un dispositivo,
componente elettrico, un meccanismo, software). (Wikipedia)
Sviluppo

1 2 3
● Spaghetti 12 OZ
● Guanciale 4 OZ
● Very fresh egg yolks 4
● Aged Pecorino Romano cheese
● Grated e TBSP Grana Padano cheese
● Grated salt black pepper
● Secret Sauce
Reverse-Engineering

3 2 1
● Spaghetti 12 OZ
● Guanciale 4 OZ
● Very fresh egg yolks 4
● Aged Pecorino Romano cheese
● Grated e TBSP Grana Padano cheese
● Gratedsalt black pepper
● Secret Sauce
Ma a cosa serve?
audit/modify/malware analysis…
Che cos’è la Malware Analysis?
La Malware Analysis è un ramo della Cyber Security che si occupa di scovare e neutralizzare
minacce informatiche quali virus, worm, bot, rootkit, spyware, backdoor, Trojan Horse, etc.

Ma a cosa serve esattamente quando si parla di Trojan?

A rispondere a domande come: Attraverso l’identificazione:

● Sono Spiato? ● Del malware.

● Chi mi sta spiando e come ha fatto ad ● Delle modalità di inoculazione.


infettarmi?
● Delle informazioni acquisite e della
● Dove vanno a “finire” i miei dati? loro destinazione finale
Che cos’è un Trojan?
Il Trojan è un programma maligno mascherato da qualcosa di benigno (il nome infatti deriva da
Cavallo di Troia, in esplicito riferimento alla leggenda Greca). Sono scritti principalmente per
sottrarre informazioni e esercitare controllo sul dispositivo infettato attraverso

due componenti:
● Un client installato sul dispositivo dell’utente che si occupa di inviare dati e/o
ricevere comandi.

● Uno o più server che si occupano di ricevere e memorizzare i dati inviati dal client
e inviare comandi verso quest’ultimo.
Cose da conoscere prima di iniziare
APK
L'estensione APK indica un file Android Package. Questo formato di file, una variante del formato .JAR, è
utilizzato per la distribuzione e l'installazione di componenti in dotazione sulla piattaforma per dispositivi
mobili Android. (Wikipedia)

Cartelle: Componenti:
META-INF Activity
res Receiver
File: Service
Provider
AndroidManifest.xml
classes.dex
resources.arsc
Compilare: Source Code → DEX
Disassemblare: DEX → Smali
Offuscamento

Spyme.getConnectionParams() == b.b()
Smali?

The names "smali" and "baksmali" are the Icelandic equivalents of "assembler" and "disassembler" respectively. Why Icelandic you
ask? Because dalvik was named for an Icelandic fishing village. (https://github.com/JesusFreke/smali/wiki)
Registri

v0, v1, v2… vN registri locali


p0, p1, p2… pN argomenti (p0 == this)

https://github.com/JesusFreke/smali/wiki/Registers
AndroidManifest.xml

Ogni applicazione Android dev'essere accompagnata da un file chiamato AndroidManifest.xml nella


sua cartella principale. Il Manifest raccoglie informazioni basilari sull'app, informazioni necessarie al
sistema per far girare qualsiasi porzione di codice della stessa.

● il nome del package dell'applicazione, che è anche un identificatore univoco della stessa;
● il codice della versione
● la versione del SDK minima per l'utilizzo dell'applicazione
● Descrive le componenti dell'applicazione (attività, servizi, receiver, provider, ecc.), nomina le classi e
pubblica le loro "competenze".
● i permessi dell'app, e i permessi necessari alle altre app per interagire con la stessa
● le librerie necessarie all'app
Gli strumenti

APK Studio, IntelliJ IDEA,


Android Studio (LLDB), ADB Tools,
Wireshark e tcpdump

grep è il nostro migliore amico


Iniziamo!
#1 Disassemblare
#2 Analisi del Manifest
Info base e Permessi Application e Activity Receiver, Service e Provider
#3 Analisi statica
È la «lettura» delle istruzioni contenute nel codice disassemblato per capire come il malware o
parte di esso si comporta all’interno del dispositivo infetto. Generalmente per fare questo si
individuano porzioni di codice di interesse attraverso una serie di ricerche di tipo testuale
utilizzando determinate parole chiave. Di seguito alcuni esempi ricordandoci sempre che grep è il
nostro migliore amico.
Network I/O
il Trojan deve inviare e ricevere dati da un
server remoto. Sappiamo che
generalmente tali informazioni vengono
trasmesse/ricevute tramite protocolli
criptati come ad esempio HTTPS, nel quale
possono «viaggiare» sia i dati da trasferire
dal dispositivo al server
(messaggi/registrazione audio e video,
etc.), sia le informazioni di «servizio» che
il server invia al dispositivo (comandi,
programmazioni, etc) quest’ultime
generalmente sono in formato JSON.
#4 Analisi dinamica
Consiste nell’installare l’app in un dispositivo diverso (emulatore/muletto) da quello su cui è stato estratto il
malware . Lanciarla eseguendola passo, passo utilizzando un software di debugging, in particolare *LLDB
del progetto **LLVM (Low Level Virtual Machine) analizzandone man mano i valori contenuti nei registri.

NB: In qualche caso, tale analisi è possibile solo dopo modifica al codice dissasemblato.

NB1: È utile anche lo sniffing e l’analisi del traffico di rete.

*https://en.wikipedia.org/wiki/LLDB_(debugger)
**https://it.wikipedia.org/wiki/LLVM
1
Per prima cosa è necessario installare il file
“.apk” su un dispositivo con caratteristiche
simili (emulatore/muletto) a quello da
dove è stato individuato e successivamente
estratto il Trojan. Questo al duplice
obbiettivo di:

1. non operare alcuna alterazione sul


dispositivo originale;
2. consentire la ripetibilità di tutte le
operazioni fatte.
2
Una volta installata, è necessario
«collegare» il dispositivo al codice
dissasemblato (i file .smali) attraverso
l’IDE utilizzata (Android studio/Intellij
IDEA) e qui impostare , nei punti
individuati in fase di analisi statica, i
breakpoint che consentiranno di
«bloccare» l’applicazione una volta
lanciata.
3

Eseguire l’applicazione “bloccata”


un’istruzione alla volta (passo-passo)
leggendo il contenuto memorizzato
all’interno dei registri, ogni qualvolta
viene eseguita un’istruzione fino ad
individuare quella di interesse.
Esempio su caso reale
Cambio di IMEI
Grazie per l’attenzione

Potrebbero piacerti anche