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:从静态定位到运行时恢复,谁留下的稳定入口更少、完整代码暴露的窗口更短、篡改后触发的校验更完整。
  • 说到底,判断加固强不强,判的是把它逆到能用、对方要卡在哪、卡多久。静态那三样只是第一轮筛查,能不能延续到加载阶段才是分水岭。
相关推荐
m0_715674431 小时前
可视化易用·低误报率·跨区域部署:知源-AI数据分类分级系统在金融行业的落地实践
网络·安全·网络安全
国科安芯1 小时前
四重证据,一条逻辑链:商业航天级微控制器MCU抗辐射验证方法学综述——以国科安芯AS32S601为例
人工智能·单片机·嵌入式硬件·mcu·安全·抗辐射
dk_tjy1 小时前
AI驱动的自动化攻击背景下:企业端点安全体系的技术架构与建设路径
网络·人工智能·安全·自动化·终端安全管理·数据防泄漏
梦想出海-Phoebe5 小时前
AI Agent能实现自主复制吗?Anthropic研究揭示模型部署与IoT设备安全问题
人工智能·物联网·安全
hz567898 小时前
本地部署视频会议系统软件功能有哪些?会议预约、权限分配与协作能力详解
安全·云计算·实时音视频·信息与通信·远程工作
山东科恩光电8 小时前
安全触边电阻变化感应机制与工业自动化设备防夹伤配置实操指南
安全
shiyi.十一9 小时前
【CISP教材】第9知识域:计算环境安全
网络·安全·cisp
YFJ_mily9 小时前
【10-12月优质学术会议合集】会议覆盖人工智能、大数据、高端装备、软件与网络安全 、计算机视觉技术等热门方向
算法·安全·web安全·网络安全·软件·rdlink研发家
竣达技术10 小时前
Modbus 转 SNMP 协议转换器|自定义协议 + SNMP TRAP 主动上报
运维·服务器·网络·数据库·安全
F&C嘉准传感器10 小时前
国产接近FSCU1808全密封接近开关:CNC油污工况稳定检测,撞机事故减少
人工智能·安全·目标检测·自动化