Analizowałem Xiaomi Redmi Note 3, która umożliwia aplikacje z wieloma instancjami dla WhatsApp. To, co robi, jest całkiem proste, tworzy inny profil użytkownika z poziomu struktury, aby odróżnić te dwa.
u0_a171 1832 631 1094576 91608 SyS_epoll_ 0000000000 S com.whatsapp
u999_a171 8571 631 1037396 65024 SyS_epoll_ 0000000000 S com.whatsapp
Równoległa przestrzeń robiła coś jeszcze ciekawszego. Zanim przejdziemy do szczegółów, pozwala analizować wyjście z 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
Tutaj użyłem Parallel Space utworzyć kolejne konto na FreeCharge. Zasadniczo, jeśli obserwujemy dwa ostatnie procesy, jeden z nich jest hostowany w ID procesu równoległego, podczas gdy druga aplikacja ma swój własny identyfikator procesu.
Inżynieria odwrotna przestrzeni równoległej przy użyciu apktool
i dex2jar
wyniki były następujące.
Przestrzeń równoległa deklaruje 100 zadań proxy, 100 usług proxy i 100 dostawców proxy. Są one używane do hostowania aplikacji, która ma zostać sklonowana. Zatem sklonowana aplikacja będzie znajdować się w tej samej przestrzeni procesowej, co przestrzeń równoległa. Posiadał również szkielety aplikacji Android z ActivityManager, ServiceManager, AccountManager, LocationManager i wiele innych. Zasadniczo po skompilowaniu aplikacji tworzone są te klasy, które są takie same, jak w pliku framework.jar dostarczanym z urządzeniami z systemem Android. Za pomocą tego kodu pośredniczącego proxy i Refleksja Java tworzy i hostuje aplikację we własnej przestrzeni procesowej. W tym celu przechwytuje po prostu wywołania Menedżera aktywności i przekazuje nowe informacje, które następnie są przesyłane do frameworka.
Tworzy również nową strukturę katalogów do przechowywania informacji o aplikacji w folderze/data/data /, w której przechowywane są sklonowane dane aplikacji.
Szczegóły są ogromne, deweloper Parallel Space korzystał z rozległej wiedzy z kodu źródłowego AOSP, aby wykorzystać to zachowanie, a także wykorzystał wykorzystanie klas Java przy użyciu Reflection i Proxies.
Aktualizacja:
Wystarczy znaleźć otwartą wersję źródłową przestrzeni równolegle na GitHub. Działa to dokładnie na tych samych zasadach. Link poniżej.
https://github.com/asLody/VirtualApp
@CommonsWare Każdy z was ma jakiś pomysł na to pytanie? Z góry dzięki. – JPMagalhaes