1

私はセキュリティに関連するアプリに取り組んでいます。ユーザーがデバイスを工場出荷時の設定にリセットしても、アプリケーションを削除できません。これを行うには、デバイスがルート化されている必要があります。ただし、rootユーザーとして場所を取得しようとすると、このエラーが発生しAndroid Jellybean (4.1.1)ます

uncaughtException # Exception found!!
java.lang.SecurityException: invalid UID 0
at android.os.Parcel.readException(Parcel.java:1379)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:659)
at android.location.LocationManager._requestLocationUpdates(LocationManager.java:664)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)

Android のソース コードを調べたところ、Google がLocationManagerService.java ここに追加のセキュリティを追加していることがわかりました

関数内でrequestLocationUpdates呼び出す

 checkPackageName(Binder.getCallingUid(), packageName); 

これがcheckPackageName機能です

 private void checkPackageName(int uid, String packageName) {
    if (packageName == null) {
        throw new SecurityException("packageName cannot be null");
    }
    String[] packages = mPackageManager.getPackagesForUid(uid);
    if (packages == null) {
        throw new SecurityException("invalid UID " + uid);
    }
    for (String pkg : packages) {
        if (packageName.equals(pkg)) return;
    }
    throw new SecurityException("invalid package name");

}

これを修正する方法はありますか?同様の問題が発生した場合、これを解決する方法についてアドバイスをお願いします。ありがとう!

4

1 に答える 1

0

位置情報サービスに発信する前に:

final long ident = Binder.clearCallingIdentity();

呼び出し後:

Binder.restoreCallingIdentity(ident);
于 2013-08-11T20:58:09.687 に答える