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.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
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)
Tambah smali fail ke projek ApkIDE.
Kompil semula untuk menjana APK.
Selepas penyusunan berjaya, APK akan dijana dalam direktori APK asal.
Kemudian buka dengan JEB dan alatan lain untuk melihat fail Ezreal.smali.
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.
Gunakan alat JEB untuk menyusunnya ke dalam fail java Di bawah fail Android ialah fail sdk di bawah pakej com.
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.
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.
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!