Bir Android DEX (VM bayt kodu) dosyalarını karşılık gelen Java kaynak koduna nasıl koyabiliriz?
Bir Android DEX (VM bayt kodu) dosyalarını karşılık gelen Java kaynak koduna nasıl koyabiliriz?
Yanıtlar:
Şu araçları edinin:
1) dex2jar , jar dosyalarını jar dosyalarına çevirmek için
2) Kavanozdaki java dosyalarını görüntülemek için jd-gui
Dex2jar bazı optimizasyonlar yaptığı için kaynak kodu oldukça okunabilir.
Ve işte nasıl koda dönüştürüleceğine dair prosedür:
Test_apk-debug.apk içindeki classes.dex öğesini test_apk-debug_dex2jar.jar dosyasına dönüştürün
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Not 1: Windows makinelerinde tüm
.sh
komut dosyalarının yerine.bat
komut dosyalarıNot 2: Linux / mac üzerinde
sh
veya unutmayınbash
. Tam komut şöyle olmalıdır:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Not 3: Ayrıca,
dex2jar-X.X
dizine yürütme izni eklemeyi unutmayın.sudo chmod -R +x dex2jar-2.0
Kavanozu JD-GUI'de açın
Bir şekilde açıklığa kavuşturmak için, neyi başarmak istediğinize bağlı olarak burada alabileceğiniz iki ana yol vardır:
Dalvik bayt kodunu (dex) okunabilir Java kaynağına dönüştürün. Bunu dex2jar ve jd-gui ile fred bahseder gibi kolayca yapabilirsiniz . Ortaya çıkan kaynak, bir uygulamanın işlevselliğini okumak ve anlamak için yararlıdır, ancak muhtemelen% 100 kullanılabilir kod üretmez. Başka bir deyişle, kaynağı okuyabilirsiniz, ancak gerçekten değiştirip yeniden paketleyemezsiniz. Kaynak koruma ile kapatılmışsa, ortaya çıkan kaynak kodunun çözülmesinin önemli ölçüde daha zor olacağını unutmayın.
Diğer önemli alternatif, tam olarak bu amaç için tasarlanmış bir montaj dili olan smali'ye bayt kodunu sökmektir . Bunu yapmanın en kolay yolunun apktool ile olduğunu gördüm . Bir kez apktool yükledikten sonra, bir apk dosyasına işaret edebilir ve uygulamada bulunan her sınıf için bir smali dosyası geri alırsınız. Yeni Java kaynağından smali oluşturarak smali'yi okuyabilir ve değiştirebilir veya sınıfları tamamen değiştirebilirsiniz (bunu yapmak için .java kaynağınızı javac ile .class dosyalarına derleyebilir, sonra .class dosyalarınızı Android ile .dex dosyalarına dönüştürebilirsiniz. dx derleyicisini seçin ve sonra bu soruda açıklandığı gibi .sx dosyasını .smali dosyalarına dönüştürmek için baksmali (smali disassembler) kullanın. Burada bir kısayol olabilir). İşiniz bittiğinde, apk yedeklemesini tekrar apktool ile kolayca paketleyebilirsiniz. Apktool'un ortaya çıkan apk'yi imzalamadığını unutmayın, bu yüzden diğer Android uygulamalarında olduğu gibi bununla ilgilenmeniz gerekir .
Smali yoluna giderseniz, bir apk'yi çözme ve yeniden derleme ve bir cihaza yükleme konusunda size yardımcı olmak için yukarıdaki adımlardan bazılarını otomatikleştiren bir IDE olan APK Studio'yu denemek isteyebilirsiniz .
Kısacası, seçimleriniz ya daha okunaklı ancak muhtemelen geri döndürülemez olan Java'ya dönüştürmek ya da okunması daha zor, ancak değişiklik yapmak ve değiştirilmiş bir uygulamayı yeniden paketlemek için daha esnek olan smali'ye sökmek için oldukça fazladır. Hangi yaklaşımı seçtiğiniz, neyi başarmak istediğinize bağlı olacaktır.
Son olarak, cesaretin önerisi de dikkate değerdir. Bu, .dex ve .apk dosyalarını java .class dosyalarına dönüştürmek için yeniden hedefleme aracıdır, böylece tipik java statik analiz araçları kullanılarak analiz edilebilirler.
Aslında buraya gitmenizi tavsiye ederim: https://github.com/JesusFreke/smali
DEX dosyaları için en mükemmel tersine mühendislik aracı olan BAKSMALI sağlar. Android için ünlü ROM'ları oluşturan JesusFreke tarafından yapıldı.
./apktool d myprogram.apk
. Cevabımı gör .
Daha tam bir versiyonu fred bireyin cevabı :
İlk olarak, DEX üzerindeki tüm (derlenmiş) sınıfları bir JAR'a çıkarmak için bir araca ihtiyacınız vardır . Çinli bir öğrenci tarafından yapılan dex2jar
adlı bir tane var .
Ardından, kullanabilirsiniz jd-GUI için koda kaynak koduna JAR sınıfları.
Dex2jar bazı optimizasyonlar uyguladığından, sonuçta elde edilen kaynak oldukça okunabilir olmalıdır.
APKTool'u kullanabilirsiniz . Bu olacak otomatik tüm sınıfları (özü .dex
) kaynak ( .asrc
), ardından dönüştürür ikili XML için insan tarafından okunabilir XML ve aynı zamanda edecektir dissassemble sizin için sınıflar.
Sökme her zaman, özellikle
Pro Guard ile gizlenmiş JAR'larda , ayrışmadan daha sağlam olacaktır !
APKTool'a APK'yı bir dizine çözmesini söyleyin , sonra istediğinizi değiştirin
ve son olarak tekrar bir APK'ya kodlayın . Bu kadar.
Önemli: APKTool dissassembles . O değil decompile .
Oluşturulan kod Java kaynağı olmayacak.
Eğer aşina iseniz Ama bunu okumak mümkün ve hatta düzenleme o olmalıdır jasmin .
Java kaynağı istiyorsanız, lütfen Manuel yolun üzerinden geçin .
Bazen dex2jar
/ apktool
, özellikle de döngülerde bozuk kod alırsınız . Bundan kaçınmak için, dalvik bayt kodunu java kaynak koduna dönüştüren jadx kullanın , ilk önce olduğu gibi bir .jar
/ .class
dosya oluşturmadan dex2jar
(apktool sanırım dex2jar kullanır). Aynı zamanda açık kaynaklıdır ve aktif olarak geliştirilmektedir. GUI fanatikleri için bir GUI bile var. Dene!
javac "$(find . -name '*.java')"
mi demek istiyorsun ?
Kullandım
Ancak hiçbiri Google'ın kendi araçlarını yenemez
Kimse bundan bahsetmediği için bir araç daha var: DED ana sayfası
Nasıl yapılır ve bazı açıklamalar: Kurulum .
En iyi piyasa uygulamalarının güvenliği ile ilgili oldukça ilginç bir çalışmada kullanıldı (gerçekten merak ettiyseniz, ilgili değil): Android Uygulama Güvenliği Anketi
Çünkü Dheeraj Bhaskar
cevabı yıllarca göreceli olarak eskidir.
İşte en son (2019 yılı) cevabım:
dan dex
üzere java sourcecode
, şu anda çözümün iki tür vardır:
One Step
: Doğrudan dönüştürmek dex
içinjava sourcecode
Two Step
Birinci dönüştürmek dex
için jar
, ikinci dönüştürmek jar
içinjava sourcecode
dex
doğrudanjava sourcecode
bin
klasörde komut satırı jadx
veya GUI sürümünü görebilirsiniz jadx-gui
, GUI sürümünü çalıştırmak için çift tıklayın:jadx-gui
dex
dosyajava kaynak kodunu gösterebilir:
File
-> save as gradle project
sonra java kaynak kodu var:
dex
-jar
indir dex2jar zip , unzip var d2j-dex2jar.sh
, sonra:
apk
kime jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
kime jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
misal:
➜ 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
-java sourcecode
many
kod hata çözülecekminor
kod hatası çözülecekno
kod çözme hatası
Procyon
Burada demo Procyon
jar java kaynak kodu dönüştürün:
indir procyon-decompiler-0.5.34.jar
daha sonra sözdizimi kullanarak:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
misal:
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
dışa aktarılan kaynak kodunu açmak için editör VSCode kullanarak aşağıdaki gibi görünün:
Dönüşüm doğruluğu: Jadx
> Procyon
> CRF
>JD-GUI
Kullanımı tavsiye :( bir adım çözüm) Jadx
daha ayrıntılı açıklama için, lütfen çevrimiçi Çince e- kitabımı inceleyin : 安卓 应用 的 安全 和 破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
sadece istisna var:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
iyi mi değil mi?
>d2j-dex2jar.bat file.dex
ama sorun değil. belki .dex
dosyam kopyalandığı için dalvik-cache
mi?
dex is copied from dalvik-cache
, olmalıdırdex is decompiled from apk
APK dosyanızı indirdikten sonra, düzenlenebilir bir java kodu / belgesi almak için aşağıdaki adımları uygulamanız gerekir.
Dedexer ile dosyayı dalvik.dex
bayt koduna ( .ddx
) ayırabilirsiniz .
Java'ya ayrışmak bildiğim kadarıyla mümkün değil.
Dalvik bayt kodunu buradan okuyabilirsiniz .
Android Tersine Mühendislik mümkündür . .Java dosyasını apk dosyasından almak için aşağıdaki adımları izleyin.
Aşama 1 . Dex2jar kullanma
dex2jar sampleApp.apk
Adım 2 . JD-GUI kullanarak .jar dosyasını ayrıştırma
Son Debian'ın Python paketi var 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
İlgili paketleri kurun:
sudo apt-get install androguard python-networkx
Decompile DEX dosyası:
$ androdd -i classes.dex -o ./dir-for-output
Özü classes.dex
Apk + koda dan:
$ androdd -i app.apk -o ./dir-for-output
Apk dosyası Java arşivinden (JAR) başka bir şey değildir, dosyaları arşivden şu yolla çıkarabilirsiniz:
$ unzip app.apk -d ./dir-for-output
Bu yanıtların çoğu yayınlandığından beri çok şey değişti. Günümüzde GUI'lerle birçok kolay araç var, bunlar gibi:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Onları bulmak için en iyi yer XDA Developers forumunda.
JADX'i deneyebilirsiniz ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), bu DEX ayrıştırması için mükemmel bir araçtır.
Ve evet, çevrimiçi olarak da (benim: 0) yeni sitede bulunabilir: http://www.javadecompilers.com/apk/
Bu, aşağıdaki beş adımda yapılabilir:
Bu taş, gerekli araçların kurulumunu bile sizin için otomatik olarak yapar.
Bir android uygulamasını kaynak koda dönüştürmenin en kolay yolu , Play Store'dan ShowJava adlı bir uygulamayı indirmektir. Sadece uygulamalar listesinden çözülmesi gereken uygulamayı seçin. Bir uygulamanın kodunu çözmek için kullanabileceğiniz üç farklı kod çözücü vardır.
CFR 0.110, JaDX 0.6.1 veya FernFlower (analitik dekomiler).
Dex2jar'ı indirmek istemiyorsanız, herhangi bir apk'yi jar dosyalarına dönüştürmek için sadece apk_grabber
python komut dosyasını kullanın. Sonra onları jd-gui ile okudunuz.