ルート チェックとレスポンス
PreEmptive Protection™ DashO™ は、Android アプリケーションまたはライブラリが、ルート化されたデバイスで実行されているかどうかを検出するためのチェックをそのアプリケーションまたはライブラリに差し込むことができます。 ルート チェックとレスポンスの構成は、Checks - Root パネルを使って、またはコード アノテーションを追加することにより行います。
ルート チェック
アプリケーションがルート化されたデバイスで実行されているかどうかを検出するには、アプリケーション内の 1 つ以上のメソッドに RootCheck を設定します。 DashO は、ルート化されたデバイスで実行されているかどうかを判断するための、いくつかのランタイム チェックを実行するコードを追加します。 このチェックは、概要の説明に従って構成できます。
アプリケーションには、さまざまな用途の RootCheck
をさまざまな構成で含めることができます。
複数のチェックを使用したり、レスポンスを混合したりすることにより、アタッカーの侵入を妨げられるでしょう。
private static boolean rootedFlag;
@RootCheck(action="@rootedFlag")
public void onCreate(Bundle check){
}
@RootCheck(response=ResponseType.Hang)
private int computeResult(){
}
メモ:
Android のルート チェックは、アプリケーションのコンテキストへのアクセスを必要とし、チェックが差し込まれるクラスにgetApplicationContext()
メソッドの存在が必要です。
android.app.Activity
、android.app.Application
、android.app.Service
のようなandroid.context.Context
を拡張するクラスは、getApplicationContext()
を継承するので、追加の変更は不要です。そうでない場合は、
getApplicationContext()
メソッドを追加して、適切なContext
が返されることを確認してください。
QUERY_ALL_PACKAGES
権限を有効にすると、ルート チェックの検出が改善されます。また、
QueryAllPackagesPermission
lint チェックを抑制する必要があります。ルート チェックは、エミュレーターまたはセキュリティ保護されていないカスタム ROM 上で実行しているときにトリガーされることもあります。
Google は、特定の状況でのみ QUERY_ALL_PACKAGES
を使用することを許可しています。これは、デベロッパー プログラム ポリシーの最新の更新で適用されました。ルート チェック機能は従来どおり QUERY_ALL_PACKAGES
なしでも使用できます。
ルートのレスポンス
RootResponse アノテーションは、RootCheck と情報をやり取りします。 このレスポンスは、概要の説明に従って構成できます。
private static boolean rootedFlag;
@RootCheck(action="@rootedFlag")
public void onCreate(Bundle state){
}
@RootResponse(source="@rootedFlag", response=ResponseType.Exit, probability=0.05f)
private int computeResult(){
}
@RootResponse(source="@rootedFlag", response=ResponseType.Error, probability=0.1f)
private FileInputStream readInput(){
}