Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So führen Sie eine statische Analyse in Android durch

So führen Sie eine statische Analyse in Android durch

WBOY
WBOYnach vorne
2023-05-11 22:28:121110Durchsuche

Android Reverse Engineering ist der Prozess der Dekompilierung. Da die Ergebnisse der Android-Vorwärtskompilierung nicht verstanden werden können, besteht die Voraussetzung der statischen Analyse in CTF darin, die vorhandenen Dateien in eine Quellcodeschicht zu dekompilieren, die wir verstehen und statische Analysen durchführen können.

0X01 Grundlegende Erklärung

Der Logikcode der Android-Anwendung wird von Java entwickelt, daher ist die erste Ebene der Java-Code

Die Java Virtual Machine JVM führt die aus der Java-Datei kompilierte Klassendatei aus

Die Android Virtual Machine Dalvik Führen Sie nicht die nach der JVM-Kompilierung der Java Virtual Machine generierte Klassendatei aus, sondern führen Sie die nach dem Packen generierte Dex-Datei aus und integrieren Sie sie erneut. Die kompilierte Smali-Datei

APK: ist das kompilierte Android-Anwendungsinstallationspaket

Dex-Datei: ist class Die Paketdatei der Datei

smali-Datei: Es ist eine Dalvik-Bytecode-Datei

class-Datei: Es ist eine JVM-Bytecode-Datei

0X02 Tool-Verwendung

Die Android-Frage im CTF liefert Ihnen möglicherweise nicht unbedingt die vollständig kompilierte Datei APK, möglicherweise Es handelt sich um einen beliebigen Dateityp während des Kompilierungsprozesses. Im Folgenden unterteilt Brother Dou die folgenden Dateitypen und verwendet Tools, um den Java-Quellcode zu erhalten, den Brother Dou verstehen kann. Typ 1: Klassendatei. Diese Situation ist relativ einfach . Das empfohlene Tool jd-gui

ist direkt. Ziehen Sie die Klassendatei ein und Sie können den Java-Quellcode sehen.


Typ 2: APK-Programm So führen Sie eine statische Analyse in Android durch
Nachdem das Android-Projekt kompiliert wurde, erhalten wir das gewünschte APK-Installationspaket. Die APK-Datei ist eigentlich ein komprimiertes Paket.

Ändern Sie den Suffixnamen in „zip“ und entpacken Sie die Datei wie folgt:


META-INF-Ordner: So führen Sie eine statische Analyse in Android durch
speichert APK-Signaturinformationen, um die Integrität des APK-Pakets und die Systemsicherheit zu gewährleisten .

res-Ordner:

speichert Ressourcendateien, einschließlich Symbol- und XML-Dateien.

AndroidManifest.xml-Datei:

Anwendungskonfigurationsdatei, die von jeder Anwendung definiert und eingebunden werden muss. Sie beschreibt den Anwendungsnamen, die Version, Berechtigungen, referenzierte Bibliotheksdateien und andere Informationen.

classes.dex-Datei:

Sie können die Datei direkt auf die virtuelle Dalvik-Maschine laden und ausführen, die von der IDE aus der Java-Datei kompiliert und generiert wird.

resources.arsc-Datei>

Binäre Ressourcendatei, einschließlich Zeichenfolgen usw.

Empfohlene Tools zum Dekompilieren von APK: ApkIDE und JEB

1. JEB-Verwendung:

JEB importiert das APK direkt und Sie sehen die Smali-Datei, nachdem die Dekompilierung abgeschlossen ist.


Viele Android-Reverse-Engineering-Tools dekompilieren in kleine Dateien. So führen Sie eine statische Analyse in Android durch
JEB Wählen Sie die Smali-Datei aus und drücken Sie Q, um die Java-Datei anzuzeigen.


Vorteile: Die Codestruktur der aus der Smali-Datei dekompilierten Java-Datei ist klar. So führen Sie eine statische Analyse in Android durch
Nachteile: Kann nicht geändert werden.

2. Verwenden Sie ApkIDE:

Projekt->Öffnen Sie Apk

Warten Sie, bis die Dekompilierung abgeschlossen ist.


Sehen Sie sich die Smali-Datei an. So führen Sie eine statische Analyse in Android durch

Wählen Sie die Smali-Datei aus, die Java-Quellcode erfordert, und klicken Sie auf die Schaltfläche unten, um den Java-Quellcode zu öffnen. So führen Sie eine statische Analyse in Android durch

ApkIDE ist mit jd-gui verknüpft. Wenn Sie darauf klicken, wird zu jd-gui gesprungen. So führen Sie eine statische Analyse in Android durch

ApkIDE dekompiliert die APK in Klassen und verwendet dann jd-gui, um den Java-Quellcode abzurufen. So führen Sie eine statische Analyse in Android durch
Sie können die dekompilierte Klassendatei im Projektverzeichnis von ApkIDE_v3.3ApkIDEWorksrc sehen.

Vorteile: Leistungsstark, Sie können die dekompilierte Smali-Datei ändern und neu kompilieren, um APK zu generieren. So führen Sie eine statische Analyse in Android durch
Nachteile: Der kompilierte Java-Code ist nicht klar genug. 3. Unterschiede bei der Dekompilierung gleiche APK mit den beiden oben genannten Tools. Umgekehrte Ergebnisse:

Als Java-Entwicklungsbegeisterter mag Bruder Dou die umgekehrten Ergebnisse von JEB, die komfortabler anzusehen sind.

Typ drei: Dex-Datei

Empfohlenes Tool dex2.jar

classes.dex-Datei, dies ist ein aus Android-Quellcode kompiliertes Bytecode-PaketSo führen Sie eine statische Analyse in Android durch

Versuchen Sie, das Tool dex2.jar zu verwenden, um den Java-Quellcode-Befehl wie folgt abzurufen

So führen Sie eine statische Analyse in Android durch.d2j -dex2jar.bat C:UserslinDesktopclasses.dex


So führen Sie eine statische Analyse in Android durch

jar-Dateien können als komprimierte Pakete von Klassendateien verstanden werden und die Java Virtual Machine kann direkt ausgeführt werden

Verwenden Sie JD-GUI, um „classes-dex2jar.jar“ zu öffnen und den Java-Quellcode anzuzeigen


So führen Sie eine statische Analyse in Android durch

Typ 4: Smali-Datei

Wenn nur eine einzige Smali-Datei vorhanden ist, können Sie die oben genannten Tools nicht zum direkten Dekompilieren verwenden

Bruder Dou dachte, dass ApkIDE eine APK in eine Smali-Datei dekompilieren und hinzufügen, löschen und ändern kann und überprüfen Sie die Smali-Datei

Verwenden Sie also ApkIDE, um eine beliebige vollständige APK zu öffnen und die Smali-Datei hinzuzufügen (die APK kann von Ihnen selbst entwickelt werden)


So führen Sie eine statische Analyse in Android durch

Fügen Sie die Smali-Datei zum ApkIDE-Projekt hinzu.


So führen Sie eine statische Analyse in Android durch

Neu kompilieren, um APK zu generieren.

So führen Sie eine statische Analyse in Android durch

Nach erfolgreicher Kompilierung wird eine APK im ursprünglichen APK-Verzeichnis generiert.


So führen Sie eine statische Analyse in Android durch

Öffnen Sie es mit Tools wie JEB, um die Ezreal.smali-Datei anzuzeigen.


So führen Sie eine statische Analyse in Android durch

Andere Tools:

Editor: Notepad++, Sublime usw.

Android-Emulator: Night God-Emulator usw.

0X04 Beispielfragenanalyse

Installieren Sie die Anwendung im Simulator und prüfen Sie, ob welche vorhanden sind alle Eingabeaufforderungen auf der Benutzeroberfläche.

Geben Sie Zeichen in das Textfeld ein und klicken Sie auf die Schaltfläche, um einen Fehler anzuzeigen, der zur Bestimmung der richtigen Flagge verwendet werden kann.


So führen Sie eine statische Analyse in Android durch

Kompilieren Sie es mit dem JEB-Tool in eine Java-Datei. Unter der Android-Datei befindet sich die SDK-Datei. Wir möchten die Quellcodedatei unter dem COM-Paket analysieren.


So führen Sie eine statische Analyse in Android durch

Es gibt nur drei Codekategorien. Analysieren Sie zunächst den Programmeintrag MainActivity, um die Schlüsselcodeblöcke zu finden.

Mit diesem if-Satz soll festgestellt werden, ob die Flagge korrekt ist.

So führen Sie eine statische Analyse in Android durch

Durchsuchen Sie die Klasse, um zu sehen, wo diese Methode aufgerufen wird.

Die Analyse zeigt, dass arg12 der in die Schnittstelle einzugebende Parameter ist. Zu diesem Zeitpunkt wissen wir, dass der Wert von v5 das gewünschte Flag ist.


So führen Sie eine statische Analyse in Android durch

onCreate-Funktion ruft die checkSN-Methode auf und übergibt zwei Parameter:

MainActivity.this.edit_userName.trim()

MainActivity.this.edit_sn.getText().toString().trim( )

//OnCreate ist eine spezielle Funktion in Android, die verwendet wird, um „anzugeben, dass ein Fenster generiert wird“.

//Es wird kein Fenster generiert, sondern nur die Eigenschaften des Fensters wie Stil, Position, Farbe usw. festgelegt, bevor das Fenster angezeigt wird.

public void onCreate(Bundle arg3) {

super.onCreate(arg3);

this.setContentView(0x7F040019);

this.setTitle(0x7F06001D);

this.edit_ userName = "Tenshine";

this .edit_sn = this.findViewById(0x7F0C0051);

this.btn_register = this.findViewById(0x7F0C0052);

this.btn_register.setOnClickListener(new View$OnClickListener() {

public void onClick(View arg5) {

if(!MainActivity.this.checkSN(MainActivity.this.edit_userName.trim(), MainActivity.this.edit_sn.getText().toString().trim())) {

      Toast.makeText(MainActivity.this, 0x7F06001E , 0).show (); MainActivity.this.btn_register.setEnabled(false);

MainActivity .this.setTitle(0x7F060019);

                                                                                                      Sie können es direkt verwenden

und v3 ist der Rückgabewert des toHexString Methode und muss übergeben werden. v1 ist v1.update(arg11.getBytes()); das generierte

arg11 ist der übergebene Parameter „Tenshine“

private boolean checkSN(String arg11, String arg12) {

   boolean v7 = false;

   if(arg11 != null) {

       try {

           if(arg11.length() == 0) {

               zurück v7;

           }

           if(arg12 == null) {

             return v7;

           }

           if(ar g12.length() != 22) {

               return v7;

           }

           MessageDigest v1 = MessagedIGest.getInstance ("Md5");

v1.reset ();

           StringBuilder v5 = new StringBuilder();

           int v4;

         for(v4 = 0; v4                .append(v3.charAt(v4)) ;

           }

           if(!"flag{" + v5.toString() + "}".equalsIgnoreCase(arg12)) {

             return v7;

         }

       }

       catch(NoSuchAlgorithmException v2) {

           goto label_40;

       }

       v7 = true;

   }

   return v7;

label_40:

   v2.printStackTrace();

   return v7;

}

将上面的分析结果,取出生成v5的关系代码

都是纯java代码,不需要Android的包引入,只需引入java的依赖包。

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

öffentliche Klasse Code {

   static String toHexString(byte[] arg8, String arg9) {

       StringBuilder v3 = new StringBuilder();

       byte[] v0 = arg8;

       int v5 = v0.length;

       int v4;

       for(v4 = 0; v4            String v2 = Integer.toHexString(v0[v4] & 255);

           if(v2.length() == 1) {

               v3.append('0');

           }

           v3.append(v2).append(arg9);

       }

       return v3.toString();

   }

   public static void main(String[] args)throws Ausnahme{

       MessageDigest v1 = MessageDigest .getInstance("MD5");

       v1.reset();

       v1.update("Tenshine".getBytes());

       String v3 = Code.toHexString(v1.digest(), "");

       StringBuilder v5 = new StringBuilder();

       int v4;

       for(v4 = 0; v4          v5.append(v3.charAt(v4 ) );

       }

       System.out.println("flag{" + v5.toString() + "}");

 .  }

}

用IDEA编辑运行,拿到flag。

Das obige ist der detaillierte Inhalt vonSo führen Sie eine statische Analyse in Android durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen