web-dev-qa-db-ja.com

Androidアプリからの他の呼び出しからのインテントを保護することは可能ですか?

私はAndroidのアーキテクチャを見ていて、複数のアプリケーション(サードパーティ)がローカルAndroidサービスを呼び出すことを可能にするサービスを考え出しますこれをパーティション化されたDropboxサービスと考えてください。各アプリがファイルを保存し、ユーザーがアプリ間でデータを共有するように設定した場合(例:app1とapp2の間の写真)、それは許可されます。

呼び出し元のアプリケーションを安全に検証して、ストアにアクセスできる唯一のAPIになるAPIを知っていますか?

呼び出し元のEXEを特定し、そのハッシュを確認することを考えていますが、アプリが更新されている場合は機能しません。

各アプリは同じ鍵で署名されている可能性があるため、これを一意のアプリ識別定数として使用できます。

私の主な懸念は、アプリ#1へのバイナリアクセスを取得し、キーまたは識別子を抽出し、それを使用して私のAndroid Service。

代替ソリューションは大歓迎です

1

したがって、これは本当に難しい問題であり、私はあなたが望むものを達成するためのAPIがそこにあるとは信じていません。

できないこと:カスタム権限


良い考えのように思えますが、カスタム権限はAndroidManifest.xmlで定義されています。これをチェックアウト SO回答 それらを定義/使用する方法についてですが、次のようになります。

<permission 
    Android:name="com.testpackage.mypermission" 
    Android:label="my_permission" 
    Android:protectionLevel="dangerous">
</permission>

権限を使用するには、他のすべてのアプリケーションが行う必要があることは、独自のAndroidManifest.xmlに以下を配置することです:

<uses-permission Android:name="com.testpackage.mypermission"/>

Android APKs are trivial to reverse engineer to get the most basic information for an application; this will take your your恐れの誰かがAPKへのアクセスを取得します。ルート権限を取得したスマートフォンは、自分のスマートフォンからAPKをプルできます。

XMLの行だけでなく、カスタムのアクセス許可を使用することの方が多いと思います。しかし、誰かがそもそもトラブルを経験しているのなら、彼らはそれを理解することができます。

解決?


これは難しい問題です。ある時点で、core appで使用されるアプリケーションを信頼するかどうかをユーザーに確認する必要があるためです。ユーザーがアプリを信頼していることを確認した場合は、おそらくアプリケーションの署名を記録します。 実行時に見つかります とすることができます。署名が記録した内容と異なる場合、それはユーザーが信頼したアプリケーションではありません。

これがおそらく最も簡単な解決策です。署名自体の検証は META-INF/CERT.RSAには署名と公開鍵が含まれています 署名を検証します。私は SOに関するこの投稿 がこれをどのように行うことができるかを示していると思います。

繰り返しますが、コアアプリケーションを通じてアプリケーションの信頼を確認することは、依然としてユーザーに依存しています。これがあなたに受け入れられるかどうかはわかりません。

2
RoraΖ