Ich analysierte die Xiaomi Redmi Note 3, die Multi-Instanz-Apps für WhatsApp ermöglicht. Was es tut, ist ziemlich einfach, es schafft ein anderes Benutzerprofil innerhalb des Rahmens, um die zwei zu unterscheiden.
u0_a171 1832 631 1094576 91608 SyS_epoll_ 0000000000 S com.whatsapp
u999_a171 8571 631 1037396 65024 SyS_epoll_ 0000000000 S com.whatsapp
Parallelraum machte etwas noch interessanter. Bevor in die Details erhalten, die Ausgabe von 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
Hier können analysieren, habe ich Parallel Space zu schaffen, ein anderes Konto für Freecharge verwendet. Wenn wir also die letzten beiden Prozesse beobachten, wird einer von ihnen in der Parallel-Space-Prozess-ID gehostet, während die andere App in ihrer eigenen Prozess-ID ist.
Reverse Engineering Parallel Space mit apktool
und dex2jar
die Ergebnisse waren wie folgt.
Parallel Space deklariert 100 Proxy-Aktivitäten, 100 Proxy-Dienste und 100 Proxy-Anbieter. Diese werden verwendet, um die Anwendung zu hosten, die geklont werden soll. Daher befindet sich die geklonte App im selben Prozessraum wie der Parallel Space. Es hatte auch Android Framework Stubs von ActivityManager, ServiceManager, AccountManager, LocationManager und viele mehr. Wenn die App kompiliert wird, erstellt sie im Wesentlichen dieselben Klassen wie in framework.jar, das mit Android-Geräten geliefert wird. Mit diesem Proxy-Stub und Java Reflexion erstellt und hostet die App in ihrem eigenen Prozessraum. Dazu fängt es einfach die Activity Manager-Aufrufe ab und leitet neue Informationen ein, die dann an das Framework weitergeleitet werden.
Es erstellt auch eine neue Verzeichnisstruktur zum Speichern von App-Informationen in seinem/data/data/-Ordner zum Hosten der geklonten Anwendungsdaten.
Die Details sind immens, die Entwickler von Parallel Space haben umfangreiches Wissen aus dem AOSP-Quellcode genutzt, um das Verhalten zu nutzen und auch die Verwendung von Java-Klassen durch Reflection und Proxies zu nutzen.
Update:
gefunden einfach die Open-Source-Version von Parallel Raum auf GitHub. Dies funktioniert genau nach denselben Prinzipien. Link unten.
https://github.com/asLody/VirtualApp
@CommonsWare von Ihnen Jeder hat eine Vorstellung über diese Frage? Vielen Dank im Voraus. – JPMagalhaes