Pour la même application, j'ai:
- un APK depuis une boutique d'applications,
- ce qui est censé être le code source de la même version. Avec un script et une structure de construction Gradle assez habituels.
Je veux vérifier si l'APK a vraiment été construit à partir de ce code source ou non.
Comment vérifier ça?
Remarques:
- L'APK n'est pas masqué.
- Je n'ai aucune raison de faire confiance à la signature de qui que ce soit. Je ne fais confiance qu'au code source.
- J'ai déjà créé l'application pour moi, mais maintenant je veux savoir si l'APK était OK ou non.
- De préférence avec les outils de ligne de commande Linux, mais tout outil est OK.
.apk
fichiers, puis exécuter un diff par rapport aux répertoires résultants. La seule différence devrait alors être la signature (qui ne peut pas correspondre pour des raisons évidentes). En y réfléchissant: décompresser simplement les.apk
fichiers et faire un diff binaire devrait faire de même. Les deux nécessiteraient bien sûr d'avoir utilisé les mêmes versions de bibliothèque, etc. lors de la compilation en premier lieu :)diff
méthode semble soignée ... mais que faire si les gars de l'App Store ont obscurci l'APK lors de sa compilation?Réponses:
Vous ne pouvez le faire qu'avec des versions reproductibles:
Le développeur de l'application ou l'App Store doit donc être intégré pour que cela fonctionne.
Sinon, votre seule option est de le construire vous-même.
Un exemple de développeur qui le fait actuellement est Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds
la source
Une grande chose à propos de Java et des APK est que vous pouvez décompiler complètement l'APK en code source Java.
Cependant, le code source résultant n'est pas garanti d'être identique.
Une bonne façon d'essayer de faire correspondre le code source résultant avec une révision connue est de vérifier quelles modifications ont été apportées directement avant et après la validation connue dans le référentiel, et de voir si ces modifications sont également présentes dans la source décompilée.
Pour décompiler, utilisez dex2jar et JD-Gui .
edit Je viens de remarquer que vous vouliez des outils Linux. Ma seule expérience est avec Windows, mais je suis sûr que des outils similaires existent pour Linux.
la source