Android自定义权限

目前的Android权限系统导致以下问题:

应用程序A定义了以下自定义权限:

com.package.permission.READ_APP_DATA

当应用程序B安装声明自定义权限时,它被授予。

但是,如果应用程序A安装应用程序B之后,则该权限不会授予应用程序B.

虽然这可能不是常见事件,但由于应用程序B通常是应用程序A的插件,因此它当然可以发生,并且可以用于我的应用程序。

超级用户应用程序同意引入android.permission.ACCESS_SUPERUSER的全局自定义权限,如果用户决定切换超级用户应用程序,这可能是一个大问题。

为了处理这个问题,我打算在我的应用程序中使用下面的代码来获得我即将开始声明的自定义权限:

checkPermissions(this, getCallingActivity().getPackageName()); // get the package name from the sender first

private boolean checkPermissions(Context context, String callingPackage) {

    final List<PackageInfo> apps = context.getPackageManager().getInstalledPackages(PackageManager.GET_PERMISSIONS);

    for (PackageInfo pi : apps) {

        if (pi.packageName.equals(callingPackage)) {

            String[] permissions = pi.requestedPermissions;

            if (permissions != null) {
                for (String permission : permissions) {
                    if (permission.equals("com.package.permission.READ_APP_DATA")) {
                        return true;
                    }
                }
            }
        }
    }
    return false;

按照这个问题的标题:这种方法是否安全? 或者,有没有一种方法/根破解应用程序的清单可以改变后,它的安装和权限以编程方式“添加”到应用程序B?


我不知道我是否正确地得到了问题,因为我不知道在安装连接到上面发布的代码后,如何盗取清单中的许可。 但要回答你的最后一段:

不是一个简单的方法。 用户必须在他的设备上安装一个mod,这可以在应用程序请求时即时授予任意权限。 IIRC清单文件本身仅在安装时被解析。

所以我们在mod中使用的是改变com.android.server.pm.PackageManagerService类中的方法grantPermissionsLPw

它用于授予启动器权限android.permission.EXPAND_STATUS_BAR ,它没有在其清单中声明。

但我不确定,如果这可能会用于您的应用程序。 但要总结一下:如果用户想要授予应用程序一个仲裁权,自定义权限:是的,这是可能的。

UPDATE

当然,我可以详细阐述一下。 我可以看到两种情况发生

1.静态mod

上面提到的类位于services.jar 。 正如我们所知,像这样的文件可以被反编译,修改和重新编译。 事实上,这是一个相当简单的编辑这个文件。 我不知道如何直接在手机上执行此操作,但我认为这是可行的。 这是不可行的,广泛的解决方案是可用的,因为它需要大量的处理能力。 攻击者不能只提供一个通用文件。 这些文件在设备之间以及固件版本之间变化。 攻击者可能需要提供大量补丁文件,或者通过将补丁上传到服务器,修补补丁,重新下载并安装补丁来实现补丁。 如果你问我,这种情况不太可能。

2.动态mod

有多个可用的框架,可以在运行时改变流程。 其中最受欢迎的是Xposed框架。 基本上,它是一个修补程序app_process和一个利用Reflection来改变运行进程的对应API。 现在,攻击者可以使用此框架发布他的应用程序,并拥有root权限,并以静默方式安装它。 有了root权限,他甚至可以自己启用该模块,这通常需要用户交互。 一旦启用了这样的模块,攻击者就可以挂钩上述方法并更改请求的权限。 他会这样做,通过获取包含请求权限的对象字段,添加他所需的权限字段,然后运行原始方法,该方法添加最初定义的权限。

请注意,这两种情况都需要用户自己安装恶意应用程序。 您没有提及您的应用的功能,因此我无法帮助您评估风险。 我只能说,攻击者可以做这样的事情。


我看到一个问题,如果应用程序A安装在应用程序B之前,并且未在应用程序A中声明<permission>元素,则用户永远不会看到权限请求。 但是,如果您确实需要使用App A中的<permission>元素,则可以使用类似的方法来验证向用户显示的标签和说明是否准确。

链接地址: http://www.djcxy.com/p/85369.html

上一篇: Android custom permissions

下一篇: Reinstall application apk programmatically without downloading