Verständnis Demontage der Dalvik-code?

Ich bin Herumspielen mit smali und baksmali auf ein kleines Hello World " - Android-Anwendung, die ich geschrieben habe. Mein Quelltext ist:

package com.hello;

import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

wurde dann zerlegt:

.class public Lcom/hello/Main;
.super Landroid/app/Activity;
.source "Main.java"


# direct methods
.method public constructor <init>()V
    .locals 0

    .prologue
    .line 6
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method


# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
    .locals 1
    .parameter "savedInstanceState"

    .prologue
    .line 10
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 11
    const/high16 v0, 0x7f03

    invoke-virtual {p0, v0}, Lcom/hello/Main;->setContentView(I)V

    .line 12
    return-void
.end method

Ich verstehe, dass dies einige Art von Intermediate Representation, bin aber nicht sicher, was es ist. So wie ich das verstehe muss es irgendeine Spezifikation auf, wie zu verstehen, diese Darstellung aber nicht in der Lage bin, um herauszufinden, wie die Suche für Sie. So eine apk-Datei ist, kann mir jemand erklären, in einfachen Begriffen, wie die Dalvik opcode-Spezifikation wird verwendet, um kommen auf diese Darstellung? Mein Aktuelles Verständnis ist dieses:

  • Gegeben eine APK, die ich extrahieren konnte die
    AndroidManifest.xml in einem Binären XML
    format und verwenden Sie ein tool wie
    axml2xml.pl zu bekommen, eine "textuelle"
    version des manifests, die nicht
    die vollständige ODER könnte ich die
    apktool , um eine besser lesbare
    form. Aber ich bin noch nicht sicher, was
    Spezifikation, die Sie verwenden, um
    konvertieren der binären XML-Code in text.
  • Die
    Zerleger sind irgendwie nutzen
    die Dalvil opcode-Spezifikation
    Lesen Sie die dex-Dateien und konvertiert es
    in der obigen Darstellung.

Informationen (vielleicht mit einigen einfachen Beispielen) auf die beiden oben genannten Schritte helfen würde, mich in eine gute Möglichkeit zu bekommen, die Konzepte Recht.

Update 1 (geschrieben nach der Antwort von Chris):

Also im wesentlichen, ich würde Folgendes tun, um rechtzeitig an den Dalvik bytecode:

  • Nehmen Sie eine apk, und extrahieren Sie es, um die Klassen.dex-Dateien.
  • Dann den disassembler liest den Klassen.dex-Datei und bestimmt, dass alle Klassen vorhanden, die in der apk. Können Sie mir einige Informationen darüber, wie dies geschehen ist? Es tut Parsen der Datei im hex-Modus und Suche die Dalvik-Spezifikation und lösen dann entsprechend? Oder ist etwas anderes passiert? Zum Beispiel, wenn ich in den hexdump auf Klassen.dex, es gab mir so etwas wie dieses:

    64 65 78 0a 30 33 ...

Sind diese nun für Opcode-lookups?

  • Unter der Annahme, dass das tool war in der Lage, trennen Sie den eingehenden bytecode in separate Klassen geht es dann weiter, um scan die hex-codes aus den Klassen.dex-Datei und verwendet die Davlik-Spezifikation, um die Ausgabe der entsprechenden Opcode Namen aus der Tabelle?

Eigentlich, kurz gesagt, ich bin daran interessiert zu wissen, wie alle diese "Magie" ist fertig. So zum Beispiel, wenn ich waren zu lernen, zu schreiben ist dieses tool, was die high-level-roadmap sollte ich Folgen?

InformationsquelleAutor Legend | 2011-01-27
Schreibe einen Kommentar