您的位置:首页 > 理论基础

计算机病毒实践总结一:简单静态分析

2016-04-02 21:05 453 查看
本文是基于计算机病毒课程实践部分的总结,这些实践是自主尝试学习分析恶意代码的过程,如有疏漏不妥之处,还请不吝赐教!

我的相关博客

实践部分:计算机病毒实践汇总一:简单静态分析(分析程序)

读书部分:《恶意代码分析实战》读书笔记 入门与基础

恶意代码简单静态分析实践总结

1. 目标

静态分析技术是研究恶意代码的第一步,通过各种工具尽可能多的搜集其信息并找到进一步分析的思路。


确认程序恶意性

判断程序主要行为

简单信息分析

2. 反病毒扫描

利用一些网站集合的病毒文件特征库进行恶意代码特征片段的匹配,为判断程序恶意性提供参考。


可利用的一些网站

virustotal(360浏览器无法正常打开?)

VirSCAN

Jotti的恶意软件扫描程序

调用多个反病毒引擎进行扫描。

扫描结果提供了各个引擎对样本的识别情况。

3. 加壳与混淆后的恶意代码

加壳后的恶意程序会被压缩或加密处理,混淆技术则隐藏了执行的过程。


加壳程序特点:至少会有两个函数
LoadLibrary
GetProcAddress
用来加载和使用其他函数。

使用PEiD工具

检测加壳的类型和所用编译器的类型,简化加壳分析的过程。





查看PE文件的分节



查看导入函数



存在问题:许多PEID插件会运行恶意代码可执行文件,注意在虚拟机的环境下运行。

4. 链接库与导入导出函数

分析恶意代码,可以其链接库和导入导出函数了解程序的行为。


静态链接与动态链接

库与程序静态链接时,库中的所有代码都会复制到程序中,程序增大很多,常见于UNIX和Linux系统中。

Windows中多为动态链接,只有在程序运行时才链接到库。

DLL文件:动态链接库文件。可执行文件常被分成这样的一个个具有相对独立功能的dll文件。

使用Dependency Walker工具



模块依赖关系、导入导出函数、模块列表、日志

PI(Parent Import Function List View):从哪些其他文件中调用了函数。

E(Export Function List View):提供了哪些接口,让其他的程序调用。

常见的DLL程序:

Kernal.dll 包含系统的核心功能,访问和操作内存,文件,硬件
WININET.dll 联网操作 包含了FTP HTTP NTP等协议
User.dll 包含了用户界面组件,控制响应用户操作的组件
Ntdll.dll 是Windows内核的接口 通常由Kernal间接导入,一些隐藏功能和操作进程会使用这个接口。
Advapi32.dll 提供了对核心Windows组件的访问 ,比如服务管理器和注册表
Gdi32.dll  提供图形显示和操作的函数


5. PE文件头与分节

PE是指Windows系统下32位可执行文件,以一个文件头开始,其中包括代码信息,应用程序类型,所需的库函数与空间要求。


PE文件中常见的分节:

.text:包含了CPU的执行指令,正常是唯一包含代码的节。
.rdata:通常包含导入导出的函数信息,还可以存储程序中的其他只读数据。
.data:包含了程序的全局数据 (本地数据并不存储在这里)。
.rsrc:包含可执行文件使用的资源,内容并不执行,例如图标、菜单项、字符串等
.reloc:包含用于重定位文件库的信息
.pdata:只在64位可执行文件中存在,存储异常处理信息


使用PEview工具



在这里或许可以找到有关恶意代码行为的线索。

编译信息:
IMAGE_NT_HEADERS
中的映像文件头
IMAGE_FILE_HEADER
中“Time Date Stamp”可以获取可执行文件是什么时候编译的。

入口信息:在
IMAGE_OPTIONAL_HEADER
中第七个成员“AddressOfEntryPoint“,它持有OEP(程序的入口点)的RVA(相对虚拟地址)。

6. 综合分析

(1)整合线索

- 有着相同编译时间的动态链接库
- 有特定行为的关键导入导出函数
- 分节中的信息

(2)联系实际

- 能与系统实际文件相关的线索
- 与端口号相关的线索 -> 特定的服务
- 与某个网络地址相关的线索

(3)做出推断

- 是否是恶意代码?
- 它做了什么?
- 主机已经感染的特征?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: