Untuk aplikasi yang sama, saya punya:
- sebuah APK dari sebuah toko aplikasi,
- apa yang diklaim sebagai kode sumber untuk versi yang sama. Dengan skrip dan struktur bangun Gradle yang cukup biasa.
Saya ingin memeriksa apakah APK benar-benar dibuat dari kode sumber itu atau tidak.
Bagaimana cara memeriksanya?
Catatan:
- APK tidak dikaburkan.
- Saya tidak punya alasan untuk mempercayai tanda tangan siapa pun. Saya hanya mempercayai kode sumber.
- Saya sudah membuat aplikasi sendiri, tetapi sekarang saya ingin tahu apakah APKnya OK atau tidak.
- Lebih disukai dengan alat baris perintah Linux, tetapi alat apa pun tidak apa-apa.
.apk
file, lalu menjalankan diff terhadap direktori yang dihasilkan. Hanya perbedaan yang harus menjadi tanda tangan (yang tidak dapat cocok karena alasan yang jelas). Berpikir tentang itu: cukup membuka ritsleting.apk
file dan melakukan diff biner harus melakukan hal yang sama. Keduanya tentu saja harus menggunakan versi perpustakaan yang sama dll ketika mengkompilasi di tempat pertama :)diff
Metode ini kelihatannya rapi ... tapi bagaimana jika orang-orang di app store mengaburkan APK saat mengompilasinya?Jawaban:
Anda hanya dapat melakukan ini dengan bangunan yang dapat direproduksi:
Jadi pengembang aplikasi atau toko aplikasi harus ada di papan agar bisa berfungsi.
Kalau tidak, satu-satunya pilihan Anda adalah membangunnya sendiri.
Salah satu contoh pengembang yang saat ini melakukan ini adalah Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds
sumber
Satu hal hebat tentang java dan APK adalah Anda dapat sepenuhnya mendekompilasi APK ke kode sumber java.
Namun, kode sumber yang dihasilkan tidak dijamin sama.
Salah satu cara yang baik untuk mencoba dan mencocokkan kode sumber yang dihasilkan dengan revisi yang diketahui adalah untuk memeriksa modifikasi apa yang dilakukan secara langsung sebelum dan setelah komit yang diketahui dalam repositori, dan melihat apakah modifikasi tersebut juga ada di sumber yang dikompilasi.
Untuk mendekompilasi, gunakan dex2jar dan JD-Gui .
sunting Saya baru saja memperhatikan bahwa Anda menginginkan alat linux. Satu-satunya pengalaman saya adalah dengan windows, tapi saya yakin ada alat serupa untuk linux.
sumber