Для того же приложения у меня есть:
- APK из магазина приложений,
- что называется исходным кодом для той же версии. С довольно обычным скриптом и структурой Gradle.
Я хочу проверить, действительно ли APK был построен из этого исходного кода или нет.
Как это проверить?
Заметки:
- APK не запутывается.
- У меня нет оснований доверять чьей-либо подписи. Я доверяю только исходному коду.
- Я уже создал приложение для себя, но теперь я хочу знать, был ли APK в порядке или нет.
- Желательно с инструментами командной строки Linux, но любой инструмент в порядке.
.apk
файла, а затем запустить diff для получающихся каталогов. Единственной разницей тогда должна быть подпись (которая не может совпадать по понятным причинам). Подумайте об этом: просто разархивируйте.apk
файлы и сделайте бинарный diff, сделайте то же самое. И то и другое, разумеется, потребовало бы использования одинаковых версий библиотеки и т. Д. При компиляции :)diff
Метод кажется изящным ... но что, если ребята из магазина приложений запутывают APK при компиляции?Ответы:
Вы можете сделать это только с воспроизводимыми сборками:
Таким образом, разработчик приложения или магазин приложений должны быть на борту, чтобы это работало.
В противном случае ваш единственный вариант - построить его самостоятельно.
Одним из примеров разработчика, который в настоящее время делает это, является Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds
источник
Одна из замечательных особенностей Java и APK - вы можете полностью декомпилировать APK в исходный код Java.
Тем не менее, результирующий исходный код не обязательно будет идентичным.
Один хороший способ попытаться сопоставить полученный исходный код с известной ревизией - это проверить, какие изменения были внесены непосредственно до и после известной фиксации в репозитории, и посмотреть, присутствуют ли эти модификации также в декомпилированном источнике.
Для декомпиляции используйте dex2jar и JD-Gui .
редактировать Я просто заметил , что вы хотели Linux инструментов. Мой единственный опыт работы с Windows, но я уверен, что аналогичные инструменты существуют для Linux.
источник