Rumah >Operasi dan penyelenggaraan >Keselamatan >Bagaimana untuk melakukan analisis statik dalam Android

Bagaimana untuk melakukan analisis statik dalam Android

WBOY
WBOYke hadapan
2023-05-11 22:28:121198semak imbas

Kejuruteraan terbalik Android ialah proses penyahkompilasi Oleh kerana hasil kompilasi hadapan Android tidak dapat difahami, premis analisis statik dalam CTF adalah untuk menyahkompilasi fail sedia ada kepada lapisan kod sumber yang boleh kita fahami dan melakukan analisis statik. .

0X01 Penerangan asas

Kod logik aplikasi Android dibangunkan oleh Java, jadi lapisan pertama ialah kod java

Mesin maya Java JVM menjalankan kompilasi fail java Kelas seterusnya fail

Mesin maya Android Dalvik bukanlah fail kelas yang dijana selepas melaksanakan kompilasi mesin maya Java JVM, tetapi fail smali

APK: Ia adalah pakej pemasangan aplikasi Android yang disusun

fail dex: Ia ialah fail pembungkusan bagi fail kelas

fail smali: Ia ialah fail bytecode Dalvik

Fail kelas: Ia ialah fail kod bait JVM

Penggunaan Alat 0X02

Soalan Android dalam CTF tidak semestinya memberikan anda APK terkumpul lengkap, ia mungkin sebarang jenis fail semasa proses penyusunan, seperti berikut Brother membahagikan jenis fail berikut dan menggunakan alat untuk mendapatkan kod sumber java yang boleh difahami oleh Brother Dou

Jenis 1: fail kelas

Situasi ini agak mudah Alat yang disyorkan jd-. gui

Tarik terus fail kelas ke dalam untuk melihat kod sumber java.


Bagaimana untuk melakukan analisis statik dalam Android

Jenis 2: Program APK

Selepas projek Android disusun, kami akan mendapat pakej pemasangan APK yang kami inginkan Fail APK sebenarnya adalah pakej termampat.

Tukar nama akhiran kepada zip dan nyahzipnya Fail yang dinyahzip adalah seperti yang ditunjukkan di bawah:


Bagaimana untuk melakukan analisis statik dalam Android

Folder META-INF:

Menyimpan maklumat tandatangan apk untuk memastikan integriti pakej apk dan keselamatan sistem.

folder res:

menyimpan fail sumber, termasuk fail ikon dan xml.

Fail AndroidManifest.xml:

Fail konfigurasi aplikasi, yang mesti ditakrifkan dan disertakan oleh setiap aplikasi, ia menerangkan nama aplikasi, versi, kebenaran, fail perpustakaan yang dirujuk dan maklumat lain.

fail classes.dex:

boleh dimuatkan terus dan dijalankan pada mesin maya Dalvik, dan dijana oleh kompilasi IDE bagi fail java.

fail sumber.arsc>

Fail sumber binari, termasuk rentetan, dsb.

Alat yang disyorkan untuk menyahkompilasi APK: ApkIDE, JEB

1. Penggunaan JEB:

JEB mengimport APK secara langsung dan anda akan melihat fail smali selepas penyahkompiunan selesai.


Bagaimana untuk melakukan analisis statik dalam Android

Banyak alat kejuruteraan songsang Android menyahkompilasi kepada fail smali.

JEB Pilih fail smali dan tekan Q untuk melihat fail java.


Bagaimana untuk melakukan analisis statik dalam Android

Kelebihan: Struktur kod fail java yang dinyahkompilasi daripada fail smali adalah jelas.

Kelemahan: Tidak boleh diubah suai.

2. Gunakan ApkIDE:

Projek-> Buka Apk

dan tunggu penyahkompilasi selesai.


Bagaimana untuk melakukan analisis statik dalam Android

Lihat fail smali.

Bagaimana untuk melakukan analisis statik dalam Android

Pilih fail smali yang memerlukan kod sumber java, klik butang di bawah untuk membuka kod sumber Java.

Bagaimana untuk melakukan analisis statik dalam Android

ApkIDE dikaitkan dengan jd-gui.

Bagaimana untuk melakukan analisis statik dalam Android

ApkIDE menyahkompilasi APK ke dalam kelas dan kemudian menggunakan jd-gui untuk mendapatkan kod sumber Java.

Anda boleh melihat fail kelas yang dinyahkompilasi dalam direktori projek ApkIDE's ApkIDE_v3.3ApkIDEWorksrc.

Bagaimana untuk melakukan analisis statik dalam Android

Kelebihan: Berkuasa, anda boleh mengubah suai fail smali yang dinyahkompilasi dan menyusun semula untuk menjana APK.

Kelemahan: Kod java yang disusun tidak cukup jelas.

3. Perbezaan dekompilasi

Fail Smali ditulis oleh sintaks Smali, sintaks Smali ialah sintaks longgar

Jadi proses penyahkompilasi adalah berbeza, alatnya berbeza, dan java kod sumber pasti berbeza

Berikut ialah hasil kejuruteraan terbalik APK yang sama menggunakan dua alatan di atas:

Bagaimana untuk melakukan analisis statik dalam Android

Bagaimana untuk melakukan analisis statik dalam Android

Abang Dou adalah peminat Java Development seperti hasil reverse engineering JEB, yang lebih selesa untuk ditonton.

Jenis 3: fail dex

Alat yang disyorkan dex2.jar

fail classes.dex, ini ialah pakej bytecode yang disusun daripada kod sumber Android

Cuba untuk menggunakan alat dex2.jar untuk mendapatkan arahan kod sumber java seperti berikut

.d2j-dex2jar.bat C:UserslinDesktopclasses.dex


Bagaimana untuk melakukan analisis statik dalam Android

Fail jar boleh difahami sebagai pakej termampat bagi fail kelas dan mesin maya java boleh dijalankan terus

Gunakan Jd -gui untuk membuka kelas-dex2jar jar, anda boleh melihat kod sumber java


Bagaimana untuk melakukan analisis statik dalam Android

Jenis 4: fail smali

tidak boleh digunakan apabila terdapat hanya satu fail smali Alat di atas secara langsung menyahkompilasi

Brother Dou berpendapat bahawa ApkIDE boleh menyahkompilasi APK ke dalam fail smali dan menambah, memadam, mengubah suai dan menyemak fail smali

Jadi dia menggunakan ApkIDE untuk membuka mana-mana APK lengkap dan kemudian menambah fail smali (APK boleh dibangunkan sendiri)


Bagaimana untuk melakukan analisis statik dalam Android

Tambah smali fail ke projek ApkIDE.


Bagaimana untuk melakukan analisis statik dalam Android

Kompil semula untuk menjana APK.

Bagaimana untuk melakukan analisis statik dalam Android

Selepas penyusunan berjaya, APK akan dijana dalam direktori APK asal.


Bagaimana untuk melakukan analisis statik dalam Android

Kemudian buka dengan JEB dan alatan lain untuk melihat fail Ezreal.smali.


Bagaimana untuk melakukan analisis statik dalam Android

Alat lain:

Editor: notepad++, Sublime, dll.

Emulator Android: Simulasi Dewa Malam

Analisis Contoh 0X04

Pasang aplikasi ke dalam simulator dan semak jika terdapat sebarang gesaan pada antara muka.

Masukkan aksara dalam kotak teks dan klik butang untuk menggesa ralat, saya rasa ia boleh digunakan untuk menentukan bendera yang betul.


Bagaimana untuk melakukan analisis statik dalam Android

Gunakan alat JEB untuk menyusunnya ke dalam fail java Di bawah fail Android ialah fail sdk di bawah pakej com.


Bagaimana untuk melakukan analisis statik dalam Android

Hanya terdapat tiga kategori kod Pertama, analisa kemasukan program MainActivity untuk mencari blok kod utama.

Ini jika ayat adalah untuk menentukan sama ada bendera itu betul.

Bagaimana untuk melakukan analisis statik dalam Android

Cari kelas untuk melihat di mana kaedah ini dipanggil.

Analisis menunjukkan bahawa arg12 ialah parameter yang akan dimasukkan dalam antara muka Pada masa ini, kita tahu bahawa nilai v5 adalah bendera yang kita mahu.


Bagaimana untuk melakukan analisis statik dalam Android

Fungsi onCreate memanggil kaedah checkSN dan lulus dalam dua parameter:

MainActivity.this.edit_userName.trim()

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

//OnCreate ialah fungsi khas dalam Android, digunakan untuk "menunjukkan bahawa tetingkap sedang dijana" .

//Ia tidak menjana tetingkap, tetapi hanya menetapkan sifat tetingkap seperti gaya, warna kedudukan, dsb. sebelum tetingkap dipaparkan.

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_find_register = this.btn_findViewById ) ;

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

public void onClick(Lihat arg5) {

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

                   Toast.makeText(MainActivity.this, 0). ( ; 🎜> MainActivity.this. btn_register.setEnabled(false);

MainActivity.this.setTitle(0x7F060019);

}

}

}

});

}

Analisis nilai v5 dijana oleh v3 dan v4 ialah int dan ditugaskan terus kepada 0 untuk gelung >

dan v3 ialah kaedah toHexString Nilai pulangan perlu dihantar, v1 ialah v1.update(arg11.getBytes());

semakan boolean peribadiSN(String arg11, String arg12) {

   boolean v7 = false;

    if(arg11 != null) {

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

               kembalikan v7;

           }

🎜>

               kembali v7;

           }

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

         🎜>           }

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

           v1.reset();

           v1.update(arg11.   );

           StringBuilder v5 = new StringBuilder();

           int v4;

               v5.append(v3.charAt(v4));

           } return v7; (NosuchalgorithmException v2) {

GOTO label_40;

}

v7 = true;

}

label_40:

   v2.printStackTrace();

    return v7;

}

将上面的分析,结果结有代码

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

import java.>

import java.>

import java.>

import java.>

import java. security.NoSuchAlgorithmException;

Kod kelas awam {

   String statik toHexString(bait[] arg8, String arg9) {

       StringBuilder v3 = baru);

       bait[] v0 = arg8;

       int v5 = v0.length;

       int v4;

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

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

v. toString();

   }

   public static void main(String[] args)melempar 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));

       }

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

   }

}

用IDEA编辑运行,拿到bendera。

Atas ialah kandungan terperinci Bagaimana untuk melakukan analisis statik dalam Android. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam