2017-01-10 12 views
11

Zastanawiam się, w jaki sposób aplikacja Parallel Space może duplikować i uruchamiać inne aplikacje bez kopiowania ich plików APK lub uruchamiania ich pod zmodyfikowanymi nazwami pakietów, tak jak inne aplikacje w Playstore do (np. "com.whatever.name-of-duplicated-app") .Jak wykonywać pakiety APK na spersonalizowanym katalogu danych?

Po zbadaniu ich AndroidManifest.xml, foldery utworzone na /data/data/ i loguje się na urządzeniu, jedyny wniosek, mogę dostać to, że jakoś Parallel Kosmiczna jest zdolny do wykonywania operacji kod z innych pakietów APK, ale mapuje katalogi danych tych aplikacji do własnego katalogu danych.

Dowody:

  1. katalogi są tworzone tak: /data/data/com.lbe.parallel.intl/parallel_intl/0/whatever-package-name-you-cloned
  2. Every Powielone wykonywanie aplikacji zaczyna się od nowego zadania jednego z ich działań Proxy, a następnie w jakiś sposób powielona aplikacja ma miejsce w nowo utworzonym procesie.

Początkowo myślałem, że to coś z DexClassLoader/PathClassLoader API, ale nie mogę przejść dalej z tego dochodzenia. Też zobaczyłem kilka pytań takich jak ten one, ale wydaje się, że tak nie jest.

+0

@CommonsWare Każdy z was ma jakiś pomysł na to pytanie? Z góry dzięki. – JPMagalhaes

Odpowiedz

12

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

+0

Świetna analiza, dzięki! Znalazłem własną wersję ActivityManager w pakiecie com.lbe.doubleagent.service. Jak sam powiedziałeś, prawdopodobnie przechwytuje każde wezwanie do frameworka i reimplementuje niektóre kluczowe elementy, aby uzyskać pożądane zachowanie. – Perazzo

+1

Tak, dokładnie. Zastanawiam się, czy niebo jest ograniczeniem tego, co mogą zrobić dzięki temu podejściu! –

Powiązane problemy