android – 如何在自定义的数据目录上执行APK?

前端之家收集整理的这篇文章主要介绍了android – 如何在自定义的数据目录上执行APK?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道 Parallel Space应用程序可以如何复制和执行其他应用程序,而无需复制其APK或在Playstore上的其他应用程序(例如“com.whatever.name-of-duplicated-app”)下修改的程序包名称.

在调查了他们的AndroidManifest.xml之后,在/ data / data /上创建的文件夹和设备上的日志,唯一的结论是,Parallel Space能够执行其他APK的代码,但它映射了数据目录的这些应用程序进入自己的数据目录.

证据:

>目录是这样创建的:/data/data/com.lbe.parallel.intl/parallel_intl/0/whatever-package-name-you-cloned
>每个重复的应用程序执行都是以其一个Proxy活动的新任务开始的,然后以重复的应用程序发生新创建的进程.

最初,我以为这是DexClassLoader/PathClassLoader API的东西,但是随着这次调查,我无法进一步发展.我也看到一些这样的问题,如one,但似乎并非如此.

解决方法

我正在分析小米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的结果如下.

并行空间宣布100个代理活动,100个代理服务和100个代理提供商.这些用于托管要克隆的应用程序.因此,克隆的应用程序将与Parallel Space在同一进程空间内.还有来自ActivityManager,ServiceManager,AccountManager,LocationManager的Android框架存根等等.基本上当应用程序被编译时,它创建这些与Android设备一起发布的framework.jar中的类.使用此代理存根和Java反射,它会在其自己的进程空间中创建并托管应用程序.为此,它只是拦截活动管理器调用并传递新的信息,然后转发给框架.

它还创建一个新的目录结构,用于在其/ data / data /文件夹中存储应用信息以托管克隆的应用程序数据.

细节是巨大的,Parallel Space开发人员已经利用了来自AOSP源代码的广泛知识来利用这一行为,并且还利用了使用Reflection和Proxies来使用Java类的方式.

更新:

刚刚在GitHub上找到并行空间的开源版本.这完全符合相同的原则.链接下面.

https://github.com/asLody/VirtualApp

猜你在找的Android相关文章