yinsui 2011-03-11
/data目录权限:
drwxrwx--x system system 2011-01-03 23:41 data
这种情况下,用ES Explorer查看/data时,目录为空。File("/data")对象的canRead/canWrite方法测试,不可读不可写文件存在。
说明默认情况下APK的gid中没有system。
/system目录权限:
drwxr-xr-x root root 2011-03-05 19:23 system
这种情况下,ES Explorer可以进入到/system目录,File("/system")对象的canRead/canWrite方法测试,可读不可写文件存在。
说明默认情况下APK的gid中有root。
对于一个目录来说,假如该目录的权限设置对于APK来说不可读不可写,用File("")对象的canRead/canWrite方法测试,不可读不可写文件存在。
试验了一下午,总结一下:
1、普通APK运行时,属性root组,但不属性system组。
2、对于父目录a没有读写权限但子目录a/b有读写权限的的情况,直接使用File("a/b")方式可以对a/b目录进行读写。
这一点儿对一些特殊场合下的APK比较有意义。比如一个系统的内置程序有一些加密信息需要放在本地,但又不能让其它程序和用户能访问到。就可以对系统做一下定制,在/data下面建立一个someone文件夹,权限为777.因为/data本身是700,所以第三方程序是无法访问到这个目录底下的任何东西的。但对于我们的这个特殊APK来说,通过File("/data/someone")这种方式是可以访问到,并且可读可写的。
3、上面试验中没有提到的一点,我在一个APK中使用ProcessBuilder启动一个本地进程时,本地进程和这个APK具有相同的UID和GID。
4、Android系统中所有查看用户ID相关的命令都被删除了。所以,上面都是猜的。
adb shell cd system/app rm *.apk21. 获取管理员权限: adb root22. 启动Activity: adb shell am start -n 包名/包名+类名。