【问题标题】:Is it possible for two Android processes to have the same name?两个Android进程是否可以具有相同的名称?
【发布时间】:2020-01-10 23:56:56
【问题描述】:

我正在考虑如何在不使用任何支持库(仅使用 Android SDK)的情况下保护 Android 中的 AIDL 调用。我想到的一种方法是强制使用的活页夹具有列入白名单的进程名称,例如com.xyz.app。 How to get application package name or UID which is trying to bind my service from onBind function? 可以做到这一点

但是,恶意应用是否仍可能仅在其清单中指定其进程名称与列入白名单的进程名称相同?

【问题讨论】:

    标签: android


    【解决方案1】:

    是的,两个应用程序可以使用相同的进程名称。 给你两个建议: 1.查看进程名后,还需要查看app的签名。 其他应用可以使用与您相同的名称,但不能使用相同的签名。

     //the code showing how to get siginature
     PackageInfo info = getPackageInfoByName(context, pkgName);
     byte[] sign = info.signatures[0].toByteArray();
    
     //Add code here check whether the sign with your app
    
    
     public static PackageInfo getPackageInfoByName(Context context, String packageName) {
        try {
            return context.getPackageManager().getPackageInfo(packageName,PackageManager.GET_SIGNATURES);
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "Failed getPackageInfo", e);
        }
        return null;
    }
    

    2.您可以为您的服务添加签名级别的权限,作为binder的服务器。

    //1.create a signature level permission in your AndroidManifest.xml
    <permission
            android:name="com.xyz.aa.permission.bindservice"
            android:protectionLevel="signature">
    </permission>
    
    //2.Add the permission to your service 
     <service android:name=".MyService" 
            android:permission="com.xyz.aa.permission.bindservice">
        </service>
    

    要绑定服务的应用必须使用此权限,只有与你签名相同的应用才能使用此权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2018-07-04
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      相关资源
      最近更新 更多