Skip to content

DEX 加固规则 ​

packer29 条

apkid/rules/dex/packers.yara — 29 条规则。DEX 层加固规则匹配 壳代码注入的 stub 类名、opcode 序列、libc 字符串引用,从字节码层确认加固方案。比 APK 层路径匹配更可靠——厂商改名 so 库路径没用,壳注入的 stub 类名和 opcode 序列难改。

🎯 检测原理 ​

加固方案运行时解密真实 dex 前,壳代码自己就是个 dex——里面有 stub Application 类(如 Lcom/stub/StubApp;)、解密用的 opcode 序列、libc 字符串引用。APKiD 扫描 APK 时会递归进 classes.dex,这些字节码特征都会被命中。

📋 规则清单 ​

🛡️ 通用加固壳 ​

规则tag说明
pangxie_dexpackerPangXie — Lcom/merry/wapper/WapperApplication; 类名
medusah_dexpackerMedusah — Lcom/seworks/medusah 类名
medusah_appsolid_dexpackerMedusah (AppSolid) — Lweb/apache/sax/app; + MainActivity
apkguard_dexpackerAPKGuard — 完整 attachBaseContext opcode 序列(Base64 解 zip + DexClassLoader)
cryptoshell_dexpackerCryptoShell — 类似 apkguard 的 opcode 序列(排除 apkguard_dex)
jar_pack01packerjar_pack01 — .onCreate/.jar//data/data 字节串组合
gaoxorpackerGaoXor — attachBaseContext opcode + XOR 解密密钥序列 + writedDexFile
appsealing_loader_1_2_2packerAppSealing Loader v1.2.2 — AppSealingLoader...v1.2.2 正则 + 类名
tencentpackerMobile Tencent Protect — libshella/b/c.so + Lcom/tencent/StubShell/TxAppEntry;
crazy_dog_wrapperpackerCrazy Dog Wrapper — libhdog.so + Lcom/vdog/VDogApplication;
jsonpackerpackerJsonPacker — 3 种 XOR 解密 algo + DexClassLoader newInstance opcode
multidexpackerpackerMultidexPacker — multidex 反混淆 opcode + dex 解密写入 opcode
appguard_dexpackerAppGuard — Lcom/inca/security/IIIiiiiIii; 混淆类名 + JNISoxProxy
custom_multidexpackerCustom Multidex — AES Cipher 加密 opcode + Unicode 类名
custom_flutterpackerCustom Flutter — attachBaseContext + AES/ECB/PKCS5Padding 加密 opcode
jiagu_kpackerJiagu K — Lvirbox/StubApp; + data_size+data_offset < file_size(尾部藏数据)

🛡️ 国内主流加固(DEX 层 stub 类名) ​

规则tag说明
jiagu_360_dexpackerQihoo 360 Jiagu (DEX-level) — Lcom/stub/StubApp; / Lcom/qihoo/util/StubApp;
tencent_legu_dexpackerTencent Legu (DEX-level) — Lcom/tencent/StubShell/TxAppEntry; / Lcom/tencent/legu/StubApp;
bangcle_dexpackerBangcle (DEX-level) — Lcom/bangcle/ShellApplication; / Lcom/secneo/apkwrapper/...
ijiami_dexpackerIjiami (DEX-level) — Lcom/ijiami/ShellApp; / Lcom/ijiami/ijiamiSec;
alibaba_jiagu_dexpackerAlibaba Jiagu (DEX-level) — Lcom/ali/mobisecenhance/StubApplication; / WindVM
tencent_mtp_dexpackerMobile Tencent Protect (DEX-level) — libshella.so + /mix.dex + StubShell/a
baidu_jiagu_dexpackerBaidu Jiagu (DEX-level) — Lcom/baidu/protect/ProtectApplication; / Boot
secneo_dexpackerSecNeo (DEX-level) — Lcom/secneo/core/Entry; / Hook / DataProvider

🛡️ 其它厂商(DEX 层) ​

规则tag说明
nesun_dexpackerNesun — zVersion/zprotect 字符串 + Lcom/nesun/stub/ZAP;
gpresto_dexpackerG-Presto (anti-cheat) — Lcom/bishopsoft/Presto/SDK/Presto; + 代码段
dingxiang_dexpackerDingXiang — StringEncryptUtils 类 + stub000/dsn0 字符串 + hash 类
kiwisec_dexpackerKiwiSec — Lcom/kiwisec/crash/CrashUtils; / StubApplication
manxi_secpackerManxi Security — Lcom/manxi/shell/Helper; / MXApplication

🔍 规则源码示例 ​

jiagu_360_dex — stub 类名字节序列 ​

yara
rule jiagu_360_dex : packer {
  strings:
    // Lcom/stub/StubApp; — classic 360 jiagu stub Application class
    $stub_app = {
      00 12 4C 63 6F 6D 2F 73 74 75 62 2F 53 74 75 62
      41 70 70 3B 00
    }
    // Lcom/qihoo/util/StubApp; — alternate 360 stub path
    $qihoo_stub = { ... }
    // Lcom/stub/StubXXXXApp; — newer versions with random suffix
    $stub_random = { 00 1E 4C 63 6F 6D 2F 73 74 75 62 2F 53 74 75 62 [8-16] 41 70 70 3B 00 }
    // com.stub — package string
    $pkg_stub = { 00 08 63 6F 6D 2E 73 74 75 62 00 }
  condition:
    is_dex and any of them
}

字节序列 00 12 4C 63 6F 6D 2F 73 74 75 62 2F 53 74 75 62 41 70 70 3B 00 解码后就是 Lcom/stub/StubApp;——360 加固的经典 stub Application 类名。00 12 是 DEX 字符串长度前缀(0x12 = 18 字符)。[8-16] 通配 newer 版本的随机后缀。

apkguard_dex — opcode 序列指纹 ​

apkguard_dex 匹配整个 attachBaseContext 方法的 opcode 序列:Base64 解码 → 写 zip 文件 → DexClassLoader 加载 → 反射调用 attachBaseContext。这种 opcode 级指纹极难伪造——改了逻辑就跑不起来。详见源码 apkid/rules/dex/packers.yara。

jiagu_k — 尾部藏数据检测 ​

yara
rule jiagu_k : packer {
  strings:
    $classNameString = { 00 10 4C 76 69 72 62 6F 78 2F 53 74 75 62 41 70 70 3B 00 } // Lvirbox/StubApp;
  condition:
    is_dex and all of them and (dex.header.data_size + dex.header.data_offset) < dex.header.file_size
}

(data_size + data_offset) < file_size——DEX 的 data 段之后还有数据,说明壳在 dex 尾部藏了加密的真实 dex。这是结构异常检测,与 DEX 异常结构 的 data_injected_after_map 异曲同工。

📊 finding 示例 ​

json
{
  "tag": "packer::jiagu_360_dex",
  "category": "packer",
  "source": "app.apk!classes.dex",
  "identifier": "jiagu_360_dex",
  "confidence": "high"
}

DEX 字节码级匹配 → 置信度 high。若同时 APK 层命中 jiagu_360_v5(source 带 !assets/libjiagu.so),同一方案两个角度都确认。

🧠 APK 层 vs DEX 层对照 ​

同一加固方案常在两层都有规则,互补确认:

方案APK 层规则DEX 层规则
360 加固jiagu_360_v4/v5/v6jiagu_360_dex
腾讯乐固tencent_legu/_2024tencent_legu_dex
梆梆bangcle/_secshellbangcle_dex
爱加密ijiami/_proijiami_dex
阿里alibaba/_jiagu_v2alibaba_jiagu_dex
SecNeosecneo_a/b/csecneo_dex

APK 层看 so 库路径(low 置信度),DEX 层看 stub 类名(high 置信度)。

📍 相关 ​

基于 GPL & Commercial 双重许可发布