
Das Redexer-Framework zur binären Instrumentierung von Dalvik-Bytecode
Redexer ist ein Reengineering-Werkzeug, das Android-App-Binärdateien manipuliert. Dieses Tool kann eine DEX-Datei in eine speicherresidente Datenstruktur parsen; ermitteln, mit welchen Parametern die App bestimmte Berechtigungen verwendet (wir nennen diese Funktion RefineDroid); diese Datenstruktur modifizieren und entparsen, um eine ausgegebene DEX-Datei zu erzeugen (wir nennen diese Funktionen Dr. Android, was für Dalvik Rewriting for Android steht).
Dieses Tool wurde unter OCaml 4.09.0 und Ruby 1.8.6(7) getestet, daher müssen Sie diese (oder neuere Versionen) installieren.
Zur Manipulation einer SHA-1-Signatur (Hash) im DEX-Format verwenden wir die OCaml SHA-Bibliothek über ocamlfind/findlib, einen OCaml-Bibliotheksmanager. Der einfachste Weg, beide zu installieren, ist die Verwendung von OPAM, einem OCaml-Paketmanager, der beide Pakete enthält: OPAM ocamlfind und OPAM sha.
Sie können beide Pakete auch direkt erstellen und/oder installieren. Wenn Sie einen Linux-Rechner verwenden, finden Sie leicht Distributionen.
Andernfalls, z. B. auf einem Mac, müssen Sie sie selbst erstellen.
Den Originalquellcode finden Sie hier.
Erstellen Sie ihn mit make und verlinken Sie das resultierende Verzeichnis in
das Root-Site-lib-Verzeichnis von ocamlfind; oder sudo make install.
Wenn Sie einen PC verwenden, müssen Sie zuerst ocamlfind/findlib und FlexDLL installieren. Stellen Sie sicher, dass Ihre Umgebungsvariablen korrekt gesetzt sind, wie folgt:
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
OPAM-Pakete:
Android SDK (oder Quellen)
Zum Entpacken und Neupacken von APK-Dateien verwenden wir apktool, ein Open-Source-APK-Reengineering-Tool.
Da es aapt, das Android Asset Packaging Tool, verwendet, müssen Sie
das Android SDK oder die Quellen installieren. Außerdem verwenden wir
zipalign, das ebenfalls aus dem Android SDK stammt, um umgeschriebene Apps zu optimieren.
Sie können Pfade zu den Android-Basiswerkzeugen festlegen, indem Sie Folgendes zu Ihrem Profil hinzufügen:
ANDROID_HOME=$HOME/android-sdk # Ihr eigener Pfad hier!
export ANDROID_HOME
PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0 # Installierte Versionsnummer
export PATH
Die Hauptskripte sind in Ruby geschrieben und benötigen RubyGems, einen Ruby-Paketmanager, sowie Nokogiri, eine XML-Bibliothek zur Bearbeitung von Manifest-Dateien.
Wenn Sie Graphen sehen möchten (z. B. Call-Graph, Kontrollflussgraph, Dominator-Baum usw.), müssen Sie graphviz dot installieren.
Um redexer zu erstellen, einfach make ausführen! Die redexer-Binärdatei befindet sich dann auf der obersten Ebene.
$ make (clean)
Vor der Verwendung des Tools muss der aktuellste Plattform-Datei für apktool vom Benutzer installiert werden. Zum Beispiel:
$ java -jar tools/apktool.jar if [geeignete Plattform-Datei]
Sie können auch API-Dokumentation im HTML-Format erstellen.
$ make api
Sie können alle vom Tool bereitgestellten Optionen anzeigen:
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
Wie dexdump im Android SDK ermöglicht redexer Ihnen, die Interna der angegebenen DEX-Datei im YAML-Format anzuzeigen.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
Diese Option gibt Befehle für eine bestimmte Methode aus.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
Diese Funktion dient zum Testen der Parse- und Dump-Module von redexer. Sie erzeugt wahrscheinlich eine identische DEX-Datei.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
Sie können auch grundlegende Statistiken über die DEX-Datei anzeigen, z. B. # instr.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
Diese Option gibt alle in der DEX-Datei definierten Klassennamen aus.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes
Das kann nützlich sein, um nach bestimmten Drittanbieter-Bibliotheken zu suchen, z. B.:
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
Diese Option gibt die API-Nutzung in der DEX-Datei aus.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
Sind Sie nicht neugierig, wie selten einige Opcodes in Dalvik-Bytecodes verwendet werden? Es zeigt Ihnen das Histogramm aller Opcodes, oder Sie können nachschlagen, wie oft der genaue Opcode in der gegebenen App verwendet wird.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]
Beispiel:
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
Diese Option führt eine ausbreitungsbasierte Intent-Auflösungsanalyse durch und gibt Übergänge zwischen Activity-Klassen aus.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
Diese Option erzeugt eine PDF-Datei, die einen Call-Graphen der gegebenen Datei darstellt. Wenn Sie keinen PDF-Namen angeben, wird cg.pdf verwendet.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
Diese Option erzeugt eine PDF-Datei, die einen Kontrollflussgraphen der angegebenen Methode zeigt. Hängen Sie einen Methodennamen mit Punkt an den Klassennamen an: class_name.method_name
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
Diese Option ist ähnlich wie die obige, mit dem Unterschied, dass sie den (Post-)Dominator-Baum darstellt.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
Diese Option führt eine klassische rückwärtsgerichtete Datenflussanalyse durch.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
Diese Option führt eine klassische vorwärtsgerichtete Datenflussanalyse durch.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
Diese Option führt eine klassische vorwärtsgerichtete Datenflussanalyse durch.
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd