2011-01-29 14 views
11

Attualmente sto cercando nel bytecode di Dalvik ma, poiché mi manca uno sfondo di compilatore, trovo un po 'difficile capire il progetto. Sono abbastanza sicuro che nessuno abbia scritto un libro su Dalvik (o potrei sbagliarmi) quindi qualcuno può suggerirmi un riferimento sulla Java VM che contiene alcuni esempi pratici? In particolare, ciò che mi interessa in sono:Riferimento su Dalvik o Java Virtual Machines?

  • capire come interpretare il byte-codice generato
  • Utilizzando specifiche VM (Dalvik o Java) per decompilare il codice di byte in una rappresentazione intermedia e quindi compilare nuovamente

In breve, probabilmente quello che sto cercando è di imparare codice byte di reverse engineering in modo da poterlo analizzare per le vulnerabilità. Eventuali suggerimenti?

+0

per Java normale 'file .class' ci sono decompilatori che producono codice sorgente java che è molto leggibile. – CodesInChaos

+1

@CodeInChaos: Sì. Potrei trovare un paio di decompilatori ma sto cercando di imparare come scrivere un semplice decompilatore per avere un'idea di come funzionano le cose. – Legend

+0

@CodeInChaos I decompilatori per i normali file .class non sono di grande aiuto per la macchina virtuale Dalvik di Android, poiché utilizza un'architettura della macchina virtuale completamente diversa e codici byte completamente diversi. –

risposta

9

Per materiale di riferimento, niente batte i documenti dalvik. È possibile trovare questi sia nel sottoprogetto Dalvik in AOSP, o sono ora disponibili online all'indirizzo http://s.android.com/tech/dalvik/index.html

Bytecode format (o Dalvik-bytecode.html nel progetto Dalvik) è probabilmente quello che si sarebbe più interessato a . .Dex Format (dex-format.html) è anche utile, come è Instruction Formats (istruzione-formats.html)

Per informazioni più generali sul bytecode, controlla http://code.google.com/p/smali/wiki/Registers e http://code.google.com/p/smali/wiki/TypesMethodsAndFields

Avrete sicuramente desidera alcuni strumenti. Sono naturalmente abbastanza parziale su smali/baksmali, che è l'unica coppia assemblatore/disassemblatore attualmente disponibile. C'è anche un disassemblatore chiamato dedexer (ma non un assemblatore), e dexdump, che viene fornito con il codice AOSP e fornisce un dump di basso livello dei file dex - non solo il bytecode, ma anche tutte le strutture dex (baksmali ha un output simile , con l'opzione -D).

Potresti anche essere interessato a apktool, che utilizza smali/baksmali, ma ha anche la possibilità di invertire i file xml "compilati" in un apk.

ci sono un paio di strumenti di là fuori che convertono Dalvik bytecode di nuovo a Java bytecode, anche se non credo che siano ancora al 100% - undx e dex2jar

3

Esistono già strumenti per il reverse engineering di file .dex per generare una rappresentazione leggibile dall'utente dei codici byte. Uno dei più popolari è baksmali, che puoi trovare qui: http://code.google.com/p/smali/.

Una descrizione dei codici byte può essere trovata facilmente da Google. Ecco i primi risultati: http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html.

Se si dispone di layout di reverse engineering, è necessario anche un convertitore binario-xml-a-xml. C'è un'altra domanda di overflow dello stack che menziona alcuni strumenti per farlo: Parse versionCode from android apk files

Problemi correlati