Wenn Sie sich jemals mit Android -Anwendungen befasst haben, wissen Sie, dass Sie die Fähigkeit zu schätzen wissen, Ihr Ziel auf der fortgeschrittenen Ebene zu analysieren. Die dynamische Programmanalyse bietet Ihnen einen ziemlich guten Überblick über Ihre Anwendungsaktivitäten und Ihr allgemeines Verhalten. Manchmal möchten Sie jedoch Ihre Anwendung nur analysieren , ohne sie auszuführen. Sie möchten sich seine Komponenten ansehen und analysieren, wie sie interagieren und wie Daten von einem Punkt zum anderen verdorben sind.
Dies war der Hauptfaktor, der die Entwicklung von Smalisca vorantreibt. Es gibt in der Tat einige gute Gründe für eine statische Codeanalyse vor dem dynamischen . Bevor Sie mit der Anwendung interagieren, möchte ich wissen, wie die Anwendung erstellt wurde, wenn es API gibt, und alle Arten von Aufruf -Flow -Diagrammen generieren. Tatsächlich waren mir Grafiken sehr wichtig, seit sie Dinge visualisieren . Anstatt von Datei zu Datei zu springen, von Klasse zu Klasse, schaue ich mir nur die Grafiken an.
Während ich ein wichtiges Grund für mich war, ein solches Tool zu codieren, hat Smalisca einige andere nette Funktionen , über die Sie lesen sollten.
Im Moment gibt es einige wichtige Funktionen wie:
Parsing
Sie können ein ganzes Verzeichnis aus Smali -Dateien analysieren und extrahieren :
Sie können dann die Ergebnisse als JSON oder SQLite exportieren .
Haben Sie eine Beute auf der Parsen -Seite, um weitere Informationen zu erhalten.
Analyse
Nach dem Exportieren der Ergebnisse erhalten Sie eine interaktive Aufforderung , sich Ihre analysierten Daten genauer anzusehen. Sie können nach Klassen, Eigenschaften, Methoden und sogar Methodenaufrufen suchen . Sie können dann mehrere Filter auf Ihre Suchkriterien wie folgt anwenden:
smalisca> sc -c class_name -p test -r 10 -x path -s class_type
Dieser Befehl sucht nach 10 (-r 10) Klassen, die den Mustertest (-P) in ihrem Klassennamen (-C) enthalten. Anschließend schließt der Befehl den Spaltenpfad (-x-Pfad) aus den Ergebnissen aus und sortiert sie nach dem Klassentyp (-s).
Schauen wir uns ein anderes Beispiel an:
smalisca> scl -fc com/android -fm init -r 10
Dadurch wird nach allen Methodenaufrufen gesucht, deren Anrufklassenname das Muster com/Android (-FC) enthält. Zusätzlich können wir nach Anrufen suchen, die aus Methoden stammen, deren Name das Muster init (-FM) enthält.
Sie können Ihre Befehle natürlich aus einer Datei lesen und Ihre Ergebnisse in einer Stapel analysieren - ähnliche Weise:
$ cat cmd.txt sc -c class_name -p com/gmail/xlibs -r 10 -x Pfad aufhören $ ./smalisca.py Analyzer -i results.sqlite -f SQLite -c cmd.txt ...
Nehmen Sie eine Beute auf der Analyse -Seite für weitere Informationen.
Web -API
Smalisca bietet einen REST -Webdienst, um einfach mit den Ergebnissen zu interagieren, indem Sie nur einen Web -Client verwenden. Auf diese Weise können Sie in Ihrer eigenen (ausgefallenen) Webanwendung auf Daten zugreifen und eine saubere Trennung zwischen Backend und Frontend haben.
Lesen Sie mehr über die verfügbare REST -API auf der Web -API -Seite.
Visualisierung
Ich denke, dies ist das wertvollste Merkmal von Smalisca . Die Fähigkeit, Ihre Ergebnisse auf strukturierte Weise zu visualisieren, macht Ihr Leben komfortabler. Abhängig von dem, woran Sie interessiert sind, verfügt dieses Tool über mehrere Grafikzeichnungsfunktionen, die ich gerne bewerben möchte.
Zuerst können Sie Ihre Pakete einschließlich ihrer Klassen, Eigenschaften und Methoden zeichnen:
smalisca> dc -c class_name -p test -f dot -o /tmp/classes.dot :: Info geschriebene Ergebnisse auf /tmp/classes.dot smalisca>
Dadurch werden zuerst Klassen durchsucht, deren Klassenname Test enthält, und dann die Ergebnisse in der Graphviz Dot -Sprache exportieren. Sie können dann manuell ein Diagramm mit Punkt , Neato , Cirto usw. erstellen, oder Sie tun dies mit der interaktiven Eingabeaufforderung:
smalisca> dc -c class_name -p test -f pdf -o /tmp/classes.pdf --Prog nato :: info geschriebene Ergebnisse auf /tmp/classes.pdf smalisca>
Haben Sie eine Beute auf der Zeichenseite, um weitere Informationen zu erhalten.
Ausgabeergebnisse als Tabelle.
Grundlegende Beziehungen zwischen Klassen und Modulen.
Schauen Sie sich die Screenshots -Seite an.
Weitere Informationen finden Sie auf der Installationsseite. Anforderungen:
Nach dem Installieren des Tools möchten Sie möglicherweise zuerst eine Android -Anwendung (APK) zum Spielen abholen. Verwenden Sie apKTool oder mein eigenes Tool ADUS, um den APKS -Inhalt abzugeben. Der Einfachheit halber werde ich FakeBanker verwenden, die ich in einem früheren Blog -Beitrag analysiert habe.
Schauen wir uns jedoch zunächst die Hauptoptionen der Tools an:
$ smalisca -help
/ _ __
____ ___ ___ __ // / _ ____ ___ __ __
/', __ /' __` __` /'__ ` / /', __ /'___ /' __`
/ __, `/ / / / l . _ _ _ / __,` / __ // l . _____
/ ____/ _ _ _ __/. / ____ \ / ____/ ____ __/. _ ____ __/.
/___//_//_//_//__//_//____//_//___//____//__//_/_///____///_/_//___//__//_/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
:: Autor: Victor <Cyneox> Dorneanu
:: Desc: Tool zur statischen Codeanalyse für Smali -Dateien
:: URL: http://nullsecurity.net, http: // {blog, www} .dornea.nu
:: Version: 0.2
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Nutzung: smalisca (Unterbefehle ...) [Optionen ...] {Argumente ...}
[-] SCA-Tool für Baskmali (SMALI) -Dateien (SMALI).
Befehle:
Analysator
[-] Analysieren Sie die Ergebnisse mithilfe einer interaktiven Eingabeaufforderung oder in der Befehlszeile.
Parser
[-] Dateien analysieren und Daten basierend auf der Smali-Syntax extrahieren.
Netz
[-] Analysieren Sie die Ergebnisse mithilfe von Web-API.
Optionale Argumente:
-h, -HELP Zeigen Sie diese Hilfsnachricht an und beenden Sie
-Debug-Debug-Debug-Ausgangsausgabe
-Quiet unterdrücken alle Outputs
-Log-Level {Debug, Info, Warn, Fehler, kritisch}
Protokollierungsstufe ändern (Standard: Info)
-V, -Versionsprogrammprogrammsversionsnummer und Beenden
Ich werde zuerst ein Verzeichnis für Smali -Dateien analysieren, bevor ich die Analyse -Materials durch mache:
$ smalisca parser -l ~/tmp/fakeBanker2/Dumped/smali -s java -f SQLite -o fakeBanker.sqlite ... :: Info Parsing .java -Dateien in/home/victor/tmp/fakeBanker2/dut/smali ... :: Info fertig an Parsen! :: Info exportieren Ergebnisse in SQLite :: Info extrahieren Klassen extrahieren ... :: Info Klasseneigenschaften extrahieren ... :: Info Klassenmethoden extrahieren ... :: Info -Anrufe extrahieren ... :: Info Commit Änderungen an SQLite DB :: Info geschriebene Ergebnisse an FakeBanker.sqlite :: Info Fertig -Scannen
Schauen Sie sich auch die Parsing -Seite an, um weitere Informationen zu erhalten.
Jetzt können Sie mit Ihren generierten Exporten alles tun, was Sie wollen. Sie können die SQLite DB direkt inspizieren oder Smaliscas -Analysefunktionen verwenden:
$ smalisca Analyzer -f SQLite -i FakeBanker.sqlite ... smalisca> sc -x path -r 10 +----+--------------------------------------------------------------------------------------------------------+----------------------+-------+ | id | class_name | class_type | class_package | Tiefe | +----+--------------------------------------------------------------------------------------------------------+----------------------+-------+ | 1 | Landroid/Support/v4/net/ConnectivityManagerCompat | Öffentlichkeit | Landroid.support.v4.net | 5 | | 2 | Landroid/Support/V4/View/AccessiafityDelegateCompat $ AccessibilityDelegatejellyBeanimpl | | Landroid.support.v4.view | 5 | | 3 | Landroid/Support/v4/view/viewCompat $ viewCompatimpl | Schnittstelle Abstract | Landroid.support.v4.view | 5 | | 4 | Landroid/Support/v4/App/ActivityCompathoneyComb | | Landroid.Support.V4.App | 5 | | 5 | Landroid/Support/v4/App/NosavestateFramelayout | | Landroid.Support.V4.App | 5 | | 6 | Landroid/Support/v4/net/connectivityManagerCompathoneycombmr2 | | Landroid.support.v4.net | 5 | | 7 | Lcom/gmail/xpack/buildconfig | Öffentliches Finale | Lcom.gmail.xpack | 4 | | 8 | Landroid/Support/v4/App/BackstackRecord $ op | Finale | Landroid.Support.V4.App | 5 | | 9 | Landroid/Support/v4/App/FragmentManagerImpl | Finale | Landroid.Support.V4.App | 5 | | 10 | Landroid/Support/v4/App/ShareCompat $ ShareCompatimpl | Schnittstelle Abstract | Landroid.Support.V4.App | 5 | +----+--------------------------------------------------------------------------------------------------------+----------------------+-------+
Weitere verfügbare Befehle und Optionen finden Sie in der Analyse -Seite.
In der Zeichnungsseite finden Sie vollständige Beispiele.
Smalisca wurde im Rahmen der MIT -Lizenz veröffentlicht. Schauen Sie sich die lizenz.RST -Datei an.
Dieses Tool ist LICă gewidmet. Vielen Dank auch gehen zu:
Stephen McAllister
- Vielen Dank für all diese Stunden voller APK -Debugging und großartigen Ideen
Meine Freundin
- Vielen Dank für Ihre Geduld und Ihr Verständnis!
nullsecurity.net
- Hacken Sie den Planeten!