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
功能推断
- 联网访问
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循环结构分析
示例源代码:
#include <stdio.h>
void main() {
int i = 0;
scanf("%d", &i);
do {
printf("true");
i--;
} while(i > 0);
}
与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分钟睡眠)
-
动态行为验证:
- 结合静态分析结果验证动态行为
- 检查网络状态对程序流程的影响
通过这种系统化的分析方法,可以全面理解恶意样本的功能和行为模式。