Как выполнить APK в настраиваемом каталоге данных?

Мне было интересно, как приложение Parallel Space может дублировать и запускать другие приложения без копирования их APK или запуска их под измененными именами пакетов, как это делают другие приложения в Playstore (например, "com.whwhat.name-of-duplicated-app").

После изучения их AndroidManifest.xml, папок, созданных в / data / data /, и журналов на устройстве, я могу сделать единственный вывод, что каким-то образом Parallel Space способен выполнять код из других APK, но он отображает каталоги данных. из этих приложений в свой собственный каталог данных.

Evidences:

  1. Каталоги создаются следующим образом: /data/data/com.lbe.parallel.intl/parallel_intl/0/whwhat-package-name-you-cloned
  2. Каждое выполнение дублированного приложения начинается с новой задачи одного из их прокси- действий, а затем каким-то образом дублированное приложение заменяется новым процессом.

Сначала я думал, что это что-то с API DexClassLoader / PathClassLoader, но я не мог продвинуться дальше в этом исследовании. Я также видел некоторые вопросы, подобные этому, но, похоже, это не так.

1 ответ

Решение

Я анализировал Xiaomi Redmi Note 3, который позволяет использовать приложения с несколькими экземплярами для WhatsApp. То, что он делает, довольно просто, он создает другой профиль пользователя в рамках, чтобы различать их.

u0_a171   1832  631   1094576 91608 SyS_epoll_ 0000000000 S com.whatsapp
u999_a171 8571  631   1037396 65024 SyS_epoll_ 0000000000 S com.whatsapp

Параллельное пространство делало что-то еще более интересное. Прежде чем углубляться в детали, давайте проанализируем вывод ps

u0_a45    2915  249   1120668 61264 SyS_epoll_ b6ca7010 S com.lbe.parallel.intl
u0_a45    6876  249   1081464 40588 SyS_epoll_ b6ca7010 S com.google.android.gms.persistent
u0_a45    6945  249   995016 19828 SyS_epoll_ b6ca7010 S com.google.process.gapps
u0_a45    11296 1     1220488 22760 futex_wait b6c7a8b0 S com.google.android.gms
u0_a45    12303 249   1064788 59680 SyS_epoll_ b6ca7010 S com.freecharge.android
u0_a100   12786 249   699476 45096 jbd2_log_w b6ca6fe8 D com.freecharge.android

Здесь я использовал Parallel Space для создания другой учетной записи для FreeCharge. Таким образом, в основном, если мы наблюдаем последние два процесса, один из них размещается в параллельном идентификаторе процесса, а другое - в собственном идентификаторе процесса.

Обратное проектирование параллельного пространства с использованием apktool а также dex2jar выводы были следующими.

Parallel Space объявляет 100 прокси-операций, 100 прокси-сервисов и 100 прокси-провайдеров. Они используются для размещения приложения, которое должно быть клонировано. Следовательно, клонированное приложение будет находиться в том же пространстве процесса, что и Parallel Space. Также у него были заглушки для Android Framework от ActivityManager, ServiceManager, AccountManager, LocationManager и многих других. В основном, когда приложение скомпилировано, оно создает те же классы, что и в framework.jar, который поставляется с устройствами Android. Используя эту заглушку Proxy и отражение Java, она создает и размещает приложение в своем собственном пространстве процессов. Для этого он просто перехватывает вызовы диспетчера операций и собирает новую информацию, которая затем направляется в платформу.

Он также создает новую структуру каталогов для хранения информации о приложении в своей папке / data / data / для размещения клонированных данных приложения.

Детали огромны, разработчик Parallel Space использовал обширные знания из исходного кода AOSP, чтобы усилить поведение, а также усилил использование классов Java с помощью Reflection и Proxies.

Обновить:

Только что нашел версию с открытым исходным кодом Parallel space на GitHub. Это работает точно по тем же принципам. Ссылка ниже.

https://github.com/asLody/VirtualApp

Другие вопросы по тегам