恶意代码分析静态分析初级篇
字数 2189 2025-08-18 11:39:30

恶意代码静态分析初级教程

一、在线恶意文件识别站点

在线识别站点允许上传文件,调用多个反病毒引擎扫描并生成报告,帮助确定样本是否为恶意。

1. VirusTotal

  • 网址: https://www.virustotal.com/gui/home/upload
  • 特点: 业内公认的权威在线检测工具
  • 功能: 上传疑似恶意文件,获取多引擎扫描结果

2. VirScan

  • 网址: https://r.virscan.org
  • 特点: 常用的在线扫描工具
  • 功能: 提供样本扫描结果报告

3. 微步在线

  • 网址: https://x.threatbook.cn/
  • 特点: 提供沙箱动态分析
  • 功能: 检测样本的动态行为,包括产生的进程、释放的文件等信息

二、哈希值计算

哈希是唯一标识恶意代码的常用方法。

常用哈希算法

  • MD5: 恶意代码分析最常见的哈希函数
  • SHA-1: 也是常用的哈希算法

工具

  • hashdeep (早期版本名为md5deep)
    • 功能: 批量计算文件哈希值,并与哈希值列表比对
    • 平台: Kali Linux自带该工具

哈希值搜索

  • 示例URL: https://md5.virscan.org/language/zh-cn/7f7ccaa16fb15eb1c7399d422f8363e8.html
  • 方法: 将URL末尾替换为需要查找的哈希值即可查看相关文件报告

三、字符串查找

字符串是可打印的字符序列,可提供程序功能提示。

工具

  • strings
    • 功能: 查看文件中的可打印字符
    • 用途: 发现程序访问的URL、特定操作等信息
    • 平台: Kali Linux自带该工具

四、加壳与混淆技术

恶意代码作者常用加壳或混淆技术来隐藏执行过程。

加壳特点

  • 加壳程序运行时先运行脱壳代码解压缩
  • 加壳/混淆的代码通常包含LoadLibrary和GetProcAddress函数

常见加壳工具

  1. ASPack
  2. UPX
  3. PECompact
  4. Petite 2.2
  5. NsPack v3.7
  6. FSG 2.0
  7. Dbpe 2.20
  8. The Enigma Protector 1.02
  9. Armadillo
  10. ACProtect

完整列表参考: https://tools.pediy.com/win/packers.htm

侦壳工具

  1. PEiD
  2. ExePEInfo
  3. Detect It Easy

完整列表参考: https://tools.pediy.com/win/unpacker.htm

五、链接库与函数

可执行程序的重要信息之一是导入表。

链接类型

  1. 静态链接

    • 特点: 库中所有代码被复制到可执行程序中
    • 结果: 可执行程序体积增大
    • 平台: Linux中较常见,Windows中不常用
  2. 运行时链接

    • 特点: 需要时才链接到库
    • 用途: 恶意代码(特别是加壳/混淆时)常用
  3. 动态链接

    • 特点: 最常见,程序装载时搜索所需代码库
    • 机制: 宿主操作系统完成链接

分析工具

  • Dependency Walker
    • 功能: 列出可执行文件的动态链接函数
    • 显示内容:
      • 程序导入的DLL列表(如KERNEL32.DLL, ADVAPI32.DLL等)
      • DLL文件导入的函数
    • 函数查询:
      • 通过MSDN库查找函数功能
      • 示例: SetWindowsHookExA函数文档
        • https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa

六、PE文件结构分析

PE(可移植可执行)文件头包含文件元数据,各节段包含不同信息。

PE文件主要节段

  1. .text节

    • 内容: CPU指令
    • 特点: 唯一可执行的节,包含可执行代码
  2. .rdata节

    • 内容: 全局可访问的只读数据
    • 包含: 导入导出的函数信息
  3. .data节

    • 内容: 全局可访问的数据
    • 注意: 不包含本地数据
  4. .rsrc节

    • 内容: 非可执行资源
    • 示例: 图片、图标、字符串等

分析工具

  • PEView

    • 功能: 查看PE文件头
    • 重要信息:
      • IMAGE_FILE_HEADER: 文件基本信息
      • IMAGE_OPTIONAL_HEADER:
        • Subsystem: 指出是控制台(IMAGE_SUBSYSTEM_WINDOWS_CUI)还是图形界面程序(GUI)
  • Resource Hacker

    • 功能: 查看.rsrc资源节内容
    • 用途:
      • 查看程序包含的所有资源
      • 修改程序内容(如替换字符串)

七、工具与样本下载

文中涉及的工具和实验样本可在GitHub获取:
https://github.com/tide-emergency/yingji/tree/master/%E6%81%B6%E6%84%8F%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90%E4%B8%8E%E5%AE%9E%E6%88%98%E7%AC%94%E8%AE%B0/tools

八、安全团队信息

Tide安全团队

  • 成立时间: 2019年1月
  • 研究方向:
    • 网络攻防
    • Web安全
    • 移动终端安全
    • 安全开发
    • IoT/物联网/工控安全
  • 官网: http://www.TideSec.com

本教程内容基于《恶意代码分析实战》一书和实际分析经验整理而成,适合初级恶意代码分析人员学习参考。

恶意代码静态分析初级教程 一、在线恶意文件识别站点 在线识别站点允许上传文件,调用多个反病毒引擎扫描并生成报告,帮助确定样本是否为恶意。 1. VirusTotal 网址: https://www.virustotal.com/gui/home/upload 特点: 业内公认的权威在线检测工具 功能: 上传疑似恶意文件,获取多引擎扫描结果 2. VirScan 网址: https://r.virscan.org 特点: 常用的在线扫描工具 功能: 提供样本扫描结果报告 3. 微步在线 网址: https://x.threatbook.cn/ 特点: 提供沙箱动态分析 功能: 检测样本的动态行为,包括产生的进程、释放的文件等信息 二、哈希值计算 哈希是唯一标识恶意代码的常用方法。 常用哈希算法 MD5: 恶意代码分析最常见的哈希函数 SHA-1: 也是常用的哈希算法 工具 hashdeep (早期版本名为md5deep) 功能: 批量计算文件哈希值,并与哈希值列表比对 平台: Kali Linux自带该工具 哈希值搜索 示例URL: https://md5.virscan.org/language/zh-cn/7f7ccaa16fb15eb1c7399d422f8363e8.html 方法: 将URL末尾替换为需要查找的哈希值即可查看相关文件报告 三、字符串查找 字符串是可打印的字符序列,可提供程序功能提示。 工具 strings 功能: 查看文件中的可打印字符 用途: 发现程序访问的URL、特定操作等信息 平台: Kali Linux自带该工具 四、加壳与混淆技术 恶意代码作者常用加壳或混淆技术来隐藏执行过程。 加壳特点 加壳程序运行时先运行脱壳代码解压缩 加壳/混淆的代码通常包含LoadLibrary和GetProcAddress函数 常见加壳工具 ASPack UPX PECompact Petite 2.2 NsPack v3.7 FSG 2.0 Dbpe 2.20 The Enigma Protector 1.02 Armadillo ACProtect 完整列表参考: https://tools.pediy.com/win/packers.htm 侦壳工具 PEiD ExePEInfo Detect It Easy 完整列表参考: https://tools.pediy.com/win/unpacker.htm 五、链接库与函数 可执行程序的重要信息之一是导入表。 链接类型 静态链接 特点: 库中所有代码被复制到可执行程序中 结果: 可执行程序体积增大 平台: Linux中较常见,Windows中不常用 运行时链接 特点: 需要时才链接到库 用途: 恶意代码(特别是加壳/混淆时)常用 动态链接 特点: 最常见,程序装载时搜索所需代码库 机制: 宿主操作系统完成链接 分析工具 Dependency Walker 功能: 列出可执行文件的动态链接函数 显示内容: 程序导入的DLL列表(如KERNEL32.DLL, ADVAPI32.DLL等) DLL文件导入的函数 函数查询: 通过MSDN库查找函数功能 示例: SetWindowsHookExA函数文档 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa 六、PE文件结构分析 PE(可移植可执行)文件头包含文件元数据,各节段包含不同信息。 PE文件主要节段 .text节 内容: CPU指令 特点: 唯一可执行的节,包含可执行代码 .rdata节 内容: 全局可访问的只读数据 包含: 导入导出的函数信息 .data节 内容: 全局可访问的数据 注意: 不包含本地数据 .rsrc节 内容: 非可执行资源 示例: 图片、图标、字符串等 分析工具 PEView 功能: 查看PE文件头 重要信息: IMAGE_ FILE_ HEADER: 文件基本信息 IMAGE_ OPTIONAL_ HEADER: Subsystem: 指出是控制台(IMAGE_ SUBSYSTEM_ WINDOWS_ CUI)还是图形界面程序(GUI) Resource Hacker 功能: 查看.rsrc资源节内容 用途: 查看程序包含的所有资源 修改程序内容(如替换字符串) 七、工具与样本下载 文中涉及的工具和实验样本可在GitHub获取: https://github.com/tide-emergency/yingji/tree/master/%E6%81%B6%E6%84%8F%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90%E4%B8%8E%E5%AE%9E%E6%88%98%E7%AC%94%E8%AE%B0/tools 八、安全团队信息 Tide安全团队 成立时间: 2019年1月 研究方向: 网络攻防 Web安全 移动终端安全 安全开发 IoT/物联网/工控安全 官网: http://www.TideSec.com 本教程内容基于《恶意代码分析实战》一书和实际分析经验整理而成,适合初级恶意代码分析人员学习参考。