Perisian pembantu analisis yang sangat berkuasa.
1. Pemahaman mendalam tentang proses pengoptimuman Android
2. Pemerhatian rapat kod sumber Android
2 🎜>
2. Proses penghuraian fail dex
3 proses memuatkan
0x01 Tutorial ringkas tentang alat yang berguna (Insight)
Buat projek baharu
Single OK
Pilih yang pertama
Pilih Tambah Pokok, yang bermaksud tambahkan kesemuanya.
Selepas pemuatan selesai
Kami akan menggunakan perisian ini untuk analisis.
1.extractAndProcessZip
Kemudian mari kita analisa langkah demi langkah.
Berikut ialah takrif pembolehubah perantaraan extractAndProcessZip. Ia bukan fokus kajian kami.
DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;
Berfikir
Jika kami membuat perubahan di sini, bolehkah kami melangkau pengesahan ini.
Mari kita lihat nilai lain.
Anda boleh menentukan nilai ini sendiri jika anda mempunyai idea.
DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;
Mari kita teruskan melihat ke bawah.
Terdapat fungsi yang dipanggil dexOptCreateEmptyHeader yang, seperti namanya, mencipta pengepala kosong untuk pengoptimuman dex..
dexOffset, rekod kedudukan fail supaya kita boleh kembali ke sini kemudian, yang sebenarnya adalah kedudukan permulaan membaca fail dex.
Buka arkib zip, cari entri DEX.Jelas sekali, apa yang bahagian ini lakukan ialah mencari fail dex daripada apk.
Kemudian analisis.
Fungsi untuk mengekstrak beberapa offset dex.
Ekstrak data DEX ke dalam fail cache pada offset semasa.
Perkara seterusnya untuk dibincangkan ialah proses dex odexization.
Di sinilah pengesahan dioptimumkan.
Melalui sini anda boleh mengubah suai proses pengoptimuman dan juga mengalih keluar pengesahan pengoptimuman.
Fikirkan
Dari mana datangnya data dan dari mana hendak membandingkannya. ·
Data ini dibandingkan dalam build.prop.
Mari kita ikuti fungsi dvmContinueOptimization.
PS:
Kami akan bersentuhan dengan perkara yang sangat penting berkaitan dengan penembakan
Buka fungsi dvmContinueOptimization
Pertama ialah penghakiman.
Kemudian terdapat tulisan pada fail dex.
Baca terus (perkara penting akan datang)
dvmDexFileOpenPartial, jika anda pernah melihat tutorial pembongkaran orang lain sebelum ini, anda mesti Ini adalah titik akhir yang kerap digunakan yang saya hanya tahu untuk memuat turunnya sebelum ini, tetapi sekarang saya tahu bahawa fungsi ini wujud dalam kod sumber.
Mari kita lihat panggilan fungsi dvmDexFileOpenPartial
Ia dipanggil dua kali di sini, dan sekali ialah definisinya sendiri.
Mula-mula mari kita lihat prototaip dvmDexFileOpenPartial
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)
Parameter base load fail dalam alamat memori (iaitu, DEX.035)
Parameter 2: Panjang fail fail DEX yang dimuatkan,
Parameter 3: Parameter output, fail DEX ditukar kepada struktur DvmDex, yang mengandungi kelas, medan dan kaedah fail Dex. Objek fail Dex yang dikendalikan Dalivk ialah struktur struktur
Akhirnya, maklumat pengepala ditulis di sini.
dvmRawDexFileOpen() Fungsi ini ialah fungsi utama yang perlu kita fahami, ia ada dalam RawDexFile .fungsi cpp.
Tentukan dahulu pembolehubah asas.
Kita semua tahu bahawa perkara yang sangat penting dalam format fail ialah nombor ajaib, jadi berikut ialah langkah pertama untuk menentukan nombor ajaib, sahkanMagicAndGetAdler32. Keajaiban di sini ialah nombor ajaib.
Berikut ialah pengesahan masa dan saiz fail.
Fungsi ini adalah fungsi utama, dan ia juga merupakan fungsi yang perlu kita fokuskan untuk menganalisis Fungsi utamanya ialah menjana odex fail sepadan dengan dex, juga Ia adalah apa yang dipanggil odexization. Mari ikuti fungsi untuk melihat.
Berikut ialah sebahagian daripada fungsi dexOptGenerateCacheFileName(). Perkara utama kami ialah melihat di mana ia dikeluarkan.
Di sini anda boleh melihat bahawa ia dijana dalam direktori data, ALOGV("Fail cache untuk '%s' '%s' ialah '%s' " , FileName, subFileName, nameBuf);
Format seperti ini.
Maksudnya, fail odex kami telah dijana di sini.
Perkara seterusnya yang perlu dilakukan ialah fungsi ini dvmDexFileOpenFromFd(), mengoptimumkan lagi, melengkapkan pemetaan dan menetapkannya sebagai fail yang boleh dibaca. Buka fungsi ini. Lokasinya dalam DvmDex.cpp.
Mari kita lihat dahulu di mana fungsi ini dipanggil.
Tempat di mana fungsi ini dipanggil ialah fungsi utama kami dvmRawDexFileOpen Fungsi ini mula-mula memanggil dexOptGenerateCacheFileName untuk menjana odex, dan kemudian memanggil dvmDexFileOpenFromFd untuk pengoptimuman lain.
Langkah terakhir dalam pengoptimuman ialah dexFileParse(), iaitu menghuraikan DEX. Lokasi ini diringkaskan secara ringkas dalam DexFile
fungsi kawalan utama dvmRawDexFileOpen() - dexOptGenerateCacheFileName() menjana odex yang sepadan - dvmDexFileOpenFromFd() mengoptimumkan lagi - dexFileParse() menghuraikan dex.
Apabila dexfileopenpartial berada di bahagian seterusnya, anda mungkin mendapati bahawa tiada cara untuk memecahkannya, maka kita boleh memilih dexOptGenerateCacheFileNamePKcS0, dvmdexfileopenfromfd dan fungsi lain untuk meneruskan ke seterusnya bahagian.
Secara umumnya, dexfileopenpartial adalah lebih baik dalam mengendalikan sesuatu dengan cengkerang.
Kod sumber lain dipandu oleh fungsi kawalan utama untuk membimbing fungsi utama lain untuk beroperasi Proses pemuatan kelas dex juga seperti ini.
Fungsi kawalan utamanya ialah Dalvik_dalvik_system_DexFile_defineClassNative()
Terdapat juga fungsi yang memerlukan perhatian Dalvik_dalvik_system_Dex🎜>
Mari lihat fungsi kawalan utama kami.
Terdapat panggilan sedemikian dalam fungsi kawalan utama.
Panggilan ini adalah untuk mengesahkan kuki, tetapi kuki ini berkemungkinan kuki dex yang dinyahsulit, jadi anda juga boleh membuang kuki ini di sini.
Kemudian lihat ke bawah.
fungsi dvmDefineClass, fungsi ini ialah fungsi untuk mengesahkan pemuatan kelas.
Fungsi membuat pertimbangan sendiri, tetapi yang dikembalikan memang kepala besar. Mari kita ikuti fungsi ini untuk melihat.
Perkara yang paling penting di sini ialah clazz, iaitu kelas yang dimuatkan secara dinamik.
Nilainya dikembalikan oleh fungsi loadClassFromDex, jadi kami akan melihat lebih lanjut.
Lihat struktur sedemikian di sini.
Mari kita lihat butiran struktur ini.
Sama ada struktur ini betul-betul sama dengan struktur dex, ia menunjukkan bahawa inilah yang kita perlukan.
Atas ialah kandungan terperinci Cara membuat projek baharu dalam Android. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!