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:从静态定位到运行时恢复,谁留下的稳定入口更少、完整代码暴露的窗口更短、篡改后触发的校验更完整。
  • 说到底,判断加固强不强,判的是把它逆到能用、对方要卡在哪、卡多久。静态那三样只是第一轮筛查,能不能延续到加载阶段才是分水岭。
相关推荐
千舟软件3 小时前
【宿舍管理·产品功能】宿舍水电账单自动算
大数据·运维·科技·安全·业界资讯
honsor4 小时前
PoE温湿度传感器:一根网线供电+通信,即插即用,机房/配电室/仓库温湿度监测首选
运维·服务器·网络·数据库·人工智能·安全
林伽一4 小时前
智能体安全下沉芯片层,推理效率与资本重估同场角力|2026年09月30日
人工智能·科技·安全·ai
小蒋观天下4 小时前
两轮车检测AI摄像头行业竞争格局与企业突围路径解析
大数据·人工智能·安全·计算机视觉·ai大模型
数字供应链安全产品选型5 小时前
智能体安全选型建议:抛开功能清单,用运行时硬指标甄别真实防护能力
网络·安全
大棉花哥哥5 小时前
太空安全,正式上线 —— 博客改版与双专栏发布记
安全·网络安全·卫星安全
GEO实战经验分享7 小时前
LLM-First Search可复现性:环境、任务、版本与假设缺一不可
大数据·人工智能·安全·chatgpt
光依旧8 小时前
MCP实战手记(九):生产化MCP Server的6层安全防护
java·人工智能·spring boot·安全·网络安全·ai agent·mcp
其实防守也摸鱼17 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
泛联新安19 小时前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全