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:从静态定位到运行时恢复,谁留下的稳定入口更少、完整代码暴露的窗口更短、篡改后触发的校验更完整。
  • 说到底,判断加固强不强,判的是把它逆到能用、对方要卡在哪、卡多久。静态那三样只是第一轮筛查,能不能延续到加载阶段才是分水岭。
相关推荐
EasyGBS8 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
迪康Defender9 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
jimmyleeee10 小时前
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南
人工智能·深度学习·安全
AI行业应用研究11 小时前
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性
大数据·人工智能·安全·小程序·架构·pdf
Mr.朱鹏11 小时前
科技周报(第2026-10-10期):GPT6与安全
科技·安全·chatgpt
看着博客敲代码11 小时前
No space left on device:服务器被 SSH 爆破到日志写满的完整排查与止血
linux·运维·服务器·安全·ssh
anxiao_m12 小时前
内外网文件交换如何兼顾安全与效率?2026企业工具选型攻略
运维·服务器·安全
xixixi7777712 小时前
解读|华为星河 AI 三层安全围栏:以 AI 守护 AI,重构智算中心 Token 生产纵深防御体系
人工智能·安全·web安全·华为·提示词注入·agent安全·模型投毒
格物致胜工业数智技术12 小时前
皮尔磁纸板进料安全方案运维实录:O300传感器用了三年的个人体会
运维·安全
workflower13 小时前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机