android私有目录直接读取

一、说明

Android应用或游戏在数据持久化时,一般会将文件写入到sdcard或者私有目录files目录下,也可以直接在私有目录下新建文件夹进行存入。
如:
/storage/emulated/0/Android/data/[package name]/
/storage/emulated/0/Android/data/[package name]/files/
/data/user/0/[package name]/
/data/user/0/[package name]/files

由于权限机制的设定,sdcard目录用户只需注册对应权限即可访问,shell用户可直接访问。
而应用私有目录,一般用户除自应用外没有权限进行访问,包括shell在内。

二、可行方案

1、手机进行ROOT,shell运行时执行su命令,通过权限管理工具获取ROOT权限,进而可以访问任意位置;
2、利用多开器的特性,在virtualxposed、平行空间中运行程序,利用其它应用对该程序进行读取数据,因为都处于同一多开器中,权限对等,可以相互访问私有目录和内存空间等;
3、自身应用执行时,代码执行权限设置,开放私有目录给外部用户,用于测试。

三、实现

1、获取ROOT权限后,使用是最方便的,但是出于某些原因或者情况,可能没法获取ROOT权限,因此此方案不提。

2、多开器的方案需要定制化的设置,当然可以和第三种方案进行结合,效果也不错,唯一有个问题,要保证自身应用兼容多开器。

3、通过自身代码执行获取权限,关键在通过chmod函数实现.

String filesPath = getApplication().getFilesDir().getAbsolutePath();
String privatePath = filesPath.substring(0,filesPath.lastIndexOf('/'));

try {
    Runtime.getRuntime().exec("chmod 777 " + filesPath);
    Runtime.getRuntime().exec("chmod 777 " + privatePath);
} catch (IOException e) {
    e.printStackTrace();
}

改了之后直接可以通shell权限进行访问。

点赞