Я хотел бы реализовать проверку проверки подлинности проверки приложения (или файла dex) для проверки того, что немодифицированное приложение использует мою общую сборную библиотеку (* .so) build с NDK. Я хотел бы выполнить все проверки подписи непосредственно на C++, без Java. В настоящее время я узнал, что здесь можно получить доступ к файлу apk: /data/app/--1/base.apk. Из файла apk я предполагаю, что возможно получить содержимое исходного файла dex, возможно, даже без извлечения, поскольку файл apk выровнен.Получить исходный файл dex из родной библиотеки android
- Кто-нибудь знает, как читать файл dex без извлечения из apk?
Я говорю оригинальный файл dex, потому что, если я правильно понимаю (и исправляю, если ошибаюсь), файл dex преобразуется в общий объект ELF, когда apk установлен - двоичный исполняемый файл, специфичный для архитектуры устройства. Именно по этой причине я не смог проверить/проверить подпись файла * .dex, указанного в/proc/self/maps (пример: /data/dalvik-cache/x86/[email protected]@[email protected] .apk @ classes.dex), потому что во время компиляции невозможно узнать подпись, потому что файл dex будет изменен.
Я знаю, что метод проверки исходного файла dex не очень безопасен, потому что я думаю, что его можно обойти на корневом устройстве легко, заменив оптимизированный файл dex - просто запустите dex2oat в пользовательском файле dex и поместите его в (/ data/dalvik -cache/...).
- Есть ли другой лучший способ проверить, является ли приложение оригинальным из собственной библиотеки, используя простой C++? (Без вызова Java через JNI)
Для аутентификации приложений я фактически использовал что-то похожее, как в вашем последнем пункте. Я жестко закодирован в общедоступном сертификате собственной библиотеки, найденном внутри META-INF/CERT.RSA, и использовал zlib для извлечения APK и сравнения встроенного значения с найденным в реальном APK. Фактически встроенная строка значений зашифровывается. Здесь не нужен OpenSSL. Атакующий должен атаковать (например, отлаживать) двоичную Native-библиотеку, чтобы обойти эту проверку, которую я хотел. META-INF/CERT.RSA в APK нельзя подделать - Android гарантирует это. – jozols