加壳与反调试的工具链与取舍

逆向工程 · 2 分钟阅读· 99 次阅读

入口所在段同时可写与可执行,是自解压壳最直接的一个静态特征,正常产物很少这样,见到值得多看一眼

工具解决的是「看得见」的问题,判断还是要靠人。

先说结论

工具要少而熟。

  • 静态:看结构
  • 动态:看数据
  • 辅助:做批量
  • 先用熟的描述问题
  • 效率来自脚本

三类工具

按这个分工选:

节区熵接近 8 说明内容接近随机,通常是压缩段或加密段,看直方图比看单个字节有效,单点取样会误判。

类别 代表 强项
静态 反汇编器/反编译器 结构与逻辑
动态 调试器 真实数据与分支
辅助 脚本与插件 批量与自动化

怎么选

入口所在段同时可写与可执行,是自解压壳最直接的一个静态特征,正常产物很少这样,见到值得多看一眼。

先用最熟的那个把问题描述清楚,再换工具验证。

几个具体经验

下面这些是相对确定的细节:

  • 反调试检测集中在 ptrace 附加、TracerPid 字段与时间差这三类

加壳与反调试的工具链与取舍

别做的事

看到熵高就断定加壳,其实是资源或压缩数据。

换工具不能代替思考,只会让你更晚发现问题。

一句提醒

壳只是提高了观察成本,真正难的是壳里面的逻辑本身。

工具链稳定下来之后,效率提升来自脚本,不来自新工具。

还有几处容易忽略的

这些细节不影响入门,但影响你判断的准确度。

  • UPX 加壳的样本可以用官方工具直接脱,改造过的壳则会校验自身完整性,必须走内存 dump,脱完还要修导入表
  • 内存 dump 出来的镜像缺少节区对齐,导入表通常需要手工修复
  • 脱壳的终点不是程序能跑起来,而是静态分析工具能重建出调用图,导入表与重定位都要补齐
  • dump 完直接扔进反编译器,导入表没修全是乱码
  • 在生产机器上跑样本,没做网络与文件隔离

工具是手脚,判断是脑子。

评论 (3)

路
路人甲

终于有人讲清楚「为什么」而不是只给命令。

阿
阿哲

审计检查点可以直接做成 checklist。

南
南风

补一句:修完要回归,很多人修一半。

发表评论

验证码

提交后需站长审核,通过后才会显示。