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

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

目标

通过分析代码结构来理解恶意样本的总体功能,重点掌握for、while等流程语句在汇编中的表现形式。

分析样本:Lab06-04.exe

基础静态分析

导入函数分析

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
Error 2.3: Fail to get command
Error 2.2: Fail to ReadFile
Error 2.1: Fail to OpenUrl
Internet Explorer 7.50/pma%d
Error 3.2: Not a valid command provided
Error 3.1: Could not set Registry value
Malware
Success: Parsed command is %c

功能推断

  1. 联网访问http://www.practicalmalwareanalysis.com/cc.htm网址,解析网页获取命令
  2. 通过注册表实现自启动(Software\Microsoft\Windows\CurrentVersion\Run
  3. 创建衍生文件C:\Temp\cc.exe
  4. 使用Internet Explorer 7.50/pma%d作为代理字符串,其中%d为占位符

基础动态分析

  • 根据网络状态返回不同打印内容
  • 程序会根据网络连接状态显示不同错误信息

高级静态分析

for循环结构分析

for循环在汇编中的典型结构包含:

  1. 初始化语句块
  2. 判断条件
  3. 循环体(条件成立时执行)
  4. 递增/递减语句块

对应汇编指令中的三个跳转:

  1. 初始化完毕后跳转到判断条件
  2. 判断条件不成立时跳出循环
  3. 循环体执行完毕后跳转到递增/递减语句块

样本中的for循环特点

  • 循环1440次
  • 每次循环睡眠1分钟
  • 总运行时间约24小时
  • 循环次数会被传入函数并附加到代理字符串后(Internet Explorer 7.50/pma%d

while循环结构分析

while循环在汇编中的典型结构:

  1. 条件判断
  2. 循环体(条件成立时执行)

对应汇编指令中的两个跳转:

  1. 条件判断失败时跳出循环
  2. 循环体执行完毕后直接跳回条件判断处

特点

  • 头部为判断条件
  • 尾部为直接跳转指令
  • 执行速度比for循环快(跳转次数少)

do-while循环结构分析

示例源代码:

#include <stdio.h>
void main() {
    int i = 0;
    scanf("%d", &i);
    do {
        printf("true");
        i--;
    } while(i > 0);
}

与while循环的区别:

  • 条件判断放在循环体之后
  • 只有一个条件跳转(融合了头部条件跳转和尾部直接跳转)
  • 执行速度比while循环更快(跳转次数更少)

关键知识点总结

循环结构识别技巧

  1. for循环识别

    • 寻找三个跳转点
    • 通常包含初始化、条件判断、递增/递减三个部分
    • 在IDA视图中表现为明显的三段式结构
  2. while循环识别

    • 寻找两个跳转点
    • 条件判断在循环开始处
    • 循环体末尾有直接跳回条件判断的指令
  3. do-while循环识别

    • 只有一个条件跳转
    • 循环体执行后才进行条件判断
    • 条件跳转指令位于循环体末尾

恶意代码行为分析

  1. 持久化机制

    • 通过注册表实现自启动
    • 路径:Software\Microsoft\Windows\CurrentVersion\Run
  2. 网络通信

    • 使用Internet相关API下载命令
    • 代理字符串包含可变参数(%d
    • 错误处理机制完善(多种错误提示)
  3. 文件操作

    • 创建目录(C:\Temp
    • 生成衍生文件(C:\Temp\cc.exe
    • 文件操作API链:CreateDirectoryA → CopyFileA → DeleteFileA

分析方法总结

  1. API序列分析

    • 关注网络、注册表和文件操作API的组合使用
    • 分析API调用顺序和参数
  2. 字符串分析

    • 识别格式化字符串(如%d%c
    • 分析错误提示信息了解程序逻辑
  3. 控制流分析

    • 识别各种循环结构
    • 理解循环次数和条件的意义
    • 分析睡眠/延迟机制(如1440次1分钟睡眠)
  4. 动态行为验证

    • 结合静态分析结果验证动态行为
    • 检查网络状态对程序流程的影响

通过这种系统化的分析方法,可以全面理解恶意样本的功能和行为模式。

Windows样本高级静态分析:识别汇编中的C代码结构(三) 目标 通过分析代码结构来理解恶意样本的总体功能,重点掌握for、while等流程语句在汇编中的表现形式。 分析样本:Lab06-04.exe 基础静态分析 导入函数分析 关键字符串 功能推断 联网访问 http://www.practicalmalwareanalysis.com/cc.htm 网址,解析网页获取命令 通过注册表实现自启动( Software\Microsoft\Windows\CurrentVersion\Run ) 创建衍生文件 C:\Temp\cc.exe 使用 Internet Explorer 7.50/pma%d 作为代理字符串,其中 %d 为占位符 基础动态分析 根据网络状态返回不同打印内容 程序会根据网络连接状态显示不同错误信息 高级静态分析 for循环结构分析 for循环在汇编中的典型结构包含: 初始化语句块 判断条件 循环体(条件成立时执行) 递增/递减语句块 对应汇编指令中的三个跳转: 初始化完毕后跳转到判断条件 判断条件不成立时跳出循环 循环体执行完毕后跳转到递增/递减语句块 样本中的for循环特点 : 循环1440次 每次循环睡眠1分钟 总运行时间约24小时 循环次数会被传入函数并附加到代理字符串后( Internet Explorer 7.50/pma%d ) while循环结构分析 while循环在汇编中的典型结构: 条件判断 循环体(条件成立时执行) 对应汇编指令中的两个跳转: 条件判断失败时跳出循环 循环体执行完毕后直接跳回条件判断处 特点 : 头部为判断条件 尾部为直接跳转指令 执行速度比for循环快(跳转次数少) do-while循环结构分析 示例源代码: 与while循环的区别: 条件判断放在循环体之后 只有一个条件跳转(融合了头部条件跳转和尾部直接跳转) 执行速度比while循环更快(跳转次数更少) 关键知识点总结 循环结构识别技巧 for循环识别 : 寻找三个跳转点 通常包含初始化、条件判断、递增/递减三个部分 在IDA视图中表现为明显的三段式结构 while循环识别 : 寻找两个跳转点 条件判断在循环开始处 循环体末尾有直接跳回条件判断的指令 do-while循环识别 : 只有一个条件跳转 循环体执行后才进行条件判断 条件跳转指令位于循环体末尾 恶意代码行为分析 持久化机制 : 通过注册表实现自启动 路径: Software\Microsoft\Windows\CurrentVersion\Run 网络通信 : 使用Internet相关API下载命令 代理字符串包含可变参数( %d ) 错误处理机制完善(多种错误提示) 文件操作 : 创建目录( C:\Temp ) 生成衍生文件( C:\Temp\cc.exe ) 文件操作API链:CreateDirectoryA → CopyFileA → DeleteFileA 分析方法总结 API序列分析 : 关注网络、注册表和文件操作API的组合使用 分析API调用顺序和参数 字符串分析 : 识别格式化字符串(如 %d 、 %c ) 分析错误提示信息了解程序逻辑 控制流分析 : 识别各种循环结构 理解循环次数和条件的意义 分析睡眠/延迟机制(如1440次1分钟睡眠) 动态行为验证 : 结合静态分析结果验证动态行为 检查网络状态对程序流程的影响 通过这种系统化的分析方法,可以全面理解恶意样本的功能和行为模式。