私のアプリケーションでは、android:protectionLevel = "signature"でアクセス権を定義しています。他のアプリケーションが同じ許可名を定義するのを防ぐ方法
<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="signature" />
私の意図は、署名されたアプリケーションによってのみ起動できるアプリケーションモジュールです。これらのアプリケーションモジュールは、その活動にアンドロイド:許可を持っています。 これは正常に動作します。しかし... サードパーティ製のアプリは私が許可を無効にするために、他のアプリを防ぐことができ、同じ権限名を使用して、私のアプリを最初にインストールされている場合は、この
<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="normal" />
のように、通常の保護レベルを変更することができます。ただし、自分のアプリをアンインストールしてからアプリをインストールすると、そのアクセス権が再定義されます。
他のアプリケーションが同じ許可名を使用することを防ぐことはできますか?たとえば、許可をアプリケーションパッケージのような一意のIDにすることはできますか?
マニフェストは暗号化されていますが、このアクセス許可が必要なアクティビティを開始しようとすると誰でもlog catのアクセス許可名を読み取ることができます(必要なアクセス権名を持つ例外がスローされます)。
良い質問ですが、私の推測では、他のアプリケーションを制限する方法はありません。 – FoamyGuy
これはセキュリティ上の問題です。署名されていないアプリケーションが低水準の保護を定義する私の許可を置き換えてから、自分の署名したモジュールを使用することができるので、署名されたアプリケーションモジュールが私の署名付きコアアプリケーションのみが起動されることを許可することはできません。 – Dennix
異なるパッケージ名、署名、protectionLevel = normalのアプリケーションの修正版を作成して、テストを設定することができます。両方のアプリが同じデバイスにある場合、どうなるかを確認してください。私の推測は、a)署名チェックが最初に始まり、不正なアプリが正しい署名を必要とするあなたのアプリにアクセスできないことを確認する。そして、b)異なるレベルのprotectionLevelを持つ同じパーミッション文字列が同じデバイス上に共存することができます。 – tiguchi