SO 加固强度自查 Checklist:静态、加载链、运行时看哪几项

判断一个 SO 加固强不强,别停在"符号清没清、字符串搜不搜得到"。一句话先摆这儿:静态只量"读代码"的门槛,加载链才决定"dump"的成本。 下面按三组过,能自查也能拿去比两个方案。

一、静态:看信息还剩多少

  • ☐ ELF 结构 :readelf -S / readelf -l ------ .text、.rodata 是否还在常规位置;e_shoff 是否被清零(清了 IDA 只能按段加载);某个可加载段 p_filesz 和 p_memsz 差得大、又不像 .bss 零填充(可能是运行时才填的载荷);业务代码是否被搬进附加载荷。
  • ☐ 熵 :按块算(binwalk -E 看曲线,或每 4KB 算 Shannon 熵)。长期贴 8 bits/byte = 压缩或加密,注意区分不了两者。
  • ☐ 符号 :.symtab 常被 strip,.dynsym 删不干净,readelf --dyn-syms 捞一批。看导出函数、JNI、RTTI(_ZTV / _ZTS,nm -C 能还原类名)还剩多少;JNI 是静态导出 Java_包名_方法名,还是 RegisterNatives 动态注册(后者要运行时 hook 才能对上映射)。
  • ☐ 字符串 :接口地址、root / frida / TracerPid 有没有明文;栈上拼接和加密表 strings 扫不到,上 floss。

二、加载链:看代码怎么进内存(决定结论)

  • ☐ Frida 挂 dlopen / android_dlopen_ext 看加载时机;挂 mprotect 盯段权限翻到 PROT_EXEC。
  • ☐ /proc/<pid>/maps 看有没有匿名 rwx 段(ART 的 JIT 也会 rw-→r-x,结合调用栈判断)。
  • ☐ 运行时内存 dump 出来,和静态文件按段 diff,差异区 = 运行后才出现的真实代码;dump 缺节区头,用 SoFixer 按段重建再进 IDA。
  • ☐ 恢复形态:一次性全解还是分段按需;脱壳点固不固定(固定 = 可脚本化批量脱);真 VM(dispatcher / handler / 字节码)还是只是控制流平坦化。

三、运行时:防不防你动手

  • ☐ .text 映射后有没有自校验(CRC / 哈希);inline hook 检测(函数头几字节在盘 vs 内存);GOT / PLT 有没有被改写。
  • ☐ 反调试(TracerPid 非零、ptrace 占位)、反 hook(/proc/self/maps 找 frida / gum 特征)是否绑在恢复过程上------刚解密就自校验,比事后补检查难绕。

一段可复现的观察脚本

javascript 复制代码
// SO 何时加载、加载后哪段内存翻成可执行------多半是载荷刚解密的落点
["dlopen", "android_dlopen_ext"].forEach(n =>
  Interceptor.attach(Module.findExportByName(null, n), {
    onEnter(a) { this.path = a[0].readCString(); },
    onLeave() { console.log("load:", this.path); }
  }));

Interceptor.attach(Module.findExportByName(null, "mprotect"), {
  onEnter(a) {
    if (a[2].toInt32() & 4)              // PROT_EXEC
      console.log("+X @", a[0], "len", a[1].toInt32());
  }
});

拆成四条轴对照

别打一个笼统总分,按四轴分别看:

维度 弱的表现 强的表现
结构暴露 .text 完整、可正常反编译 空壳 + e_shoff 清零、有附加载荷
语义暴露 导出 / JNI / RTTI 大量明文 符号清干净、RegisterNatives 动态注册
代码恢复 一次性全解、脱壳点固定 分段按需、OEP 混淆 / 真 VM
加载链保护 无自校验、无反调试反 hook .text 自校验 + 反调试 / hook 绑恢复过程

几条建议

  • 别拿"符号干不干净"当唯一标尺,四条轴分开看才不容易误判。
  • 比较两个 SO:从静态定位到运行时恢复,谁留下的稳定入口更少、完整代码暴露的窗口更短、篡改后触发的校验更完整。
  • 说到底,判断加固强不强,判的是把它逆到能用、对方要卡在哪、卡多久。静态那三样只是第一轮筛查,能不能延续到加载阶段才是分水岭。
相关推荐
山东科恩光电12 小时前
安全地毯压力感应防护在工厂自动化区域的实时监测与停机联动应用
安全
Flynt1 天前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
国科安芯1 天前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
SoFarAway1 天前
拆解华为一碰传
华为·逆向
国科安芯1 天前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
7177771 天前
2026 供应链安全用什么:SBOM、SLSA 与制品库的落地选型
安全·gitee
QXWZ_IA1 天前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
不庸.1 天前
WPScan 实战入门:从 Docker 靶场到弱密码爆破
运维·安全·web安全·docker·容器·安全性测试·wpscan
qq_452396231 天前
第十篇:《Kafka 安全加固:SASL、SSL、ACL 与多租户隔离》
安全·kafka·ssl
ppo_wu2 天前
解决夸克网盘自动修改PDF打开方式的方法
经验分享·安全·网络安全