Verilen kaynak koddan bir APK oluşturulduğunu doğrulayın


10

Aynı uygulama için, ben var:

  • bir uygulama mağazasından bir APK ,
  • aynı sürümün kaynak kodu olduğu iddia edilir . Oldukça olağan Gradle yapı komut dosyası ve yapısı ile.

APK'nın bu kaynak koddan gerçekten yapılmış olup olmadığını kontrol etmek istiyorum .
Bunu nasıl kontrol edebilirim?

Notlar:

  • APK gizlenmez.
  • Kimsenin imzasına güvenmek için hiçbir nedenim yok. Sadece kaynak koduna güveniyorum.
  • Uygulamayı kendim için zaten oluşturdum, ancak şimdi APK'nın iyi olup olmadığını bilmek istiyorum.
  • Tercihen Linux komut satırı araçlarıyla, ancak herhangi bir araç TAMAM.

2
Bunu denemedim, ancak Apktool'u bu amaç için kullanabilmelisiniz : Her iki .apkdosyayı tersine mühendislik yapın , sonra ortaya çıkan dizinlere karşı bir fark çalıştırın. O zaman tek fark imza olmalıdır (ki bu belli nedenlerle eşleşemez). Bunu düşünmek: .apkdosyaları açmak ve ikili bir fark yapmak aynı şeyi yapmalıdır. Her ikisi de elbette ilk etapta derlerken aynı kütüphane versiyonlarını vb. Kullanmayı gerektirir :)
Izzy

@Izzy: " aynı kütüphane sürümleri ": API sürümü Gradle komut dosyasındaki manifest ve kütüphaneler sürümünde yazılmıştır, bu yüzden bölümün tamam olması gerektiğini düşünüyorum Göz ardı edilebilecek dosya / klasörlerin listesi, bu sorunun harika bir yanıt vermesini sağlar (gerçek komut satırları için bonus).
Nicolas Raoul

1
Evde bilgisayarımda olsaydım, şu anda değilim. Ama bunun "onurlu bir cevap" olması için önce kendimi denemem gerekir :) Unutmam (ve benden önce başka kimsenin yapmadığı) durumda, bana başka bir ping (örneğin sohbette) göndermekten çekinmeyin 8.10 :)
Izzy

@Izzy diffYöntem düzgün görünüyor ... ama uygulama mağazasının adamları APK'yi derlerken gizlediyse ne olacak?
Grimoire

IMHO burada Apktool devreye giriyor. Bağlantıyı kontrol ettin mi? Ayrıca bunu kullanan LibRadar'a bir göz atın . AFAIR, gizliliğin giderilmesine yardımcı olur (bir şey olmalı veya LibRadar bu kütüphaneleri tespit etmekte zorlanacaktır).
Izzy

Yanıtlar:


2

Bunu yalnızca tekrarlanabilir derlemelerle yapabilirsiniz:

"Bir derleme aynı kaynak kodu, derleme ortamı ve derleme yönergeleri verildiğinde yeniden oluşturulabilir, herhangi bir taraf belirtilen tüm eserlerin bit-bit özdeş kopyalarını yeniden oluşturabilir."

Bu yüzden, uygulama geliştiricisinin veya uygulama mağazasının çalışması için gemide olması gerekir.
Aksi takdirde tek seçeneğiniz kendiniz oluşturmaktır.

Şu anda bunu yapan bir geliştiriciye örnek olarak Open Whisper Systems verilebilir: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds


Çok ilginç! Yani, geliştirici gemide olmadan karşılaştırma yapılamayacağından emin misiniz? Ne yazık ki (ama anlaşılır bir şekilde) çoğu açık kaynaklı uygulama Docker veya benzerlerini derlemeler için kullanmaz, sadece bakımcının çalıştığı her sistem üzerine inşa edilir.
Nicolas Raoul

Uygulamayı kaynaktan kim oluşturursa geliştirici olmak zorunda değildir, derleme ortamlarını tam olarak yeniden oluşturmayı mümkün kılar. Bağımlılıklar, bu tür yapıları kurarken büyük bir acı olabilir.
andDevW

"yapı ortamını tam olarak yeniden oluşturun": Tahmin etmek mümkün mü? Örneğin, Mac veya Linux üzerinde bir nedenden dolayı farklı bir APK oluşturuyorsa, uygulama mağazasının APK'sının Mac veya Linux üzerinde oluşturulmuş olup olmadığını tahmin edebilir miyim?
Nicolas Raoul

Anlamlı sonuçlar tahmin etmek ve elde etmek mümkün değildir. Sonunda bunu uygulamak daha kolay olacak ve bunu giderek daha fazla açık kaynak projeleri göreceksiniz.
andDevW

1

Java ve APK'larla ilgili harika bir şey, APK'yı java kaynak koduna tamamen ayırabilmenizdir.

Ancak, sonuçta elde edilen kaynak kodunun aynı olduğu garanti edilmez.

Elde edilen kaynak kodunu bilinen bir revizyonla denemenin ve eşleştirmenin iyi bir yolu, depodaki bilinen işlemden önce ve sonra doğrudan hangi değişikliklerin yapıldığını kontrol etmek ve bu değişikliklerin de ayrıştırılmış kaynakta olup olmadığını görmek.

Kaynak koda dönüştürmek için dex2jar ve JD-Gui kullanın .

Diğer anlamları: düzenlemek I just noticed you wanted linux tools. Benim tek deneyimim windows ile, ama eminim linux için benzer araçlar var.


Doğru anlarsam, yönteminiz kaynak kodun deposundaki en son değişikliğin ne olduğunu kontrol etmek, ardından APK'yı decompile etmek ve en son değişikliğin de decompiled kodda da bulunup bulunmadığını manuel olarak kontrol etmek değil mi? İlginç bir yaklaşım, ancak bu bana bir çağrı evi veya gömülü reklamın APK sürümüne eklenip eklenmediğini söylemeyecek, değil mi?
Nicolas Raoul

1
Bu, bilinmeyen bir APK'yı kaynak revizyonuyla eşleştirmek için ofiste kullandığım bir yaklaşımdır ve geliştiricilere güvenebileceğinizi biliyorsanız yeterince iyi olmuştur. Ama dediğin gibi, muhtemelen güvenilmez bir partinin bir şeylere gizlice girmesi mümkündür. Birisinin daha kesin bir cevap vermesini umuyorum, benim için de yararlı olacağını umuyorum.
Mark Ch

Kaynağı APK'ye kendiniz derlemeye, ardından kaynak koduna geri dönüştürmeye ve Play Store APK'sından ayrıştırılmış kaynakla karşılaştırmaya ne dersiniz? Bunu deneyen var mı?
Sergiy Belozorov

1
@SergiyBelozorov üzgünüm Buna cevap veremem, artık gerçekten android ile çalışmıyorum, ama çok iyi bir fikir gibi geliyor.
Mark Ch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.