Bagaimana seseorang dapat menguraikan Android DEX (VM bytecode) menjadi file yang sesuai Java source?
Dapatkan alat-alat ini:
Kode sumber ini cukup dibaca sebagai dex2jar membuat beberapa optimasi.
Dan berikut's prosedur tentang cara untuk mendekompilasi:
Mengkonversi kelas.dex di test_apk-debug.apk untuk test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Catatan: Di mesin Windows semua
.sh
script digantikan oleh.bat
script
Membuka toples di JD-GUI
Untuk memperjelas agak, ada dua jalur utama yang mungkin anda ambil di sini tergantung pada apa yang ingin anda capai:
Menguraikan Dalvik bytecode (dex) menjadi dapat dibaca sumber Java. Anda dapat melakukan ini dengan mudah dengan dex2jar dan jd-gui, seperti fred menyebutkan. Yang dihasilkan adalah sumber yang berguna untuk membaca dan memahami fungsi dari suatu aplikasi, tapi kemungkinan tidak akan menghasilkan 100% dapat digunakan kode. Dengan kata lain, anda dapat membaca sumber, tetapi anda dapat't benar-benar mengubah dan repackage itu. Perhatikan bahwa jika sumber telah dikaburkan dengan proguard, sehingga kode sumber akan jauh lebih sulit untuk melepaskan.
Lain alternatif utama adalah untuk membongkar bytecode untuk smali, bahasa assembly dirancang untuk tujuan ini tepat. I've menemukan bahwa cara termudah untuk melakukan ini adalah dengan apktool. Setelah anda've punya apktool diinstal, anda hanya dapat menunjuk pada sebuah file apk, dan anda'll mendapatkan kembali file smali untuk masing-masing kelas yang terdapat dalam aplikasi. Anda dapat membaca dan memodifikasi smali atau bahkan menggantikan kelas seluruhnya dengan menghasilkan smali baru dari Java source (untuk melakukan hal ini, anda bisa mengkompilasi anda .sumber java untuk .file kelas dengan javac, kemudian mengkonversi anda .file kelas untuk .dex file dengan Android's dx compiler, dan kemudian menggunakan baksmali (smali disassembler) untuk mengkonversi .dex untuk .smali file, seperti yang dijelaskan dalam pertanyaan ini. Mungkin ada jalan pintas di sini). Setelah anda're selesai, anda dapat dengan mudah paket apk back up dengan apktool lagi. Perhatikan bahwa apktool tidak menandatangani dihasilkan apk, sehingga anda'akan perlu untuk mengurus itu seperti aplikasi Android lainnya.
Jika anda pergi smali rute, anda mungkin ingin mencoba APK Studio, sebuah IDE yang mengotomatisasi beberapa langkah di atas untuk membantu anda dengan decompiling dan recompiling apk dan menginstal pada perangkat.
Singkatnya, pilihan cukup banyak baik untuk mendekompilasi ke Jawa, yang lebih mudah dibaca tapi mungkin ireversibel, atau untuk membongkar untuk smali, yang sulit untuk dibaca tapi jauh lebih fleksibel untuk membuat perubahan dan repackage modifikasi aplikasi. Pendekatan yang anda pilih akan tergantung pada apa yang anda'kembali mencari untuk mencapai.
Terakhir, saran dari berani juga dicatat. It's sebuah retargeting alat untuk mengkonversi .dex dan .file apk ke jawa .file kelas, sehingga mereka dapat dianalisis menggunakan khas jawa statis alat analisis.
I'd benar-benar merekomendasikan pergi di sini: https://github.com/JesusFreke/smali
Ini memberikan BAKSMALI, yang adalah yang paling baik mundur-alat teknik untuk file DEX. It's dibuat oleh JesusFreke, orang yang menciptakan fameous Rom untuk Android.
versi Yang lebih lengkap dari fred's jawaban:
Pertama, anda perlu alat untuk ekstrak semua (disusun) kelas pada DEX ke JAR. Ada's salah satu yang disebut dex2jar, yang dibuat oleh seorang mahasiswa cina.
Kemudian, anda dapat menggunakan jd-gui untuk menguraikan kelas-kelas pada TABUNG ke kode sumber. Yang dihasilkan sumber harus cukup mudah dibaca, seperti dex2jar berlaku beberapa optimasi.
Anda dapat menggunakan APKTool. Itu akan automatically ekstrak semua kelas (.dex
), sumber daya (.asrc
), maka akan mengkonversi binary XML untuk human-dibaca XML, dan hal ini juga akan dissassemble kelas-kelas untuk anda.
Pembongkaran akan selalu lebih kuat dari decompiling, especially dengan
Guci dikaburkan dengan Pro Guard!
Katakan saja APKTool untuk decode APK ke sebuah direktori, maka modify apa yang anda inginkan, dan akhirnya encode kembali ke APK. Yang's semua.
Penting: APKTool dissassembles. Itu doesn't menguraikan. Kode yang dihasilkan tidak't menjadi sumber Java. Tapi anda harus bisa membaca itu, dan bahkan mengedit itu jika anda're akrab dengan jasmin. Jika anda ingin sumber Java, silahkan pergi ke petunjuk way.
Kadang-kadang anda mendapatkan kode yang rusak, ketika menggunakan dex2jar
/apktool
, terutama dalam loop. Untuk menghindari hal ini, gunakan jadx, yang membongkar susunan dalvik bytecode menjadi java source code, tanpa menciptakan .jar
/.kelas
file pertama sebagai dex2jar
tidak (apktool menggunakan dex2jar saya pikir). Hal ini juga open source dan aktif dalam pembangunan. Bahkan memiliki GUI, GUI fanatik. Cobalah!
Karena tidak ada yang disebutkan ini, ada's satu lagi alat: DED homepage
Install how-to dan beberapa penjelasan: Instalasi.
Itu digunakan dalam waktu yang cukup menarik studi keamanan pasar atas aplikasi(tidak benar-benar terkait, hanya jika anda're penasaran): Survei dari Android Aplikasi Keamanan
Setelah anda download file APK anda , Anda perlu melakukan langkah-langkah berikut untuk mendapatkan diedit kode java/dokumen.
Sejak Dheeraj Bhaskar
's jawaban yang relatif lama seperti beberapa tahun yang lalu.
Di sini saya terbaru (tahun 2019) jawaban:
dari dex
untuk java source
, saat ini memiliki dua jenis solusi:
Satu Langkah
: langsung mengkonversi dex
untuk java source
Dua Langkah: pertama mengkonversi
dexuntuk
jar, kedua mengkonversi
jaruntuk
java source`dex
langsung java source
bin
bisa melihat baris perintah jadx
atau versi GUI jadx-gui
, klik dua kali untuk menjalankan versi GUI: jadx-gui
dex
filekemudian dapat menampilkan kode sumber java:
File
-> simpan sebagai gradle proyek
kemudian mendapat java source:
dex
untuk jar
download dex2jar zip, unzip mendapat d2j-dex2jar.sh
, maka:
apk
untuk jar
: sh d2j-dex2jar.sh -f ~/path/ke/apk_to_decompile.apk
dex
untuk jar
: sh d2j-dex2jar.sh -f ~/path/ke/dex_to_decompile.dex
contoh:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
untuk java source
banyak
code akan menguraikan kesalahankecil
code akan menguraikan kesalahantidak ada
kode menguraikan kesalahanProcyon
berikut demo Procyon
convert jar untuk java source code:
download procyon-decompiler-0.5.34.jar
kemudian dengan menggunakan sintaks:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
contoh:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
menggunakan editor VSCode untuk membuka diekspor source code, terlihat seperti ini:
Konversi kebenaran : Jadx
> Procyon
> CRF
> JD-GUI
Merekomendasikan penggunaan: (salah Satu langkah solusi's) Jadx
untuk penjelasan lebih rinci, silakan lihat saya online Cina ebook: 安卓应用的安全和破解
Android Reverse Engineering adalah mungkin . Ikuti langkah-langkah berikut untuk mendapatkan .file java dari file apk.
Langkah 1 . Menggunakan dex2jar
dex2jar sampleApp.apk
Step2 . Decompiling .jar menggunakan JD-GUI
Baru-baru Debian memiliki paket Python androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
Menginstal paket yang sesuai:
sudo apt-get install androguard python-networkx
Menguraikan DEX file:
$ androdd -i classes.dex -o ./dir-for-output
Ekstrak kelas.dex
dari Apk + Menguraikan:
$ androdd -i app.apk -o ./dir-for-output
File Apk adalah apa-apa lagi yang Java archive (JAR), anda dapat mengekstrak file dari arsip melalui:
$ unzip app.apk -d ./dir-for-output
Banyak yang telah berubah karena sebagian besar dari jawaban-jawaban ini telah diposting. Sekarang-a-hari ada banyak alat-alat yang mudah dengan GUI's, seperti ini:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Tempat terbaik untuk menemukan mereka adalah di forum XDA Developers.
Anda mungkin mencoba JADX (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), ini adalah alat yang sempurna untuk DEX dekompilasi.
Dan ya, hal ini juga tersedia secara online pada (saya :0)) situs baru: http://www.javadecompilers.com/apk/
Hal ini dapat dilakukan dengan mengikuti lima langkah:
Permata ini melakukan hal ini untuk anda secara otomatis bahkan pemasangan alat-alat yang diperlukan
Cara termudah untuk menguraikan sebuah aplikasi android adalah untuk men-download sebuah aplikasi bernama ShowJava dari playstore . Hanya pilih aplikasi yang perlu decompiled dari daftar aplikasi. Ada tiga yang berbeda decompiler dapat anda gunakan untuk menguraikan sebuah aplikasi yaitu -
CFR 0.110, JaDX 0.6.1 atau FernFlower (analytical decompiler) .
Jika anda're tidak mencari untuk men-download dex2jar, kemudian gunakan apk_grabber
script python untuk menguraikan setiap apk ke jar file. Kemudian anda membacanya dengan jd-gui.