Maison  >  Article  >  Opération et maintenance  >  Comment effectuer une analyse statique sous Android

Comment effectuer une analyse statique sous Android

WBOY
WBOYavant
2023-05-11 22:28:121167parcourir

L'ingénierie inverse Android est le processus de décompilation. Étant donné que le résultat de la compilation directe Android ne peut pas être compris, le principe de l'analyse statique dans CTF est de décompiler les fichiers qui apparaissent en une couche de code source que nous pouvons comprendre et exécuter en statique. analyse.

0X01 Description de base

Le code logique des applications Android est développé par Java, donc la première couche est du code java

Java Virtual Machine JVM Quoi est en cours d'exécution est le fichier de classe compilé à partir du fichier java

La machine virtuelle Android Dalvik n'est pas le fichier de classe généré après l'exécution de la compilation JVM de la machine virtuelle Java, mais le fichier dex généré après l'exécution et la réintégration le package. Le fichier smali

APK : est le package d'installation de l'application Android compilé

fichier dex : est le fichier d'emballage du fichier de classe

smali file : C'est un fichier de bytecode Dalvik

class file : C'est un fichier de bytecode JVM

0X02 Utilisation de l'outil

La question Android dans CTF n'est pas nécessairement Je vais vous donner l'APK entièrement compilé, qui peut être n'importe quel type de fichier pendant le processus de compilation. Ci-dessous, Brother Dou divise les types de fichiers suivants et utilise des outils pour obtenir le code source Java que Brother Dou peut comprendre

.

Type 1 : fichier de classe

Cette situation est relativement simple L'outil recommandé jd-gui

peut directement extraire le fichier de classe et vous pouvez voir le java. code source.


Comment effectuer une analyse statique sous Android

Type 2 : programme APK

Une fois le projet Android compilé, nous allons obtenez ce que nous voulons du package d’installation APK, le fichier APK est en fait un package compressé.

Changez le nom du suffixe pour le compresser et décompressez-le. Le fichier décompressé est comme indiqué ci-dessous :


Comment effectuer une analyse statique sous Android

. # 🎜🎜#Dossier META-INF :

stocke les informations de signature apk pour garantir l'intégrité du package apk et la sécurité du système. Dossier

res :

stocke les fichiers de ressources, y compris les fichiers d'icônes et XML.

Fichier AndroidManifest.xml :

Fichier de configuration de l'application, chaque application doit être définie et incluse, qui décrit le nom de l'application, la version, les autorisations et les fichiers de bibliothèques référencés et d'autres informations .

fichier classes.dex :

Le fichier pouvant être chargé et exécuté directement sur la machine virtuelle Dalvik est compilé et généré par l'IDE à partir du fichier java.

resources.arsc file>

Fichier de ressources binaires, y compris les chaînes, etc.

Outils recommandés pour décompiler l'APK : ApkIDE, JEB

1 Utilisation de JEB :

JEB importe directement l'APK et la décompilation est terminée. voir le petit fichier.


Comment effectuer une analyse statique sous Android

De nombreux outils d'ingénierie inverse Android se décompilent en fichiers smali.

JEB Sélectionnez le fichier smali et appuyez sur Q pour voir le fichier java.


Comment effectuer une analyse statique sous Android

Avantages : La structure de code du fichier java décompilé à partir du fichier smali est claire.

Inconvénients : Non modifiable.

2. Utilisation d'ApkIDE :

Project->Open Apk

Attendez la fin de la décompilation.


Comment effectuer une analyse statique sous Android

Voir la fiche smali.

Comment effectuer une analyse statique sous Android

Sélectionnez le petit fichier dans lequel vous voulez le code source Java, cliquez sur le bouton ci-dessous pour ouvrir le code source Java.

Comment effectuer une analyse statique sous Android

ApkIDE est associé à jd-gui. En cliquant dessus, vous accéderez à jd-gui.

Comment effectuer une analyse statique sous Android

ApkIDE décompile l'APK en classe puis utilise jd-gui pour obtenir le code source Java.

Vous pouvez voir le fichier de classe décompilé dans le répertoire du projet d'ApkIDE_v3.3ApkIDEWorksrc d'ApkIDE.

Comment effectuer une analyse statique sous Android

Avantages : Puissant, vous pouvez modifier le fichier smali décompilé et le recompiler pour générer un APK.

Inconvénients : Le code java compilé n'est pas assez clair.

3. Différence de décompilation

Les fichiers Smali sont écrits selon la syntaxe Smali, la syntaxe Smali est libre

Le processus et les outils de décompilation sont donc différents, le code source java doit être différent

Ce qui suit est le résultat de l'utilisation des deux outils ci-dessus pour inverser le même APK :

Comment effectuer une analyse statique sous Android#🎜 🎜##🎜 🎜#

En tant que passionné de développement Java, Brother Dou aime les résultats inverses de JEB, qui sont plus confortables à regarder. Comment effectuer une analyse statique sous Android

Type 3 : fichier dex

Outil recommandé dex2.jar

fichier classes.dex, il s'agit d'un package de bytecode compilé à partir du code source Android # 🎜🎜#

Essayez d'utiliser l'outil dex2.jar pour obtenir la commande de code source Java comme suit

.d2j-dex2jar.bat C:UserslinDesktopclasses.dex


Comment effectuer une analyse statique sous Android

Les fichiers jar peuvent être compris comme des packages compressés de fichiers de classes, et la machine virtuelle Java peut être exécutée directement

Utilisez Jd-gui pour ouvrir classes-dex2jar.jar pour voir le code source Java


Comment effectuer une analyse statique sous Android

Type 4 : fichier smali

Lorsqu'il n'y a qu'un seul fichier smali, vous ne pouvez pas utiliser les outils ci-dessus pour décompiler directement

Brother Dou pensait qu'ApkIDE pouvait décompiler un APK en un fichier smali, et ajouter, supprimer, modifier et vérifiez le fichier smali

Utilisez donc ApkIDE pour ouvrir n'importe quel APK complet et ajoutez le fichier smali (l'APK peut être développé par vous-même)


Comment effectuer une analyse statique sous Android

Ajoutez le fichier smali au projet ApkIDE.


Comment effectuer une analyse statique sous Android

Recompilez pour générer l'APK.

Comment effectuer une analyse statique sous Android

Après une compilation réussie, un APK sera généré dans le répertoire APK d'origine.


Comment effectuer une analyse statique sous Android

Ouvrez-le avec des outils tels que JEB pour voir le fichier Ezreal.smali.


Comment effectuer une analyse statique sous Android

Autres outils :

Éditeur : notepad++, Sublime, etc.

Simulateur Android : simulateur Night God, etc.

0X04 Exemple d'analyse de questions

Installez l'application dans le simulateur et vérifiez s'il y a toutes les invites sur l’interface.

Entrez des caractères dans la zone de texte et cliquez sur le bouton pour provoquer une erreur. Devinez si elle peut être utilisée pour déterminer le bon drapeau.


Comment effectuer une analyse statique sous Android

Utilisez l'outil JEB pour le compiler dans un fichier java. Sous le fichier Android se trouve le fichier sdk. Nous voulons analyser le fichier de code source sous le package com.


Comment effectuer une analyse statique sous Android

Il n'y a que trois catégories de code. Tout d'abord, analysez l'entrée du programme MainActivity pour trouver les blocs de code clés.

Cette phrase sert à déterminer si le drapeau est correct.

Comment effectuer une analyse statique sous Android

Recherchez dans la classe pour voir où cette méthode est appelée.

L'analyse montre que arg12 est le paramètre à saisir dans l'interface. A ce moment, nous savons que la valeur de v5 est le drapeau que nous voulons. La fonction


Comment effectuer une analyse statique sous Android

onCreate appelle la méthode checkSN et transmet deux paramètres :

MainActivity.this.edit_userName.trim()

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

//OnCreate est une fonction spéciale d'Android, utilisée pour "indiquer qu'une fenêtre est en cours de génération".

//Il ne génère pas de fenêtre, mais définit uniquement les propriétés de la fenêtre telles que le style, la position, la couleur, etc. avant que la fenêtre ne soit affichée.

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);

                                                                                                                 Vous pouvez l'utiliser directement

et v3 est la valeur de retour de toHexString. et doit être transmis. v1 est v1.update(arg11.getBytes()); le

arg11 généré est le paramètre transmis "Tenshine"

private boolean checkSN(String arg11, String arg12) {

   boolean v7 = false;

   if(arg11 != null) {

#🎜 🎜#       essayez {

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

              return v7;

          }

#🎜 🎜#           if(arg12 == null) {

             return v7;

           }

         if(arg12.length() != 22) {

               return v7;

                     retourner la version 7 ;         MessageDigest v1 = MD5");

           v1. reset();

           v1.update(arg11.getBytes());

           String v3 = MainActivity.toHexString(v1.digest(), "");#🎜 🎜#

           StringBuilder v5 = new StringBuilder();

           int v4;

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

             }

           if(!"fla g{" + v5 .toString() + "}" }

#🎜 🎜#       catch(NoSuchAlgorithmException v2) {

           goto label_40;

       }

     v7 = vrai;

   }# 🎜🎜#

   retour v7;

label_40:

   v2.printStackTrace();

   retour v7;#🎜 🎜## 🎜🎜#}

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

都是纯java代码,Pour Android, il s'agit de Java的依赖包。

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class Code {

# 🎜🎜#   string statique toHexString(byte[] arg8, String arg9) {

       StringBuilder v3 = new StringBuilder();

       byte[] v0 = arg8;#🎜🎜 #

       int v5 = v0.length;

       int v4;

       for(v4 = 0; v4 ≪ version 5 ; ++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 NoSuchAlgorithmException{ #🎜 🎜#

       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))( #   }

}

用IDEA编辑运行,拿到flag。

#🎜 🎜##🎜 🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer