すべてのプロダクト
Search
ドキュメントセンター

Web Application Firewall:Anti-Bot SDKをAndroidアプリケーションに統合する

最終更新日:May 24, 2024

このトピックでは、Anti-Bot SDKをAndroidアプリケーションに統合する方法について説明します。

Androidアプリケーション用のSDKファイル

Alibaba Cloudテクニカルサポートに問い合わせてSDKパッケージを入手し、ローカルマシンで解凍します。 次の表に、sdk-Androidフォルダに含まれるファイルを示します。

ファイル名説明
SecurityGuardSDK-xxx.aar主なフレームワーク。
AVMPSDK-xxx.aar仮想マシンエンジンのプラグイン。
SecurityBodySDK-xxx.aarボット認識プラグイン。
yw_1222_0335_mwua.jpg仮想マシンの構成ファイル。

Androidプロジェクトの設定

Androidプロジェクトの設定
  1. 解凍されたSDKパッケージからAndroid StudioにAARファイルをインポートします。 すべてのAARファイルをsdk-AndroidフォルダからAndroidアプリケーションプロジェクトのlibsディレクトリにコピーします。
    説明 現在のプロジェクトにlibsディレクトリが存在しない場合は、指定したパスにlibsという名前のフォルダを手動で作成します。
  2. 設定を変更します。 プロジェクトのbuild.gradleファイルを開き、次のように設定を変更します。
    • 依存関係を検索するためのソースとしてlibsディレクトリを追加します。
      repositories{
         flatDir {
           dirs 'libs'
         }
      }
    • コンパイル依存関係を追加します。
      説明 この例のAARファイルのバージョンは、ダウンロードしたファイルのバージョンとは異なる場合があります。
      dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile ('com.android.support:appcompat-v7:23.0.0')
        compile (name:'AVMPSDK-external-release-xxx', ext:'aar')
        compile (name:'SecurityBodySDK-external-release-xxx', ext:'aar')
        コンパイル (名前: 'SecurityGuardSDK-external-release-xxx' 、ext:'aar')
      }
  3. 解凍されたSDKパッケージからJPG設定ファイルをdrawableディレクトリに追加します。 sdk-Androidフォルダ内のyw_1222_0335_mwua.jpg設定ファイルをAndroidアプリケーションプロジェクトのdrawableディレクトリにコピーします。
    説明 プロジェクトにdrawableディレクトリが存在しない場合は、指定したパスにdrawableという名前のフォルダを作成します。
  4. SOファイルが必要なため、冗長なアプリケーションバイナリインターフェイス (ABI) を削除します。 現在、Anti-Bot SDKは、armeabi、armeabi-v7a、およびarm64-v8aのためのSOファイルのみを提供しています。
    警告 したがって、冗長なABIを除外する必要があります。 そうしないと、アプリケーションがクラッシュする可能性があります。
    1. Androidアプリケーションプロジェクトのlibsディレクトリで、armeabiarmeabi-v7aarm64-v8a以外のすべてのCPUアーキテクチャファイル (x86x86_64mipsmips64など) を削除します。 armeabiarmeabi-v7a、およびarm64-v8aフォルダのみを保持します。
    2. 次のサンプルコードに示すように、アプリケーションプロジェクトのbuild.gradle構成ファイルにフィルタールールを追加します。 abiFiltersで指定されたアーキテクチャは、Androidアプリケーションパッケージ (APK) ファイルに含まれています。
      説明 この例では、abiFiltersはarmeabiアーキテクチャのみを指定します。 必要に応じて、armeabi-v7aおよびarm64-v8アーキテクチャを指定することもできます。
      defaultConfig {
        applicationId "com.xx.yy"
        minSdkVersion xx
        targetSdkVersion xx
        versionCode xx
        versionName "x.x.x"
        ndk {
          abiFilters "armeabi"
          // abiFilters "armeabi-v7a"
          // abiFilters "arm64-v8a"
        }
      }
      説明 armeabiアーキテクチャのSOファイルのみを保持する場合、互換性に影響を与えることなく、アプリケーションのサイズを大幅に縮小できます。
  5. アプリケーションに権限を付与します。
    • Android StudioプロジェクトとAARファイルを使用してSDKを統合する場合、必要な権限はAARファイルですでに指定されています。 プロジェクト内のアプリケーションに権限を付与する必要はありません。
    • Eclipseプロジェクトを使用する場合は、AndroidMenifest.xmlファイルに次の権限を追加する必要があります。
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  6. ProGuard設定を追加します。
    説明 ProGuardを使用してコードを難読化する必要がある場合は、ProGuard設定を追加する必要があります。 Android StudioとEclipseでProGuardを設定する方法は異なります。
    • Android Studio
      proguardFilesパラメーターを設定し、minifyEnabledパラメーターがbuild.gradleファイルでtrueに設定されている場合、proguard-rules.proファイルを使用してコードを難読化します。proguardFiles
    • Eclipse
      ProGuard. config=proguard.cfgステートメントをproject.propertiesファイルに追加するなど、project.propertiesファイルでproguardを構成した場合、ProGuardを使用してコードを難読化します。
      説明 難読化設定は、proguard.cfgファイルで指定します。

    保持ルールの追加

    特定のクラスが難読化されないことを保証するには、ProGuard構成ファイルに次のルールを追加する必要があります。
    -クラスcom.taobao.securityjniを保持します。**{*;}
    -クラスcom.taobao.wireless.securityをキープ **{*;}
    -クラスcom.ut.secbodyを保持します。**{*;}
    -クラスcom.taobao.dpをキープ **{*;}
    -クラスcom.alibaba.wireless.securityを保持します。 **{*;}

SDKを呼び出すCall the SDK

ステップ1: パッケージのインポート
com.alibaba.wireless.security.jaq.JAQExceptionをインポートします。com.alibaba.wireless.security.jaq.avmp.IJAQAVMPSignComponentをインポートします。com.alibaba.wireless.security.open.SecurityGuardManagerをインポートします。com.alibaba.wireless.security.open.avmp.IAVMPGenericComponentをインポートします。

ステップ2: SDKの初期化

エンドポイント: boolean initialize();

機能: SDKを初期化します。

パラメータ: なし。

応答: ブール値。 初期化が成功した場合、trueが返されます。 初期化が失敗した場合、falseが返されます。

サンプルコード
IJAQAVMPSignComponent jaqVMPComp = SecurityGuardManager.getInstance(getApplicationContext()).getInterface(IJAQAVMPSignComponent.class);
ブール結果=jaqVMPComp.initialize();

ステップ3: 署名要求

エンドポイント: byte[] avmpSign(int signType, byte[] input);

関数: Ali Virtual Machine Protect (AVMP) 手法を使用して入力データに署名し、署名文字列を返します。

Parameters
パラメーターデータ型必須/任意説明
signTypeint必須リクエストの署名に使用されるアルゴリズム。 値を3に設定します。
入力byte[]任意署名されるデータ。通常はリクエストボディ全体です。
説明 リクエストボディが空の場合 (POSTまたはGETリクエストボディが空の場合) 、nullまたは ".getBytes(" UTF-8 ") などのBytesパラメーターの値を入力します。

応答: byte[] データ型の署名文字列。

サンプルコード: クライアントがサーバーにデータを送信するときは、avmpSignメソッドを呼び出してリクエスト本文全体に署名する必要があります。 wToken署名文字列が返されます。
int VMP_SIGN_WITH_GENERAL_WUA2 = 3;
String request_body = "i am the request body, encrypted or not!";
byte[] result = jaqVMPComp.avmpSign(VMP_SIGN_WITH_GENERAL_WUA2, request_body.getBytes("UTF-8"));
String wToken = new String (結果、"UTF-8");
Log.d("wToken", wToken);

ステップ4: wTokenをプロトコルヘッダーに追加

wTokenフィールドの内容をHttpURLConnectionクラスのオブジェクトに追加します。

サンプルコード
String request_body = "i am the request body, encrypted or not!";
URL url=新しいURL (「http://www.aliyundoc.com」);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
// wToken infoをヘッダーに設定する
conn.setRequestProperty("wToken", wToken);
OutputStream os = conn.getOutputStream();
// リクエスト本文情報を設定する
byte[] requestBody = request_body.getBytes("UTF-8");
os.write(requestBody);
os.flush();
os.close();

ステップ5: データをサーバーに送信

変更されたプロトコルヘッダーを含むデータをアプリケーションのサーバーに送信します。 Anti-Bot Serviceはデータをキャプチャし、wTokenを解析してリスクを特定します。
警告 署名されたリクエスト本文は、クライアントから送信された元のリクエスト本文と同じである必要があります。 署名されたリクエストボディの文字列エンコード形式、スペース、特殊文字、およびパラメーターシーケンスは、クライアントから送信された元のリクエストボディのものと同じである必要があります。 そうでない場合、リクエストは署名検証に合格しません。

エラーコード

initializeメソッドとavmpSigniメソッドを呼び出すと、エラーが発生することがあります。 エラーが発生した場合、またはSDKが署名文字列の生成に失敗した場合は、キーワードSecExceptionを使用して、ログデータ内の関連情報を検索します。

次の表に、一般的なエラーコードを示します。

エラーコード説明
1901パラメーターが無効な場合に返されるエラーコード。 パラメーターを確認します。
1902イメージファイルが無効な場合に返されるエラーコード。 画像ファイルの取得に使用されるAPK署名は、アプリケーションの署名と同じではありません。 アプリケーションのAPKシグネチャを使用して、新しい画像を生成します。
1903イメージファイルの形式が無効な場合に返されるエラーコード。
1904イメージのバージョンをアップグレードします。 AVMP署名機能はv5イメージのみをサポートします。
1905指定されたイメージファイルが見つからない場合に返されるエラーコード。 イメージファイルがres\drawableディレクトリにあり、AVMPイメージがyw_1222_0335_mwua.jpgファイルにあることを確認してください。
1906イメージのAVMP署名に必要なバイトコードがないため、エラーコードが返されます。 イメージが無効かどうかを確認します。
1907AVMPの初期化に失敗した場合に返されるエラーコード。 しばらくしてから再試行します。
1910AVMPインスタンスが無効な場合に返されるエラーコード。 考えられる原因は次のとおりです。
  • InvokeAVMPメソッドは、AVMPインスタンスが破棄された後に呼び出されました。
  • イメージのバイトコードのバージョンがSDKと一致しません。
1911暗号化されたイメージのバイトコードに必要なエクスポート機能がない場合に返されるエラーコード。
1912システムがAVMPの呼び出しに失敗した場合に返されるエラーコード。 Alibaba Cloudテクニカルサポートにお問い合わせください。
1913AVMPインスタンスが破棄された後にInvokeAVMPメソッドが呼び出されたために返されるエラーコード。
1915AVMPインスタンスのメモリリソースが不足している場合に返されるエラーコード。 しばらくしてから再試行します。
1999不明なエラーが発生した場合に返されるエラーコード。 しばらくしてから再試行します。

統合を確認するVerify the integration

次の手順を実行して、Anti-Bot SDKがアプリケーションに正しく統合されていることを確認します。

  1. ファイル名の拡張子を変更して、パッケージ化されたAPKファイルをZIPファイルに変換し、ローカルマシンでファイルを解凍します。
  2. プロジェクトのlibsディレクトリに移動し、フォルダーにarmeabiarmeabi-v7a、およびarm64-v8aサブフォルダーのみが含まれていることを確認します。
    説明 他のアーキテクチャファイルが存在する場合は、削除します。 詳細については、「Androidプロジェクトの設定」をご参照ください。
  3. プロジェクトのres/drawableディレクトリに移動し、yw_1222_0335_mwua.jpgファイルが存在し、サイズが0でないことを確認します。
  4. ログを印刷し、avmpSignメソッドが呼び出された後に正しい署名情報が生成されることを確認します。
    説明 署名情報を生成できない場合は、エラーコードとトラブルシューティングの説明を参照してください。

よくある質問

shrinkResourcesをtrueに設定した後、キーイメージが正しく最適化されないのはなぜですか。

Android StudioでshrinkResourcesをtrueに設定すると、コードで参照されていないリソースファイルがプロジェクトのコンパイル中に最適化される場合があります。 shrinkResourcesをtrueに設定すると、Anti-Bot SDKのJPGファイルが期待どおりに機能しない場合があります。 パッケージ化されたAPK内のyw_1222_0335.jpg設定ファイルのサイズが0 KBの場合、画像ファイルが最適化されていることを示します。

ソリューション

  1. プロジェクトのresディレクトリにrawという名前のディレクトリを作成し、rawディレクトリにkeep.xmlという名前のファイルを作成します。
  2. 次のコンテンツをkeep.xmlファイルに追加します。
    <? xml version="1.0" encoding="utf-8"? >
    <resources xmlns:tools="http://schemas.android.com/tools"
    ツール: keep="@ drawable/yw_1222_0335.jpg,@ drawable/yw_1222_0335_mwua.jpg" />
  3. コンテンツを追加したら、プロジェクトAPKを再度コンパイルします。