|
原文链接:恶意代码之静态分析
0x00 分析技术
- 使用反病毒软件来确认程序样本的恶意性
- 使用哈希来识别恶意代码
- 从文件的字符串列表、函数和文件头信息中发掘有用信息
0x01 病毒扫描引擎
对可疑的恶意代码样本进行初步判断,查看是否有引擎可以识别样本,例如:
- virustotal
- 云沙箱
- 华为云沙箱
- virscan
- 腾讯哈勃系统
0x02 哈希值计算
哈希是一种用来唯一标识恶意代码的常用方法,MD5算法是恶意代码分析最为常用的哈希函数,初次之外还有SHA-1算法等等
0x02-1 md5deep
用于计算Windows操作系统自带的Solitaire程序哈希值
0x02-2 WinMD5
0x03 字符串查找
Strings程序忽略上下文以及格式,可以分析任何文件类型,搜索三个或以上连续的ASCII或Unicode字符,并以终结符结尾的可打印字符串;ASCII存储一个字符使用一个字节,Unicode存储一个字符使用两个字节,差异见下图:
0x03-1 Strings工具
0x04 检测加壳与脱壳
加壳相当于给程序套一层外壳,隐藏程序的真正入口(OEP),干扰他人分析
加壳和混淆代码至少包含LoadLibrary和GetProcAddress函数,它们用来加载和使用其他函数功能。
0x04-1 检测加壳工具PEiD
0x04-2 脱UPX壳工具
0x05 列出链接库函数
Windows平台链接代码库有三种方式,分别是静态链接、运行时链接、动态链接。最不常用的是静态链接,最常用的是动态链接,运行时链接在恶意代码中流行。
LoadLibrary和GetProcAddress允许一个程序访问系统上任何库中的任何函数
0x05-1 Dependency Walker
工具可以列出可执行文件的动态链接函数
0x06 常见dll程序
0x07 函数命名约定
1.当微软更新一个函数,而且新函数与原先函数不兼容的时候,微软还会继续支持原先的旧函数。这时新函数会给一个与旧函数相同的名字,并在后面加上Ex后缀。而被显著更新过两次的函数,则会在它们的名字后面有两个Ex后缀。
2.以字符串作为参数的许多函数,在它们的名字后面会包含一个A或者一个w,如CreateDirectory。这个字母A或者w在这个函数的文档中并没有出现。它只是表明这个接受字符串参数的函数有着两个不同的版本:以A结尾的输入参数类型为ASCII字符串,而以w结尾的输入参数为宽字符字符串。当你在微软的文档中搜索这个函数时,你需要记得丢掉后缀的A或者w。
0x08 使用PEview分析PE文件
1.时间戳有时候能判断其编译时间,根据时间来判断恶意代码是否已经暴露,若已经暴露,则可以借助前人的分析进行解决,但所有Delphi程序都使用统一的编译时间:1992年6月19日,并且时间戳可以伪造;
2.程序的imagebuffer远大于filebuffer,说明程序加壳,特别是代码节(.text)
0x09 使用Resource Hacker查看资源节
恶意代码经常会把一个嵌入的程序或者驱动放在资源节,在程序运行前,将嵌入可执行文件或驱动提取出来
|
|