3

Androidはネイティブコードのセキュリティチェックをどのように実行しますか?AndroidManifest.xmlでパーミッションXを宣言するとします。これは、ネイティブコードで同じパーミッションXを継承することを意味しますか?

4

2 に答える 2

2

Androidはどのようにセキュリティチェックを実行しますか?

権限を適用する方法は基本的に2つあります。

  • まず、カーネルレベルで:インストールされた各アプリには一意の(Linux)ユーザーIDが割り当てられ、アプリが起動するたびにAndroidはプロセスを生成し、そのプロセスのユーザーIDをアプリのユーザーIDに設定します。現在、たとえばファイルシステムやネットワークなどの特定のハードウェア機能へのアクセスは、標準のLinuxグループ権限システムを使用して実施されます。たとえば、ネットワークへのアクセスはネットワークグループに対してのみ許可されており、マニフェストでネットワーク権限をリクエストした場合、アプリユーザーはそのグループの一部になります。

  • 特定のにアクセスしたり、ブロードキャストメッセージを送信したりするなど、ユーザースペースのセキュリティをContentProviderOSに中継することはできません。したがって、Javaまたはネイティブコードのいずれかからメソッドを呼び出すと、許可されていないことを実行できないことを保証するソフトウェアチェックが最後にあることを(かなり)確信できます。NDK APIはおそらく(おそらく間接的に)何らかのJavaメソッドを呼び出すだけなので、ネイティブコードとJavaコードを別々にチェックする必要はおそらくありません(ただし、Idkはそれがどのように行われるかを正確に示します)。

UIスレッドでのネットワークのようなネイティブコードを使用することで、Javaチェックの一部を回避できる可能性があります(ネットワーク権限がある場合)。ネイティブコードを使用することによってのみ悪用できる抜け穴がある可能性もありますが、それはまれなはずです。最終的に、どのタイプのコードを使用するかは重要ではありません。

@ user827992

NDKはdalvikのダイジェストされたマシンコードを生成するだけで、Android用のC /C++で利用できるAPIはありません。そもそもそれをコーディングしてAPIにアクセスすることすらできないため、特定の権限を必要とする特定のAPIセットを使用することに問題はありません。

真実ではありません。C/C++で記述されたネイティブコードは、CPUのネイティブマシンコードでコンパイルされたアプリのコンパイル時であり、実行時にCPUによって直接実行され、dalvikは関与しません。ただし、JNIを介して(NDK APIを介して)Javaメソッドを呼び出すと、dalvikに戻ります。また、NDKを介して利用できるAndroid APIがたくさんあるため、NDKが存在します。

于 2012-08-10T21:18:10.253 に答える
-1

「Androidロジック」によると、少なくとも2つの理由でそれを行う意味はありません。

  • アプリを作成するには、常にいくつかのJava行をコーディングする必要があるため、エントリポイントは常にJava言語とJavaアプリになります。C /C++コードだけでapkを実行することはできません。
  • NDKはdalvikのダイジェストされたマシンコードを生成するだけで、Android用のC /C++で利用できるAPIはありません。そもそもそれをコーディングしてAPIにアクセスすることすらできないため、特定の権限を必要とする特定のAPIセットを使用することに問題はありません。

結局のところ、AndroidをJavaアプリケーションとして考えてみてください。このアプリケーションでは、大量の計算を行うための独自のビジネスロジックをC / C ++でコーディングできます。GoogleがAPIとポリシーに関して提供するものはすべて、Javaにのみ関連しているはずです。言語。

于 2012-08-10T20:36:10.630 に答える