MASTG-TEST-0051 難読化のテスト (Testing Obfuscation)

概要

静的解析

APK を逆コンパイル (Java コードの逆コンパイル (Decompiling Java Code)) し、レビュー (逆コンパイルされた Java コードのレビュー (Reviewing Decompiled Java Code)) して、コードベースが難読化されているかどうかを判断します。

以下に難読化されたコードブロックの例を示します。

package com.a.a.a;

import com.a.a.b.a;
import java.util.List;

class a$b
  extends a
{
  public a$b(List paramList)
  {
    super(paramList);
  }

  public boolean areAllItemsEnabled()
  {
    return true;
  }

  public boolean isEnabled(int paramInt)
  {
    return true;
  }
}

以下にいくつか考察を示します。

  • クラス名、メソッド名、変数名など、意味のある識別子が破棄されている可能性があります。

  • 文字列リソースとバイナリ内の文字列が暗号化されている可能性があります。

  • 保護される機能に関連するコードとデータが暗号化、パック化、あるいはその他の方法で隠されている可能性があります。

ネイティブコードの場合:

これらの技法のいくつかは Gautam Arvind によるブログ記事 "Security hardening of Android native code" や Eduardo Novella によるプレゼンテーション "APKiD: Fast Identification of AppShielding Products" で説明および分析されています。

より詳細な評価を行うには、関連する脅威と使用される難読化手法を詳細に理解する必要があります。 APKiD などのツールでは、難読化ツール、パッカー、アンチデバッグ対策など、ターゲットアプリにどのような技法が使われたかについての追加情報を得られることがあります。

動的解析

APKiD を使用して、アプリが難読化されているかどうかを検出できます。

Android UnCrackable L4 を使用した例:

apkid mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk
[+] APKiD 2.1.2 :: from RedNaga :: rednaga.io
[*] mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk!classes.dex
 |-> anti_vm : Build.TAGS check, possible ro.secure check
 |-> compiler : r8
 |-> obfuscator : unreadable field names, unreadable method names

この場合、アプリには読み取り不可のフィールド名やメソッド名などがあることを検出しています。

Last updated

Was this helpful?