windows样本高级静态分析之识别汇编中C代码结构(switch)
字数 1564 2025-08-24 23:51:13

Windows样本高级静态分析:识别汇编中的C代码结构(Switch语句)

一、分析目标

通过分析代码结构来理解恶意样本的总体功能,重点掌握switch语句在汇编层面的表现形式。

二、分析流程

  1. 基础静态分析
  2. 基础动态分析
  3. 高级静态分析

三、实例分析:Lab06-03.exe

1. 基础静态分析

导入函数分析:

  • 网络相关:
    • InternetOpenUrlA
    • InternetCloseHandle
    • InternetReadFile
    • InternetGetConnectedState
    • InternetOpenA
  • 注册表操作:
    • RegSetValueExA
    • RegOpenKeyExA
  • 文件操作:
    • CreateDirectoryA
    • CopyFileA
    • DeleteFileA
    • GetFileType
    • WriteFile

关键字符串:

  • http://www.practicalmalwareanalysis.com/cc.htm
  • Software\Microsoft\Windows\CurrentVersion\Run
  • C:\Temp\cc.exe
  • C:\Temp
  • 各种错误信息如:"Error 1.1: No Internet", "Success: Internet Connection"等

初步判断:

  1. 存在联网访问特定网址的行为,可能解析网页获取命令
  2. 通过注册表实现自启动
  3. 在C:\Temp目录下操作衍生文件cc.exe

2. 基础动态分析

根据网络状态返回不同打印内容,需要进一步通过高级静态分析了解程序后续操作。

3. 高级静态分析

主函数分析:

  • 使用cmp指令进行条件判断,形成if-else结构
  • 判断条件:sub_401000函数返回结果(联网状态)
    • 如果条件成立:调用sub_401040函数获取返回结果
      • 返回结果不为0则跳转到loc_40123C
    • 如果条件不成立:eax置0并跳转到main函数结尾

sub_401040函数分析(三层嵌套if结构):

  1. 最外层if:判断是否可以打开目标网页
  2. 第二层if:判断是否可以读取该网页文件
  3. 第三层if:判断读取内容是否以<!--开头
    • 如果条件成立,将后续数据赋给al并跳转返回

loc_40123C分析(switch结构):

  • 根据从网页获取的数据确定edx值
  • 通过跳转表实现多分支跳转
  • 可能的操作:
    • 创建目录
    • 复制当前程序到C:\Temp\cc.exe
    • 删除C:\Temp\cc.exe
    • 设置自启动注册表键值

恶意行为总结:
通过网页获取指令执行以下操作:

  1. 样本隐藏(复制到Temp目录)
  2. 文件删除
  3. 自启动设置
  4. 目录创建

四、Switch语句的汇编实现形式

1. 跳转表形式(如实例中所示)

通过计算偏移量直接跳转到对应代码块,效率较高。

2. cmp + jz + jmp实现的if形式

示例C代码:

#include <stdio.h>
void main() {
    int i = 0;
    scanf("%d", &i);
    switch(i) {
        case 0: printf("a"); break;
        case 1: printf("b"); break;
        case 2: printf("c"); break;
        default: break;
    }
}

对应汇编实现:

  • 使用一系列cmp指令比较输入值
  • 配合jz(跳转如果为零)指令实现条件跳转
  • 每个case对应一个cmp+jz组合
  • 最后通过jmp实现break功能

五、分析技巧总结

  1. 识别if-else结构:

    • 查找cmp/test指令
    • 分析后续的条件跳转指令(jz/jnz等)
    • 将跳转目标和后续指令分别对应if和else块
  2. 识别switch结构:

    • 查找跳转表特征(通常包含基地址+偏移计算)
    • 或查找连续的cmp/jz指令序列
    • 注意case值的范围和default处理
  3. 恶意代码分析要点:

    • 重点关注网络操作和持久化机制
    • 分析命令获取和执行流程
    • 跟踪文件系统操作
    • 检查注册表修改
  4. 动态与静态结合:

    • 静态分析确定代码结构
    • 动态分析验证实际行为
    • 通过错误信息字符串辅助理解程序逻辑

通过掌握这些分析方法和代码结构识别技巧,可以有效分析恶意样本的功能和行为模式。

Windows样本高级静态分析:识别汇编中的C代码结构(Switch语句) 一、分析目标 通过分析代码结构来理解恶意样本的总体功能,重点掌握switch语句在汇编层面的表现形式。 二、分析流程 基础静态分析 基础动态分析 高级静态分析 三、实例分析:Lab06-03.exe 1. 基础静态分析 导入函数分析: 网络相关: InternetOpenUrlA InternetCloseHandle InternetReadFile InternetGetConnectedState InternetOpenA 注册表操作: RegSetValueExA RegOpenKeyExA 文件操作: CreateDirectoryA CopyFileA DeleteFileA GetFileType WriteFile 关键字符串: http://www.practicalmalwareanalysis.com/cc.htm Software\Microsoft\Windows\CurrentVersion\Run C:\Temp\cc.exe C:\Temp 各种错误信息如:"Error 1.1: No Internet", "Success: Internet Connection"等 初步判断: 存在联网访问特定网址的行为,可能解析网页获取命令 通过注册表实现自启动 在C:\Temp目录下操作衍生文件cc.exe 2. 基础动态分析 根据网络状态返回不同打印内容,需要进一步通过高级静态分析了解程序后续操作。 3. 高级静态分析 主函数分析: 使用cmp指令进行条件判断,形成if-else结构 判断条件:sub_ 401000函数返回结果(联网状态) 如果条件成立:调用sub_ 401040函数获取返回结果 返回结果不为0则跳转到loc_ 40123C 如果条件不成立:eax置0并跳转到main函数结尾 sub_ 401040函数分析(三层嵌套if结构): 最外层if:判断是否可以打开目标网页 第二层if:判断是否可以读取该网页文件 第三层if:判断读取内容是否以 <!-- 开头 如果条件成立,将后续数据赋给al并跳转返回 loc_ 40123C分析(switch结构): 根据从网页获取的数据确定edx值 通过跳转表实现多分支跳转 可能的操作: 创建目录 复制当前程序到C:\Temp\cc.exe 删除C:\Temp\cc.exe 设置自启动注册表键值 恶意行为总结: 通过网页获取指令执行以下操作: 样本隐藏(复制到Temp目录) 文件删除 自启动设置 目录创建 四、Switch语句的汇编实现形式 1. 跳转表形式(如实例中所示) 通过计算偏移量直接跳转到对应代码块,效率较高。 2. cmp + jz + jmp实现的if形式 示例C代码: 对应汇编实现: 使用一系列cmp指令比较输入值 配合jz(跳转如果为零)指令实现条件跳转 每个case对应一个cmp+jz组合 最后通过jmp实现break功能 五、分析技巧总结 识别if-else结构: 查找cmp/test指令 分析后续的条件跳转指令(jz/jnz等) 将跳转目标和后续指令分别对应if和else块 识别switch结构: 查找跳转表特征(通常包含基地址+偏移计算) 或查找连续的cmp/jz指令序列 注意case值的范围和default处理 恶意代码分析要点: 重点关注网络操作和持久化机制 分析命令获取和执行流程 跟踪文件系统操作 检查注册表修改 动态与静态结合: 静态分析确定代码结构 动态分析验证实际行为 通过错误信息字符串辅助理解程序逻辑 通过掌握这些分析方法和代码结构识别技巧,可以有效分析恶意样本的功能和行为模式。