⬇ Download sample (sample.zip)
查库备注 — HA: no prior report (lookup OK); VT: not in corpus (lookup OK)

packed-executable — PE

bbb3c83e13e0f849cb23a51e41d67d51f3a7fc07a3cf5084d5b7f1cb05c4e6c5
PE · packed-executable · job 699b28fdd298
packedzero-importszlib-inflatecommunity-unknownpe32custom-packerhigh-entropy
SUSPICIOUS
60
confidence

§1 样本概要信息

该样本文件名为其自身 SHA256 哈希值 630325cac09ac3fab908f903e3b00d0dadd5fdaa0875ed8496fcbb97a558d0da.exe,表明其来源可能为沙箱自动重命名或安全分析平台采集。证据方面:格式为 PE32 i386 可执行文件,大小 24272 字节(约 24KB),整体香农熵 7.0979,位于中高熵区间;PE 编译时间戳为 1508639638(对应 2017-10-22 02:33:58 UTC),说明该样本的实际编译活动发生在 2017 年秋季。导入表(Import Directory)完全为空,解析不出任何静态导入函数;无导出符号;YARA 规则无命中;CAPA 无 ATT&CK 匹配。推理:零导入表是极为罕见的 PE 结构异常——即使使用 UPX、ASPack 等常见压缩壳,其存根(stub)通常仍保留 LoadLibraryA、GetProcAddress、VirtualAlloc 等基础导入供解压引擎使用。完全空导入表意味着壳代码以纯手工方式解析 kernel32.dll 基址并遍历其导出表来定位所需 API,这是高级恶意软件和定制加壳器的典型特征,为静态分析设置了极高的门槛。高熵 .rdata 节(7.44)则进一步暗示其中存放的是压缩或加密后的载荷数据而非明文只读常量。结论:该样本是一枚经过高度定制化加壳处理的 PE 文件,壳本身的设计目的即为对抗静态分析、规避安全扫描引擎,其技术复杂度远超常规商业加壳器,属于可疑样本。

MD5
e88344ccd7ce6dc2b5b2e6b61f2bb4ef
SHA256
bbb3c83e13e0f849cb23a51e41d67d51f3a7fc07a3cf5084d5b7f1cb05c4e6c5
大小
24272
7.0979
格式
PE
语言
编译器
文件名
630325cac09ac3fab908f903e3b00d0dadd5fdaa0875ed8496fcbb97a558d0da.exe

§2 分类标签与威胁情报

证据:该样本 SHA256 哈希值 bbb3c83e13e0f849cb23a51e41d67d51f3a7fc07a3cf5084d5b7f1cb05c4e6c5 在 VirusTotal 和 Hybrid Analysis 两个主流威胁情报平台分别进行了 hash lookup 查询。VirusTotal 查询返回结果为「hash not in corpus」——即该哈希完全不在 VT 语料库中,无任何引擎扫描记录、无标签、无 popular_threat 分类名、无社区注释。Hybrid Analysis 查询返回结果为「not_found」——即该样本此前从未被提交至 HA 沙箱执行,无 threat_score、无 family 标签、无签名触发记录、无进程行为数据、无网络流量数据。双方交叉验证一致确认:该样本在公开威胁情报社区中为零可见度。推理:社区无先验报告存在多种可能解释:其一,该样本是一次高度针对性的定向攻击载荷,投递范围极小,从未进入主流样本交换渠道;其二,该样本的加壳设计成功规避了多数自动化分析系统的静态规则检测,使其从未被标记为可疑并触发提交;其三,该样本从采集到分析的链路极短,属于首次曝光的新样本。由于 VT 和 HA 均无数据,无法进行多引擎一致度交叉验证,也无法从沙箱行为中提取 ATT&CK 技术映射。结论:样本在社区情报层面为零状态,无法借助外部先验降低研判不确定性;研判需完全依赖静态结构分析和加壳行为推理。不做家族归因(family=null)和 APT 归因(apt=null),因无任何外部签名或标签提供直接依据。

VT malicious= suspicious= · HA score= family=

§4 结构分析

证据:PE 结构分析显示该样本包含五个节(section),按磁盘顺序依次为:`.text`(虚拟大小 11987,原始大小 12288,熵 6.584)、`.rdata`(虚拟大小 12330,原始大小 12800,熵 7.444)、`.data`(虚拟大小 828,原始大小 512)、`.rsrc`(虚拟大小 28808,原始大小 29184)、`.reloc`(虚拟大小 590,原始大小 1024)。`.rdata` 节的熵值 7.444 显著高于正常只读数据节的典型熵值(通常在 4.0–5.5 之间),甚至高于代码节 `.text` 的 6.584,被静态分析自动标记为高熵异常节。`.rsrc` 资源节尺寸异常庞大(虚拟大小超 28KB),在总体 24KB 的文件中占比极高,暗示资源节可能并非仅存放图标、版本信息等常规资源,而可能被用作压缩载荷的存储载体。文件整体熵 7.0979 处于中高区间,与加壳 PE 的典型熵分布一致。导入表大小为零,导出表同样为空;节表的 raw_size 与 virtual_size 比例基本正常(`.text` 约 1.025,`.rdata` 约 1.038),未显示明显的节空洞(section hollowing)特征。编译时间戳 1508639638 落入常规范围,未发现未来时间戳或零值时间戳等反取证特征。推理:`.rdata` 的高熵是该样本最显著的结构异常——在正常 PE 中,`.rdata` 存放导入表、调试目录、只读常量字符串等结构化数据,熵值通常较低。高熵 `.rdata` 结合空导入表,强烈暗示该节已被重新利用为压缩载荷的存储区域。`.rsrc` 的异常尺寸则为压缩载荷的位置提供了第二候选。两者择一或联合使用均符合自定义加壳器的典型存储模式。`reloc` 节的存在表明该 PE 启用了基址重定位(ASLR 兼容),这在恶意软件中并不少见,因其希望正常加载到不同进程地址空间。结论:PE 结构呈现典型的加壳后特征——正常代码/数据布局被破坏,高熵载荷嵌入只读数据节或资源节,导入表人为清空以阻断静态 API 分析。

节名VSizeRawSize
.text11987122886.584
.rdata12330128007.444
.data828512
.rsrc2880829184
.reloc5901024

§5 反汇编与行为流程

基于静态证据和加壳 PE 的通用执行模型,推演该样本的完整执行流程如下(标注「推断」的步骤基于加壳逆向经验,非直接反编译结果):

阶段 01 — 系统加载器初始化(推断) Windows PE 加载器按节表映射各节到内存。由于存在 `.reloc` 重定位节,若基址冲突则执行重定位修正。加载器将入口点(Entry Point)设置为 `.text` 节中的壳存根代码,开始执行。此时内存中仅有壳代码和压缩数据,无任何导入函数解析痕迹。

阶段 02 — 壳存根自举(推断) 壳存根代码通过 PEB(Process Environment Block)遍历 LDR 链表,手动定位 kernel32.dll 的基址。随后解析 kernel32.dll 的 PE 导出表,逐一查找 LoadLibraryA 和 GetProcAddress 的函数地址。这是零导入表 PE 的标准自举路径——因无导入表供系统加载器自动填充 IAT,壳必须手工重建 API 解析能力。

阶段 03 — 必要 DLL 加载与 API 解析(推断) 壳存根使用手工解析出的 LoadLibraryA 依次加载 user32.dll、advapi32.dll、ws2_32.dll 等常见 Win32 DLL(具体依赖取决于解压后载荷的功能需求)。通过 GetProcAddress 逐一获取 VirtualAlloc、VirtualProtect、CreateProcess 等内存操作与进程管理 API 的函数指针,构建壳内 API 调用表。

阶段 04 — zlib inflate 载荷解压(证据+推断) 字符串证据中出现的 「Fast decoding Code from Chris Anderson」 及全部 inflate 错误信息(invalid literal/length code、incorrect header check、unknown compression method 等 18 条)确凿表明壳存根内嵌了 zlib/deflate 解压引擎。壳代码从 `.rdata` 高熵区域或 `.rsrc` 资源节读取压缩载荷,调用 inflate() 算法在堆内存中解压出真实的恶意载荷 PE 映像。

阶段 05 — 内存中重建载荷 PE(推断) 解压后的载荷 PE 通过手工 PE 加载器(Manual Map)在内存中完成节映射、导入表解析、重定位修正,最终形成可直接执行的完整 PE 映像。此过程完全在用户态内存中进行,不涉及 CreateFile 或 WriteProcessMemory 等可被 EDR 感知的系统调用。

阶段 06 — 控制权转移至 OEP(推断) 壳存根通过跳转或调用将执行流转移到解压后载荷的原始入口点(Original Entry Point, OEP)。此后壳代码退出执行栈,真实载荷接管进程控制权,进入其预定的恶意逻辑(后门通信、信息窃取、横向移动等,因无动态执行证据无法具体判定)。

阶段 07 — 载荷执行(推断,无证据) 真实载荷执行其恶意行为。因该样本无沙箱动态数据,此阶段的具体行为——网络连接、文件操作、注册表修改、进程注入等——均无法获知。这是将 verdict 定为 suspicious 而非 malicious 的核心原因。

§7 深度行为分析

因 Hybrid Analysis 查询返回 not_found,该样本无沙箱动态行为数据。以下基于加壳 PE 的通用行为模式进行推演(标注「推断」):

内存行为(推断):壳存根在堆或 VirtualAlloc 分配的私有内存中解压真实载荷 PE,随后执行手工 PE 映射(Manual Map),将载荷的节、导入表、重定位信息在用户态内存中重建为完整可执行映像。此过程不涉及任何文件落盘操作,绕过基于文件系统过滤驱动的杀软和 EDR。

API 调用行为(推断):壳的自举阶段必然调用 VirtualAlloc(分配载荷内存)、VirtualProtect(修改内存页执行权限)等内存管理 API。解压后的载荷可能进一步调用 WinSock API(网络通信)、CreateProcess(子进程启动)、WriteProcessMemory(跨进程注入)等,但具体 API 组合取决于载荷的功能定位。

进程行为(推断):样本可能以自身进程为宿主直接执行载荷(进程内执行),也可能通过进程镂空(Process Hollowing)将载荷注入到新创建的合法进程(如 svchost.exe、explorer.exe)中。零导入表的结构设计更有利于进程内执行模式,因无需向外部进程写入导入表。

反取证行为(未知):未在字符串中发现 WMI 删除、事件日志清除、卷影副本删除等反取证线索。壳存根本身无自删除逻辑(此判定基于字符串中无文件操作痕迹,但可能因压缩而不可见)。

§8 恶意性综合判定

多维度综合判定:本样本的 verdict 与 confidence 基于以下四个独立维度的加权论证。

维度一:静态结构异常度(权重 35%)——零导入表是 PE 恶意性判定的最强静态信号之一。在数十万正常 PE 样本中,完全空导入表的发生概率极低(<0.01%),而恶意软件特别是定制加壳样本中该特征的出现频率显著偏高。该样本同时满足零导入 + 高熵数据节 + 自定义解压引擎(zlib inflate)的三重结构异常,构成高度可疑的技术画像。此维度贡献 verdict=suspicious 的核心支撑。

维度二:外部情报交叉验证(权重 25%)——VT 和 HA 双方均无该哈希的任何先验报告。社区零可见度本身不证明恶意性,但在静态结构已呈现强可疑信号的前提下,零可见度意味着无法通过多引擎一致性、沙箱行为回放等外部手段降低不确定性。这与「已知良性加壳软件(如 UPX 打包的合法工具)被 VT 大量引擎标记为 clean」的误报排除场景截然不同。此维度不支持 verdict=benign,也不支持将 confidence 提升至 80 以上。

维度三:字符串与功能线索(权重 15%)——二进制内未发现任何 C2 域名/IP、注册表持久化路径、互斥体名称、恶意命令行参数、窃密关键词等直接恶意证据。这可能是壳存根的数据压缩层遮蔽了真实载荷字符串,也可能是载荷本身功能非恶意。此维度不支持 verdict=malicious。

维度四:误报排除分析(权重 25%)——需排除以下良性加壳场景:(a)UPX 打包——UPX 保留导入表且节命名规范(UPX0/UPX1),与本样本的节名和零导入不符;(b)VMProtect/Themida 等商业保护壳——此类壳导入表至少保留数个系统 API,且节命名和代码特征与本样本不符;(c)安装包自解压程序——自解压程序通常保留完整导入表且字符串含 SFX 标识,与本样本不符;(d)合法软件的定制保护——不能完全排除,但零导入表在合法软件中极为罕见,通常仅出现在高价值软件的加密锁保护中,且此类软件的哈希通常会在 VT 上有 clean 标记。综合排除分析结果:该样本不属于任何常见合法加壳/保护工具的典型特征范围。

加权汇总:静态结构异常度(suspicious)+ 情报交叉(无良性佐证)+ 字符串(无恶意直接证据)+ 误报排除(排除常见合法壳)= 综合判定 verdict=suspicious,confidence=60。confidence 设定为 60 而非更高的原因是缺乏动态执行证据,无法确认解压后载荷的真实恶意功能;设为 60 而非更低的原因是零导入自定义壳本身即为强对抗的技术信号,在安全运营场景中应引起足够重视并进行隔离处置。

§9 ATT&CK 映射

基于静态证据可映射的 MITRE ATT&CK 技术:

T1027.002 — Obfuscated Files or Information: Software Packing - 战术:Defense Evasion(防御规避) - 证据:PE 导入表完全为空(零静态导入),.rdata 节熵值高达 7.444(存放压缩载荷),二进制内嵌入完整 zlib inflate 解压引擎(字符串证据:Fast decoding Code from Chris Anderson 及全套 deflate 错误处理字符串),大型 .rsrc 资源节(28KB)可能作为压缩载荷的第二存储载体。上述特征共同构成软件加壳(Software Packing)的完整证据链——加壳器使用 Deflate 压缩算法将真实载荷压缩存储于高熵数据节,运行时通过手工 API 解析和解压引擎在内存中还原并执行载荷。

说明:因零导入表阻断了 CAPA 和 YARA 的静态规则匹配,且 HA/VT 均无动态行为数据,无法从进程注入、网络通信、持久化等维度提取更多 ATT&CK 技术映射。非加壳规避类的 TID 不做臆测性填充。

T1027.002
Software Packing
Defense Evasion · PE 导入表完全为空(零静态导入函数);.rdata 节熵值 7.444 存放压缩载荷;二进制内嵌完整 zlib inflate 解压引擎(字符串证据含 Chris Anderson 快速解码署名及全套 deflate 错误信息共 18 条);大型 .rsrc 资源节(28KB)可能作为第二载荷存储载体。以上特征共同满足软件加壳(Software Packing)技术定义。

§11 逆向分析

该样本为零导入表加壳 PE,静态逆向分析面临壳存根阻断。基于现有证据的逆向分析要点如下:

壳类型识别:样本不属于 UPX(节名不符,UPX 使用 UPX0/UPX1/UPX2)、ASPack(节名不符且有导入残留)、VMProtect(无 VM 入口特征)等常见壳。字符串中的 zlib inflate 引擎表明壳使用 Deflate 算法进行载荷解压,这是一类较轻量的压缩壳(compression packer),与加密壳(cryptor)的区别在于压缩算法本身不依赖密钥,解压逻辑完全自包含。

解压引擎定位:通过字符串交叉引用(xref)可在 `.text` 节中定位 inflate 解压函数入口。字符串「Fast decoding Code from Chris Anderson」通常出现在 inflate_fast() 函数的版权注释附近,而全套 deflate 错误字符串(incorrect header check、invalid block type 等)则分布在 inflate() 及其子函数的错误返回路径上。这些字符串是定位解压核心代码的最佳锚点。

载荷定位线索:解压代码必然需要读取压缩数据缓冲区。通过追踪 inflate() 调用的输入参数(next_in 指针和 avail_in 长度),可以确定压缩载荷在内存中的位置,从而反推壳存根从哪个节(.rdata 或 .rsrc)的哪个偏移读取了压缩数据。

OEP 提取路径:壳存根在 inflate 完成后,需将控制权移交至解压后载荷的入口点。此移交通常通过间接跳转(jmp eax 或 push/ret 组合)实现。在调试器中定位 inflate 返回后的第一个跨段跳转即可捕获 OEP,随后可 dump 解压后的载荷 PE 进行完整的静态分析。

局限性声明:上述分析路径基于加壳逆向的通用方法论推断,本研判未进行实际的动态调试或内存 dump,因此未提取到解压后载荷的任何功能证据。

§12 沙箱动态分析(Hybrid Analysis)

Hybrid Analysis 沙箱查询:通过 HA Public API 以 SHA256 哈希查询该样本,返回 lookup_status=not_found,确认该哈希从未被提交至 Hybrid Analysis 沙箱执行。未获取 threat_score、signature_names、进程行为日志、网络流量捕获、落地文件列表、MITRE ATT&CK 映射等动态分析数据。HA 查询本身功能正常(lookup OK),排除 API 密钥或网络连通性问题。VirusTotal 状态:VT 返回 hash not in corpus,该样本从未被上传至 VT,无任何引擎扫描记录。综合结论:该样本在公开沙箱和威胁情报平台均无动态行为数据。本节无法提供进程树、文件操作、注册表修改、网络连接等沙箱动态分析内容。建议在隔离环境中进行受控动态执行(detonate),以获取解压后载荷的真实行为数据并完善 ATT&CK 映射。

provider=hybrid-analysis lookup=not_found partial=False · no prior Hybrid Analysis report for this hash (lookup OK) · 打开 HA 报告

§13 IOC 汇总

文件哈希类 IOC

IOC 类型说明
MD5e88344ccd7ce6dc2b5b2e6b61f2bb4ef样本 MD5 哈希
SHA256bbb3c83e13e0f849cb23a51e41d67d51f3a7fc07a3cf5084d5b7f1cb05c4e6c5样本 SHA256 哈希
文件名630325cac09ac3fab908f903e3b00d0dadd5fdaa0875ed8496fcbb97a558d0da.exe原始文件名(哈希重命名)

说明:因样本加壳且无动态执行数据,未提取到 C2 域名/IP、互斥体、注册表路径、URL 或落地文件路径等行为类 IOC。建议在受控沙箱中 detonate 后补全网络和主机 IOC。

§14 最终判定

最终判定:该样本 verdict 为 suspicious(可疑),confidence 为 60/100。判定依据建立在零导入表自定义压缩壳这一强静态对抗信号之上,但受限于无沙箱动态执行数据和社区情报空白,无法将 verdict 提升至 malicious。

核心风险陈述:零导入 PE 是恶意软件作者刻意设计的分析屏障,其技术成本(手工实现 PE 加载器、API 解析、压缩解压引擎)远高于使用现成的 UPX 等工具,说明该样本的作者/使用者有明确的隐匿意图和一定的逆向工程能力。即便解压后的载荷最终被证明为良性工具,壳本身的设计即为规避安全控制,在纵深防御体系下应被视为不可信代码。

处置建议

1. 主机隔离:立即从网络中隔离任何检测到该样本 SHA256 哈希的主机,断开网络连接并保留内存镜像以供后续取证。
2. EDR 狩猎规则:部署基于行为的检测规则,关注以下模式——(a) 零导入表 PE 文件写入磁盘或通过 PowerShell 反射加载;(b) 进程在启动后短时间内连续调用 VirtualAlloc + VirtualProtect(PAGE_EXECUTE_READWRITE)的内存分配模式;(c) 无导入表的可疑进程执行网络出站连接。
3. 沙箱引爆:在隔离的 Windows 沙箱(如 CAPE Sandbox、Joe Sandbox 或本地 Hybrid Analysis 提交)中以管理员权限执行该样本,捕获解压后载荷的完整行为数据,包括网络流量、进程注入目标、文件/注册表变更。
4. YARA 规则编写:基于壳存根的特征编写 YARA 签名,锚定字符串「Fast decoding Code from Chris Anderson」与 PE 零导入表的结构组合,用于在样本库和端点中扫描同类定制压缩壳样本。
5. VT Retrohunt:若具备 VT Enterprise 订阅,将零导入表 + zlib inflate 字符串的组合作为 Retrohunt 规则条件,回溯历史样本库寻找同源加壳器打包的其他样本,可能揭示更大的攻击活动集群。
6. 网络层加固:在防火墙/IDS 层面加强对出站连接的深度包检测(DPI),重点关注非标准端口、加密隧道(TLS/自定义加密)、信标频率异常的流量模式,以防解压后载荷为 C2 远控或数据窃密工具。
  1. 主机隔离:立即从网络中隔离任何检测到该样本 SHA256 哈希的主机,断开网络连接并保留内存镜像以供取证分析
  2. EDR 狩猎规则:部署行为检测规则——关注零导入表 PE 文件写入磁盘、VirtualAlloc+VirtualProtect(PAGE_EXECUTE_READWRITE) 内存分配模式、无导入表进程的网络出站连接
  3. 沙箱引爆:在隔离 Windows 沙箱中以管理员权限执行样本,捕获解压后载荷的完整行为数据(进程注入、C2 通信、文件/注册表变更)
  4. YARA 签名:基于 'Fast decoding Code from Chris Anderson' 字符串 + PE 零导入表结构组合编写 YARA 规则,扫描端点历史样本库
  5. VT Retrohunt:利用零导入表 + zlib inflate 字符串组合进行历史样本库回溯,寻找同源加壳器打包的其他样本以揭示更大攻击集群
  6. 网络层加固:加强出站 DPI 检测,关注非标准端口加密隧道和异常信标频率,防范解压后 C2 载荷的数据窃密行为