9

私のアプリケーションは、android:protectionLevel="signature" でパーミッションを定義しています。

<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="signature" />

私の意図は、私の署名済みアプリによってのみ起動できるアプリケーション モジュールを作成することです。これらのアプリケーション モジュールには、そのアクティビティに android:permission があります。これはうまくいきます。しかし...サードパーティのアプリは、このように同じ権限名を使用して保護レベルを通常に変更できます

<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="normal" />

私のアプリが最初にインストールされている場合、他のアプリが許可を上書きするのを防ぐことができます。ただし、アプリをアンインストールしてから自分のアプリをインストールすると、権限が再定義されます。

他のアプリケーションが同じ権限名を使用するのを防ぐことは可能ですか?たとえば、権限にアプリケーション パッケージのような一意の ID を与えることはできますか?

マニフェストは暗号化されていますが、このパーミッションを必要とするアクティビティを開始しようとすると、誰でも log cat のパーミッション名を読み取ることができます (必要なパーミッション名を持つ例外がスローされます)。

4

3 に答える 3

5

強制はなく、慣習のみです。Java の世界の他の部分と同様に、ドメイン名登録インフラストラクチャにゆるやかに依存しています。com.myawesomecompany.myapp.MYPERMISSIONアイデアは、許可名の前に、所有するパブリック インターネット ドメイン名 (例: ) を付けるというものです。

当然のことながら、ドメイン名の一意性はレジストラ コミュニティによって強制されます。

はい、システムは悪用の可能性があります。

編集: 放送ベースのチャネルを保護している場合は、必要に応じて双方向の署名チェックを追加できます。パーミッション名を 2 番目のパラメーターとして Context.sendBroadcast() を呼び出します。

EDIT2: より大きな Android アプリのセキュリティ画像に目を閉じている間、これを考えすぎているように感じます。これは印象的ではありません。特権インフラストラクチャを悪用することは、Android アプリにハッキングする方法ではありません。私があなたのインテントを傍受しようと試みたとしても、偽のインテント レシーバー (アクティビティ、サービス) を作成するつもりはありません。代わりに、デバッガーを使用して、アプリ内の本物のレシーバー、署名などに接続します。

公開されているツールを使用すると、特定の APK の Eclipse プロジェクトをまとめるのに数分かかります。それを Eclipse にロードし、実行中のプロセスに接続し、関連するシステム API にブレークポイントを設定します (Android はオープン ソースであることを思い出してください)。少し手間をかけるだけで、APK の逆コンパイルされた Java ソースを取得し、システムのメソッドではなく、独自のメソッドでデバッグできます。

于 2012-07-12T18:49:49.727 に答える
0

他のアプリケーションが許可レベルを変更できないようにしたい場合は、レベル「署名」を持つシステム事前定義許可を使用できます。システムの前にパーミッションを定義できる他の通常のアプリはありません。

システム権限を使用してリソースを保護しても、アプリがプラットフォーム キーで署名する必要があるわけではありません。

例:

<service
        android:name="xxx.xxx.xxx.exservice"
        android:permission="android.permission.BROADCAST_PACKAGE_REMOVED" >

唯一の問題は、以下のコードがアプリの manifest.xml に表示されている場合、AppStore が使用する権限を表示することです。

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />

この例では、同じ署名キーでリソースにアクセスできますが、パッケージの削除をブロードキャストすることはできません。

于 2014-10-06T20:01:54.883 に答える