2016-02-17 10 views
8

AndroidプロジェクトでサードパーティのAPI(パケット依存性インジェクション、生成されたライブラリ、ソースコードなど)をインポートすると、広告されたとおりに動作するとみなされます。 timesコードのほとんどはオープンソースではなく、難読化されているか、コンパイルされているだけです。Androidシステムリソースへの第三者APIのアクセスを制御しますか?

このAPIのネットワーク、連絡先、ビデオ、オーディオ、場所などの重要なシステムリソースへのアクセスを制御する方法はありますか?

システムリソースとしてproxyを提供することをお勧めします。これは、次のような利点があります:

  • テストは、プロキシで模擬データを提供することによって行うことができ
  • あなたのアプリケーションは、彼らが必要でない場合はAPIが必要とするすべての権限を提供する必要はないとプロキシが可能になりますAPIは、広告や悪意に使用
  • フィルター可能なデータは、ユーザーに関するローカルに収集され、APIのホームレポに送信された付与された権限をエミュレートすることであるため許可を壊さないために

私はどのようにそのようなを見つけることができませんでしたソルティユーザーの定義されたアクティビティーとサービスがサードパーティーAPIのサービスを制御できないため、またはAndroidパブリック・インターフェースへの直接呼び出しを防ぐことさえできないため、実装することができます。

このコントロールを自分のアプリの境界の外に置いておきたくないので、ソリューションにはルートアクセスは必要ありません。

この質問の内容はこの広範な質問(log data of content providersnetwork requests - それのための答えを研究しながら、私はこの問題を考えるようになった)のいくつかの質問アドレス特殊性にリンクされている

: (例えば、ネイティブレベルのハックがこの問題を解決する可能性があります - idk)

+1

権限を持たない別のサンドボックスプロセスでこのコードを実行できます。しかし、通常、そのコードは特定のアクセス権を持つことが予想されるため、そのコードはおそらくクラッシュします。ライブラリが依存性注入をサポートしていれば、おそらくテスト用のモックに目を向けると、保護されたAPIへの管理されたアクセスのために、サンドボックスプロセスのIPCを使用する「モック」を自分のものに戻す手段を組み立てることができるかもしれません。しかし、それをサポートするライブラリはほとんどありません。 – CommonsWare

+0

@CommonsWareはこれをテストする良い方法ですが、悪意のある意図があってもテスト中であることを検出できるマルウェアもあります。しかし、新しいフレームワークを構築していなくてもAPIを使用する予定がない場合は、まだ問題は残っています –

答えて

1

com.myproxiesという名前のパッケージで保護したいと望むアンドロイドリソースのプロキシクラスを構築します。 MediaRecorder、SensorManager、Camera、java.net.HTTPURLConnection)あなたがインプリメントする必要のあるプロキシあなたが嘲笑しているクラスのパブリックメソッドをすべて継承し、アクセス(適切なメソッドに転送)または拒否を許可するロジックを実装する必要があります。便利なステップの1つは、caller of the methodを確認することです。

  • ソースコードをインポートする予定の場合は、リファクタリングコードを使用してパッケージをプロキシに変更します(これはプロguardが役に立ちます)。

  • ライブラリを使用している場合は、Javaライブラリを簡単に再パッケージして独自の配布に組み込むユーティリティを入手し、パッケージ名をパッケージ内のクラスの内部に変更するユーティリティを入手してくださいプロキシとして。あなたはMavenのか、Gradleのパッケージの依存性注入を使用している場合

  • 、あなたはまた、残念ながら

ジャー・ジャーのリンクをインポートし、コンパイル時に(それを行うことができる非常にわからない)パッケージのリファクタリングを実行しようとすることができます私が経験したようにAPIを壊すのは非常に簡単で、多くの手作業が必要です。

関連する問題