资讯动态

UPX 加壳恶意软件脱壳分析:从 API 参考到源码级实战(Anthropic-Cybersecurity-Skills)

发布时间:2026/9/11 18:26:23 来源:尧图企业网站定制
UPX 加壳恶意软件脱壳分析从 API 参考到源码级实战Anthropic-Cybersecurity-Skills【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读本文是Anthropic-Cybersecurity-Skills仓库中 UPX 加壳恶意软件分析技能 的配套技术指南围绕其 API 参考文档 展开。你将掌握一套完整的加壳样本处理链路用 UPX、pefile、Detect It EasyDIE等工具识别加壳特征用upx -d自动脱壳用 Python 修复被篡改的 UPX 魔数与节名并在自动化失败时通过 x64dbg Scylla 手动脱壳最终产出结构化的脱壳分析报告。文中所有工具用法、判定阈值与脱壳步骤均可在 SKILL.md 与 自动化代理脚本 的源码中找到对应实现。加壳检测的四个核心判定指标在动手脱壳之前首先要确认样本确实被加壳。API 参考文档给出了四个可量化的指标它们在 agent.py 的detect_generic_packing()函数中逐条落地指标判定阈值说明节区熵值Section entropy 7.0高熵意味着数据已被压缩或加密正常代码节通常在 5.0–6.5导入数量Import count 10加壳样本仅保留极少量导入其余 API 在运行时动态解析虚拟大小/原始大小比Virtual/Raw ratio 5x内存中展开的体积远超磁盘原始数据典型的压缩膨胀特征节区名称UPX0、UPX1、.packed、.nsp知名壳的节名具有高度可识别性在源码实现中detect_generic_packing()会遍历pe.sections对每个节计算section.get_entropy()并比较Misc_VirtualSize与SizeOfRawData当total_imports 10时输出Very few imports - typical of packed binaries。同时该函数还会检查导入表中是否同时出现LoadLibraryA与GetProcAddress——这是运行时导入解析的典型特征通常意味着壳桩在运行期才解析 API 地址。这些判断共同汇总为likely_packed布尔结果供后续流程决策。UPX 命令行测试、列表、解压与版本UPXUltimate Packer for eXecutables是开源的可执行文件加壳工具因其免费且效果好成为恶意软件最常滥用的壳之一。API 参考文档给出了四条核心命令upx -d packed_file # Decompress/unpack upx -d -o output packed_file # Unpack to new file upx -t file # Test if packed upx -l file # List compression info upx --version # Version info-ddecompress执行解压配合-o可将结果输出到新文件避免覆盖原始样本。-ttest仅做验证不实际解压是 SKILL.md 工作流中先测试后脱壳的第一步。-llist展示压缩前后体积、压缩率、格式与文件名输出形如File size Ratio Format Name -------------------- ------ ----------- ----------- 184320 - 98304 53.33% win32/pe malware.exe左侧为解压后体积184,320 字节右侧为压缩后体积98,304 字节Ratio 表示压缩率。在 agent.py 的unpack_upx()中正是以[upx, -d, -o, output_path, filepath]构建子进程命令并设置了 120 秒超时返回码为 0 即判定标准脱壳成功。pefile 的节区、熵值与导入分析pefile 是 Python 生态中最常用的 PE 文件解析库。API 参考文档给出了完整的分析范式import pefile pe pefile.PE(sample.exe) # Section analysis for section in pe.sections: name section.Name.rstrip(b\x00).decode() entropy section.get_entropy() print(f{name}: entropy{entropy:.2f}) # Import analysis for entry in pe.DIRECTORY_ENTRY_IMPORT: dll entry.dll.decode() for imp in entry.imports: print(f{dll}: {imp.name}) pe.close()要点说明section.Name是定长 8 字节的原始字节串须用rstrip(b\x00)去掉尾部填充再解码。section.get_entropy()返回该节的香农熵是判断压缩/加密的最直接依据。pe.DIRECTORY_ENTRY_IMPORT在样本没有导入目录时不存在需要先用hasattr()判断——agent.py 中正是这样处理无导入目录 深度加壳的情况。在 SKILL.md 的 Step 1 中这一逻辑被扩展为完整的一键检测脚本输出每个节的名称、熵值、Raw 与 Virtual 大小若出现UPX0/UPX1节名则提示 UPX 特征统计总导入数并在小于 10 时标记likely packed。agent.py 的calculate_entropy()函数则从零实现了香农熵计算-sum((c / length) * log2(c / length))与 pefile 内置实现相互印证。加壳识别工具矩阵DIE、PEiD 与 PEStudioDetect It EasyDIEDIE 能识别 PE、ELF、Mach-O 文件上的壳、编译器与链接器是首选识别工具diec sample.exe # CLI scan diec -j sample.exe # JSON outputdiec是命令行版-j输出 JSON 便于脚本解析。典型输出PE32 executable Packer: UPX(3.96)[NRV2B_LE32,best] Compiler: MSVC(2019)NRV2B_LE32是 UPX 使用的压缩算法标识best是压缩级别这些细节对判断壳版本有参考价值。PEiD遗留工具PEiD 已停止维护但它的特征签名数据库仍是理解各壳内部结构的好教材PackerSection NamesMagic BytesUPXUPX0, UPX1, UPX2UPX!at end of fileASPack.aspack, .adataN/APECompact.pec1, .pec2N/AThemidaVariousEncrypted sectionsVMProtect.vmp0, .vmp1Virtualized code注意Themida 与 VMProtect 属于虚拟机保护壳代码被虚拟化而非简单压缩不适用本文的 UPX 脱壳流程SKILL.md 明确将这类样本排除在适用场景之外。PEStudioPEStudio 提供静态分析面板其关键检查项与判定指标一一对应CheckDescriptionEntropySection-level entropy analysisImportsAPI import analysisStringsEmbedded string extractionSignaturesPacker/compiler identificationVirustotalHash-based lookup从工作流角度PEStudio 与 DIE 都服务于 SKILL.md 的 Step 1Identify the Packer先用工具确认壳类型再决定走自动化upx -d还是手动调试。熵值解读从 0 到 8 的二进制混乱度熵是信息论度量API 参考文档给出了工程化的分档解读RangeInterpretation0-1Nearly empty/uniform data1-5Normal code/data5-7Compressed or obfuscated7-8Encrypted or packed (maximum ~8.0)结合 agent.py 源码detect_upx()会在二进制中直接检索UPX!、UPX0、UPX1、UPX2字节特征并顺带读取魔数后的版本字节detect_generic_packing()则统计高熵节数量只要存在熵 7.0 的节或导入总数 10即判定likely_packed。实操中一个典型 UPX 样本的节区熵值分布是UPX0熵 ≈ 0.00解压前的空节与UPX1熵 ≈ 7.89压缩数据节并存而脱壳后.text节熵值回落至 6.2 左右。手动脱壳x64dbg 通用脱壳流程当自动化解压失败如魔数被篡改、二次加壳需转入动态调试。API 参考文档给出了六步通用流程1. Set breakpoint on VirtualAlloc / VirtualProtect 2. Run until breakpoint 3. Check memory map for new RWX regions 4. Step until original entry point (OEP) reached 5. Dump memory at OEP using Scylla plugin 6. Fix import table with Scylla关键 API 断点APIPurposeVirtualAllocMemory allocation for unpacked codeVirtualProtectChange memory protection (RWX)LoadLibraryALoad DLLs for import resolutionGetProcAddressResolve API addressesNtWriteVirtualMemoryWrite unpacked code to memorySKILL.md 的 Step 4 则提供了针对 UPX 壳的更精细套路其核心是利用 UPX 解压桩的固定形态PUSHAD保存全部寄存器→ 解压循环 →LoadLibrary/GetProcAddress解析导入 →POPAD恢复寄存器→JMP OEP。具体做法是在PUSHAD之后对[ESP]下硬件访问断点运行后会在POPAD处中断再单步F7/F8跟进到跳向 OEP 的JMP在 OEP 处用 Scylla 插件依次执行OEP EIP→IAT Autosearch→Get Imports→Dump→Fix Dump完成内存转储与导入表重建。实战场景修复被篡改的 UPX 头部这是 SKILL.md 描述得最完整的实战场景样本的节名UPX0、UPX1表明它被 UPX 加壳但upx -d报CantUnpackException: header corrupted——攻击者修改了 UPX 魔数来阻止自动解压。修复思路对应 SKILL.md 的 Step 3Python 修复脚本读取原始 PE 头从偏移0x3C处解析e_lfanew得到 PE 头偏移再定位节表偏移pe_offset 0x18 SizeOfOptionalHeader。扫描全文件寻找UPX后接非!字节的位置如UPX\x00、UPx!将其恢复为UPX!。检查并恢复节名若节名以UP或ux开头但非标准UPX0/UPX1/UPX2则按UPX{i}规则重写。写出修复后的文件重试upx -d suspect_fixed.exe -o unpacked.exe。agent.py 的fix_upx_headers()实现了同样的思路扫描UX开头、后随!\x00的模式并替换为UPX。注意务必在样本副本上操作SKILL.md 的 Pitfalls 明确警告不要修改原始样本。修复无效时的回退按上文 x64dbg 手动脱壳流程执行并在脱壳后校验。常见陷阱还包括样本可能是 UPX 自定义壳的双重加壳内存 dump 后不重建 IAT 会导致脱壳文件运行即崩溃以及忽略 UPX 节之后追加的 overlay 数据。脱壳结果验证与报告输出SKILL.md 的 Step 5 用 pefile 对脱壳产物做三件事核对各节熵值是否回落至正常区间.text约 6.2、确认导入表已完整重建脱壳后通常从 2 个导入恢复到 147 个、跨多个 DLL、对比脱壳前后文件体积如 98,304 → 245,760 字节约 2.5 倍膨胀。agent.py 的compare_packed_unpacked()则自动输出两侧的 size、sections、imports 与 SHA-256 做对比。最终产出应遵循 SKILL.md 的UNPACKING ANALYSIS REPORT模板至少包含样本哈希、识别到的壳版本、加壳/脱壳两侧的节区熵值与导入数、脱壳方法与关键偏移、OEP 地址、验证结论以及导入 Ghidra/IDA 反汇编、跑 YARA 规则、提交 VirusTotal等后续步骤。工具链与使用边界总结本技能涉及的完整工具链SKILL.md 的 Tools Systems 一节UPX 负责自动解压、DIE 负责识别、x64dbg/x32dbg Scylla 负责手动脱壳与 IAT 重建、PE-bear 负责 PE 头检视修复。自动化入口是 agent.py一次运行即可完成哈希计算、UPX 特征扫描、通用加壳分析、自动脱壳与前后对比python3 agent.py packed_binary.exe需安装pefile系统需装有upx。使用边界务必遵守仅适用于 UPX 等基于压缩的壳对 Themida、VMProtect 等虚拟机保护壳无效所有样本处理必须在断网的隔离分析虚拟机中进行。从框架映射看该技能对应 MITRE ATTCK 的 T1027Obfuscated Files or Information见 mappings/mitre-attack/coverage-summary.md其 SKILL.md 元数据还声明了 T1140Deobfuscate/Decode Files or Information、T1620Reflective Code Loading以及 NIST CSF 的 DE.AE-02、RS.AN-03 等控制项适用于恶意样本进入 Ghidra/IDA 前的前置还原环节。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价