Pour la même application, j'ai:
- un APK provenant d'un magasin d'applications,
- ce qui est prétendument le code source de la même version. Avec un script de construction Gradle et une structure assez habituelle.
Je veux vérifier si l'APK a vraiment été construit à partir de ce code source ou non.
Comment vérifier cela?
Remarques:
- L'APK n'est pas obfusqué.
- Je n'ai aucune raison de faire confiance à la signature de quelqu'un. Je ne fais confiance qu'au code source.
- J'ai déjà construit l'application pour moi, mais maintenant je veux savoir si l'APK était correct ou non.
- De préférence avec des outils en ligne de commande Linux, mais tout outil est acceptable.
2 votes
Je n'ai pas essayé cela, mais vous devriez pouvoir utiliser Apktool à cette fin : Désassemblez deux fichiers
.apk
, puis exécutez une différence entre les répertoires résultants. La seule différence devrait être la signature (qui ne peut pas correspondre pour des raisons évidentes). En y réfléchissant : simplement dézipper les fichiers.apk
et faire une différence binaire devrait faire la même chose. Les deux méthodes nécessiteraient bien sûr d'avoir utilisé les mêmes versions de bibliothèques, etc., lors de la compilation initiale :)0 votes
@Izzy : "mêmes versions de bibliothèque" : la version de l'API est mentionnée dans le manifeste et les versions des bibliothèques dans le script Gradle, donc cette partie devrait être correcte, je suppose. Une liste de fichiers/dossiers pouvant être ignorés ferait de cela une excellente réponse (bonus pour les lignes de commande réelles).
1 votes
Je pourrais le faire si j'étais sur mon ordinateur à la maison, ce qui n'est pas le cas actuellement. Mais pour que cela soit une "réponse honorable", je devrais d'abord l'essayer moi-même :) Au cas où j'oublierais (et que personne d'autre ne l'ait fait avant moi), n'hésitez pas à me renvoyer un autre ping (par exemple, en discussion) dans environ 8..10h :)
0 votes
@Izzy La méthode
diff
semble géniale... mais que se passe-t-il si les gars du magasin d'applications ont obscurci l'APK lors de sa compilation ?0 votes
À mon avis, c'est là qu'intervient Apktool. Avez-vous vérifié le lien ? Jetez également un œil à LibRadar qui l'utilise. Pour ce que je me souvienne, cela aide à désembrouiller (certainement, sinon LibRadar aurait du mal à détecter ces bibliothèques).
0 votes
Je m'apprêtais juste à dire des vérifications MD5. Cela peut ne pas aider avec les signatures, mais cela peut montrer s'il y a une différence. Une fois qu'ils sont tous les deux dans un état compilé ou décompilé, bien sûr.
0 votes
@DanBrown: Est-ce que vous voulez dire que l'APK de la boutique et celui que j'ai compilé moi-même doivent être exactement les mêmes, octet par octet? Cela suppose qu'aucun horodatage de construction, etc., n'est inclus.
0 votes
@NicolasRaoul Ils ne le sont pas, à ma connaissance.
0 votes
@DanBrown Alors, quels fichiers dans l'APK suggérez-vous de comparer les sommes de contrôle ? Merci !
0 votes
@NicolasRaoul vous devriez probablement le faire dans un format décompilé. Vous aurez juste besoin de démonter l'APK. Assurez-vous que les bibliothèques et les versions de l'application sont les mêmes entre les applications