Skip to content

APK 混淆器规则 ​

obfuscator5 条

apkid/rules/apk/obfuscators.yara — 5 条规则。obfuscator 类别检测 APK 层的混淆工具痕迹——这些工具不加密 dex,而是通过注入资产文件、配置或原生库来混淆/加密资源与代码。APK 层的混淆规则数量少,因为大部分混淆发生在 DEX 字节码层(详见 DEX 混淆器)。

🎯 检测原理 ​

APK 层混淆工具的特征是:在 assets/ 或 lib/ 下留下 独特的资产文件名或配置文件。规则匹配这些路径字符串。

📋 规则清单 ​

规则tag说明
arxan_guarditobfuscatorArxan GuardIT — guardit4j.fin 配置文件(>1 个)
gemalto_protectorobfuscatorGemalto — 多架构 libmedl.so
androidrepublicobfuscatorAndroidRepublic — assets/emt.androidrepublic/*.png
androidrepublic_vipobfuscatorAndroidRepublic VIP — assets/androidrepublic.org/*.png(正则)
obfuscapk_libencryptionobfuscatorObfuscapk - LibEncryption plugin — assets/lib.<arch>.<name>.so 正则

🔍 规则源码示例 ​

arxan_guardit — 配置文件足迹 ​

yara
rule arxan_guardit : obfuscator {
  meta:
    description = "Arxan GuardIT"
    url         = "https://www.arxan.com"
    sample      = "0da79f5202b4c29c4ef43f769d5703a3d4ebfa65e49ea967abb49965d4ac3ba4"
    author      = "Eduardo Novella"

  strings:
    // guardit4j.fin -- in root of apk; contains GuardIT version
    $cfg = { 00 67 75 61 72 64 69 74 34 6A 2E 66 69 6E }
  condition:
    is_apk and #cfg > 1
}

guardit4j.fin 是 Arxan GuardIT 的版本配置文件,#cfg > 1 要求出现多次(根目录 + 可能的副本),降低误报。

obfuscapk_libencryption — 架构正则 ​

yara
rule obfuscapk_libencryption : obfuscator {
  strings:
    $lib_arm = /assets\/lib\.arm(eabi|64)-v[0-9a-zA-Z]{2}\.[!-~]+\.so/
    $lib_x86 = /assets\/lib\.x86(_64)?\.[!-~]+\.so/
  condition:
    any of them and is_apk
}

Obfuscapk 的 LibEncryption 插件把加密后的 so 放在 assets/lib.<arch>.<name>.so 路径——用正则匹配架构前缀和任意库名。

📊 finding 示例 ​

json
{
  "tag": "obfuscator::arxan_guardit",
  "category": "obfuscator",
  "source": "app.apk!guardit4j.fin",
  "identifier": "arxan_guardit",
  "confidence": "low"
}

🧠 APK 层 vs DEX 层混淆 ​

APK 层混淆规则只看"有没有这个资产文件",而 DEX 层混淆规则(dex/obfuscators.yara,22 条)深入字节码看 字段/方法名是否被 Unicode 混淆、是否有字符串加密的 opcode 序列。DexGuard、StringFog、BlackObfuscator 这些主要在 DEX 层检测。

📍 相关 ​

基于 GPL & Commercial 双重许可发布