チェックは、特定の条件が true であるかどうかの "検査" を行い、その条件が true と判断された場合にさまざまなレスポンスを発生させるための、既存のメソッドに差し込まれるコード部分です。
PreEmptive Protection™ DashO™ では、アプリケーションに次のチェックを差し込むことができます。
- デバッグ - アプリケーションがデバッグされているか、あるいはデバッグを許可するように設定されているか。
- エミュレーター - アプリケーションがエミュレーターで実行されているか。
- フック - フックが検出されているか。
- ルート - ルート化されたデバイスでアプリケーションが実行されているか。
- Shelf Life - このアプリケーションは有効期限が切れているか(あるいは、間もなく切れるか)。
- 改ざん - アプリケーションは改ざんされているか。
Shelf Life を除き、さまざまなチェックやレスポンスはすべて同じように動作します。 チェックはさまざまな方法で、直ちに、あるいは後で別のレスポンスを介して対応することができます。 これらのチェックとレスポンスの構成は、Checks UI パネルを使って、またはコード アノテーションを追加することにより行えます。 Shelf Life には個別のレスポンスはありません。
さまざまなチェックとレスポンスの使用法を示すいくつかのサンプルがあります。
チェックの一般的な動作
チェックがトリガーされたら、さまざまな方法でそれに対応することができます。 次のうちの一方または両方を選択できます。
-
メソッドを呼び出すか、またはフィールドを設定する - 単一の
boolean
を取るメソッドを呼び出すか、またはboolean
型のフィールドを設定することによって、チェックの状態をアプリケーションに渡し返すことができます。 チェックがトリガーされた場合のboolean
値はtrue
です。 チェックがトリガーされていない場合は、false
が使用されます。 アプリケーションは、この情報に基づいて直ちに行動するか、あるいは後でレスポンスとやり取りするために格納しておくことができます。 詳細については、ソースおよび操作の指定を参照してください。
メモ: Shelf Life チェックは、
boolean
ではなくToken
引数を取るメソッドを必要とします。
-
レスポンスを実行する - 即時に実行できるレスポンスがいくつかあります。
-
exit
- ランダムなゼロ以外のリターン コードを生成してアプリケーションを終了する。 -
hang
- 現在のスレッドをハングさせる。 -
error
-java.lang.Error
の、ランダムに選択されたサブクラスをスローする。 -
exception
-java.lang.Exception
の、ランダムに選択されたチェックされていないサブクラスをスローする。 -
none
- 何もしない(既定)。
メモ: リターン コードのランダム化および
Throwable
の選択は、チェックが差し込まれた時点で実行されます。エラーと例外は、その出所を隠すために、空のスタック トレースを伴ってスローされます。
Android では、
exit
はアクティビティ スタックの最上にあるActivity
のみを閉じます。スタックに
Activity
が 1 つしかない場合は、アプリケーションが閉じます。
-
レスポンスの動作とカスタム動作を両方選択すると、カスタム動作が呼び出されてから、レスポンスの動作が実行されます。 どちらの動作も要求しない場合は、チェックは省かれ、DashO が警告メッセージを生成します。
アプリケーションには、さまざまな用途のチェックをさまざまな構成で含めることができます。 複数のチェックを使用したり、レスポンスを混合したりすることにより、アタッカーの侵入を妨げられるでしょう。
レスポンスの一般的な動作
チェックとレスポンスを分離すると、アタッカーにとってより困難になります。 複数の異なるレスポンスをアプリケーション中に散在させることで、アプリケーションの攻撃の困難さが増します。 それらのレスポンスをときどき発生させるようにすると、攻撃プロセスをいら立たせるものにすることができます。 DashO では、レスポンスを単純にでも複雑にでも望みどおりに構成することができます。
Response
は、チェックとレスポンスのコードを分離するために Check
とやりとりするコードを追加します。 同じ Check
に多数の Responses
を追加できます。
-
Response
は、boolean
値を介して Check に合わせられます。Check
の動作
を使用する値セットは、Response
のソース
を使って取得されます。 取得された値がtrue
であれば、レスポンスが実行されます。 詳細については、ソースおよび操作の指定を参照してください。
Check
の場合と同様に、Response
では、あらかじめ用意されたレスポンスを行うことができます。 さらに、レスポンスには、0.0
(なし)から 1.0
(常時)までの確率係数に基づいて条件を付けることができます。既定値は 1.0
です。