Telefonu Casus Uygulaması
Çağrıları, SMS, GPS, Kamera, Fotoğraflar, Videolar, Whatsapp, Facebook izleyin.
Aslında java iç sınıfları ve numaralandırmalar gibi java dillerinin uygulama prensiplerini analiz etmenin yanı sıra bazı spesifik senaryolarda da kullanışlıdır.Artık genelde smali modifiye edilerek yapılıyor ama bytecode bazında da yapılabilir.., Bu makale önceki Java bayt kodu analizine dayanmaktadır, bu nedenle yalnızca bayt kodu yöntemi tartışılmaktadır.
Birçok bağımsız oyun ve hatta bazı çevrimiçi oyunlar, mantıksal işlemleri yerel olarak çalıştırır.Sunucu yalnızca istemci tarafından yüklenen işlem sonuçlarını alır.Ayrıca bazı şarj uygulamaları da vardır,aslında işlevlerin tümü yerel koddadır,yalnızca Ancak ödeme olup olmadığına karar vermek içindir ve ödeme varsa fonksiyon girişi görüntülenecektir.
Kodunu değiştirebilir ve yükleme sonucunu veya istediğimize ödeme yapıp yapmama kararını değiştirebilirsek, istediğimizi yapabiliriz.
kaynak koda dönüştürme
Uygulamanın kod mantığını değiştirmek için öncelikle orijinal kod mantığının ne olduğunu analiz etmeliyiz.Ancak uygulamanın kodu her şirketin özel mülkü olduğundan, kod sızdırılmadığı sürece genellikle alamıyoruz. bu sefer sadece ayrıştırma tekniklerini kullanabiliriz.
Telefonu Casus Uygulaması
Çağrıları, SMS, GPS, Kamera, Fotoğraflar, Videolar, Whatsapp, Facebook izleyin.
Apk'nın ayrıştırma teknolojisini aramak için İnternet'e giderseniz, muhtemelen aşağıdaki yöntemleri bulacaksınız:
- Apk'yi çıkarmak için apktool aracını kullanın
- Android için optimize edilmiş dex dosyalarını Java sınıflarına dönüştürmek için dex2jar aracını kullanın
- Java kodunu sınıfta görüntülemek için jd-gui aracını kullanın
Böyle hantal bir işlem aslında modası geçmiş durumda.Herkes için tek tıkla aptal işlem aracını tanıtacağım.
jadx açık kaynak kodlu bir Android decompilation aracıdır, kodu github'da barındırılır, indirip kullanabilirsiniz.Kullanımı çok basittir, indirdikten sonra, açın ve ardından jadx-gui'yi (linux/mac) çalıştırmak için bin dizinine girin ) veya jadx-gui.bat (windows), görsel bir arayüz başlatabilir, ardından "Dosya - Aç" a tıklayabilir ve derlemek istediğimiz uygulamayı seçebilir, kodu apk'de görebilirsiniz
Burada bir demo uygulaması ayrıştırılır ve MainActivity.onCreate bir bayrak değişkeni değerlendirir ve ardından açılır Toast.Bu apk'yı kurup çalıştırdığımızda, "merhaba dünya!" mesajının açıldığını görebiliriz.
Diğer uygulamalar da benzerdir, kodlarını bu şekilde görüntüleyebilirsiniz.Ancak resmi olarak yayınlanmış uygulamalar genellikle şaşırtma işlemleri yapmaktadır.Şu anda decompile edip işlediğimiz kodun sınıf adı,yöntem adı ve değişken adı a,b olacaktır., c anlamsız bir karakterdir.
Ama sadece isim değişti, yürütme mantığı tamamen aynı yani yeterince dikkatli olduğunuz sürece kod mantığını yine de anlayabilirsiniz.
Jadx, gradle projesini dışa aktarabilen, gradle projesini dışa aktarmak için "Dosya/Gradle Projesi Olarak Kaydet" seçeneğine tıklayabilen ve ardından dizin yapısını değiştirebilen güçlü bir işleve sahiptir, projeyi açmak ve kodu düzenlemek ve değiştirmek için Android stüdyosunu kullanabilirsiniz.
Modifikasyondan sonra derleme başarılı olursa amacımıza ulaşmış ve istediğimizi yapabiliriz ancak bu projenin başarılı bir şekilde derlenememe olasılığı yüksek ve birçok garip hata var.
Şimdi sizi bu apk'yı adım adım deşifre etmeye, mantığını değiştirmeye, "merhaba dünya!" çalmaya değil, "merhaba java" oynamaya götüreceğim.
Uygulamanın bayt kodunu değiştirin
Kod mantığını kolayca analiz etmek için jadx kullanabiliriz, ancak yeniden derleme başarısız olursa, başka bir yola gitmemiz gerekir.
Bytecode'u direkt editlemenin yolu şudur.Bu şekilde giderseniz hiçbir aptalca işlem yapılmaz.Dürüstçe adım adım gidelim.
1. apk dosyasını açın
- apk aslında sıkıştırılmış bir zip paketidir, son ekini.zip olarak değiştirebilir ve ardından doğrudan sıkıştırabiliriz
- Sıkıştırılmış şeyleri app-release-signed dizine koyduk:
2. Dex'i kavanoza dönüştürün
- Android sanal makinesinin sıradan bir java sanal makinesi olmadığını, doğrudan java sınıfı dosyalarını çalıştıramayacağını ve dex dosyalarına optimize edilmesi gerektiğini hepimiz biliyoruz.
- Bytecode'u değiştirdiğimizde onu geri dönüştürmemiz gerekiyor.Burada dex-tools aracının dex2jar işlevini kullanıyoruz:
- Burada Windows'ta değil, sadece Linux altında komutların kullanımını tanıtıyorum.Aslında.bat kullanan benzer bir versiyondur, kendiniz arayabilirsiniz.
- class.dex'i jar dosyasına dönüştürün:
- ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh class.dex
- class-dex2jar.jar dosyasını oluşturacaktır:
3. Sınıf bayt kodunu değiştirin
- Aslında, jar dosyası aynı zamanda sıkıştırılmış bir zip paketidir, yine de soneki doğrudan zip olarak değiştirebilir ve ardından MainActivity.class'ı bulmak için sıkıştırabiliriz.
- Şu anda, içindeki kodu görüntülemek için önceki makalede bahsedilen javap komutunu kullanabiliriz:
- javap -c MainActivity
- Ve çalıştırmaya devam edersek merhaba dünya! çıktısını alacağını ve 32 satıra atlarsak merhaba java çıktısını alacağını görebiliriz.
- Burada if_icmpne'yi doğrudan if_icmpeq olarak değiştirebiliriz, eşit olduğunda satır 32'ye atlayabilir, aksi takdirde çalıştırmaya devam edebiliriz, böylece orijinal "merhaba dünya!" istemi "merhaba Java!" olur.
- Class dosyasını direkt olarak bir editör ile açarsanız içinde bazı ikili değerler vardır.
- Peki nasıl modifiye ederiz?
- Burada başka bir araç jbe kullanacağız, tam adı Java bayt kodu düzenleyicisidir.
- İndirdikten sonra, sıkıştırmasını açın, bin dizinine girin ve grafik arayüzü açmak için aşağıdaki komutu kullanın:
- java ee.ioc.cs.jbe.browser.BrowserApplication
- Grafik arayüzde MainActivity.class'ı açın ve MainActivity.onCreate kodumuzu bulun
- Ardından bayt kodunu değiştirmek için Kod Düzenleyici seçeneğine tıklayın, burada if_icmpne'yi if_icmpeq olarak değiştiriyoruz ve ardından Yöntemi kaydet'e tıklayın:
- Bu, mantık değişikliğimizi tamamlar
4. Dex'i yeniden paketleyin
- Sonra apk'yı yeniden paketleyeceğiz, önce sınıfı bir zip'e sıkıştıracağız, dizin yapısına dikkat edin:
- Ardından son eki jar olarak değiştirin ve dex oluşturmak için jar2dex kullanın:
- ~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh sınıfları-dex2jar.jar
- Ardından orijinal class.dex dosyasını oluşturulan dex ile değiştirin ve daha sonra class-dex2jar.zip ve class-dex2jar dizinleri gibi yeni oluşturulan tüm geçici dosyaları silin.
5. İmza bilgilerini silin
- Genelde aldığımız uygulamalar imzalı uygulamalardır.Uygulama imzalandıktan sonra kaynakların ve kodların doğrulama bilgileri apk içerisine kaydedilir.dex dosyasını değiştirirsek doğrulama başarısız olur bu yüzden apk kurulamaz..
- Bu yüzden orijinal imzayı silmemiz gerekiyor.Özel yöntem, META-INF dizinindeki üç dosyayı silmektir:
- CERT.RSA
- CERT.SF
- MANIFEST.MF
6. Apk'yi yeniden paketleyin
- Daha sonra, aynı sıkıştırılmış dosya sıkıştırılmış bir zip paketi oluşturur, dizin yapısına dikkat edin:
- Son olarak, zip son ekini apk olarak değiştirin ve apk'mız paketlenir
- Repackage apk'mız imza bilgilerini sildiği için direk kurulursa başarısız olur ve yeniden imzalamamız gerekir.
- Android.keystore olarak takma ad oluşturmak için aşağıdaki komutu kullanabilirsiniz ve dosya adı da android.keystore'un imza dosyasıdır.
- keytool -genkeypair -alias android.keystore -keyalg RSA -validity 400 -keystore android.keystore
- Enter tuşuna bastıktan sonra, bazı şifreleri, geliştirici bilgilerini vb. girmenize izin verecek ve tamamlandıktan sonra bir android.keystore dosyası alacaksınız.
- Ardından, uygulamayı yeniden imzalamak için elde edilen android.keystore'u kullanırız:
- jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore
- İmzalı release.apk'yi alın, yükleyelim ve çalıştıralım ki tost "merhaba java!" olmuş.