2011-01-29 13 views
11

Obecnie zajmuję się kodowaniem Dalvik, ale ponieważ brakuje mi tła kompilatora, stwierdzam, że trochę trudno jest uchwycić projekt. Jestem prawie pewien, że nikt nie napisał książki o Dalvik (albo mógłbym się mylić), więc czy ktoś może zaproponować mi odniesienie do VM Java, które zawiera kilka praktycznych przykładów? Konkretnie, co jestem zainteresowany to:Odniesienie do maszyn wirtualnych Dalvik lub Java?

  • Zrozumieć jak interpretować wygenerowany bajtowego kodu
  • Korzystanie specyfikacji VM (Dalvik lub Java) dekompilować kod bajtowy do pośredniej reprezentacji, a następnie skompilować go z powrotem

W skrócie, prawdopodobnie to, czego szukam, to poznanie kodu bajtu inżynierii wstecznej, aby móc go analizować pod kątem luk. Jakieś sugestie?

+0

Dla normalnego java '.class' pliki istnieją dekompilatory, które produkują kod źródłowy java, który jest bardzo czytelny. – CodesInChaos

+1

@CodeInChaos: Tak. Mogłem znaleźć kilka dekompilatorów, ale staram się nauczyć, jak napisać prosty dekompilator, aby poczuć, jak działa. – Legend

+0

@CodeInChaos Dekompilatory dla normalnych plików .class nie pomagają zbytnio w Dalvik VM Androida, ponieważ używają zupełnie innej architektury maszyn wirtualnych i całkowicie różnych kodów bajtowych. –

Odpowiedz

9

Dla materiałów referencyjnych nic nie pobije dokumentów dalvik. Można je znaleźć zarówno w Dalvik podprojektu w AOSP, czy są one teraz dostępne online w http://s.android.com/tech/dalvik/index.html

Bytecode format (lub Dalvik-bytecode.html w projekcie Dalvik) jest prawdopodobnie taki, który można byłoby najbardziej interesuje . .Dex Format (dek-format.html) jest także przydatna, ponieważ jest Instruction Formats (instrukcja-formats.html)

Dla niektórych bardziej ogólnych informacji na temat kodu bajtowego, sprawdź http://code.google.com/p/smali/wiki/Registers i http://code.google.com/p/smali/wiki/TypesMethodsAndFields

będziesz na pewno chcesz kilka narzędzi. Jestem oczywiście całkowicie stronniczy od smali/baksmali, która jest obecnie jedyną dostępną parą asemblera/dezasemblera. Istnieje również dezasembler o nazwie dedexer (ale bez asemblera) i dexdump, który jest dostarczany z bazą kodową AOSP i zapewnia niskopoziomowy zrzut plików dex - nie tylko kod bajtowy, ale również wszystkie struktury dex (baksmali ma podobne wyjście , z opcją -D).

Możesz być także zainteresowany apktool, który używa smali/baksmali, ale także ma możliwość odwrócenia "skompilowanych" plików xml w apk.

Istnieje kilka narzędzi, które obecnie nie przekształcają Dalvik kodu bajtowego kodu bajtowego Javy z powrotem, choć nie sądzę, że są jeszcze w 100% - undx i dex2jar

3

Istnieją już narzędzia do tworzenia plików .dex inżynierii odwrotnej w celu generowania odczytywanych przez człowieka reprezentacji kodów bajtów. Jednym z najpopularniejszych jest baksmali, który można znaleźć tutaj: http://code.google.com/p/smali/.

Opis samych kodów bajtowych można łatwo znaleźć, wybierając Googling. Oto trzecie wyniki: http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html.

Jeśli korzystasz z układów inżynierii wstecznej, potrzebujesz również konwertera binarnego xml do xml. Jest jeszcze jedno pytanie o przepełnienie stosu, które wspomina o kilku narzędziach do robienia tego: Parse versionCode from android apk files

Powiązane problemy