1 反病毒引擎扫描
www.virustotal.com
2 哈希值:恶意代码的指纹
md5deep程序:计算出程序的哈希值
3 查找字符串
Strings程序,搜索可执行文件中的可打印字符串,这些字符串通常以ACSII或Unicode格式进行存储。
Strings下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/strings
4 加壳与混淆恶意代码
混淆程序是恶意代码编写者尝试去隐藏其执行过程的代码,加壳程序是其中一种。
合法程序大多总是会包含很多字符串,而由被加壳或者混淆的恶意代码直接分析获取得到的可打印字符串很少。
加壳和混淆代码通常至少会包含LoadLibrary和GetProcAddress函数,用来加载和使用其他函数功能的。
当加壳的程序运行时,会首先运行一段脱壳代码,来解压,这段脱壳代码可以被解析,但后面的可执行程序(字符串列表、导入表、其他信息等)是不可见的。
PEiD工具,检测加壳器类型,或用来链接应用程序的编译器类型。
5 PE文件格式
可移植执行(PE)文件格式是Windows可执行文件、对象和DLL所使用的标准格式,是一种数据结构,包含为Windows操作系统加载器管理可执行代码所必要的信息。
PE文件以一个文件头开始,其中包括代码信息、应用程序类型、所需的库函数与空间要求。
6 链接库与函数
静态链接,不常用。当一个库被静态链接到可执行程序时,所有这个库中的代码都会被复制到可执行程序中,很难区分静态链接的代码与可执行程序自身代码。
运行时链接,在合法程序中不常见,在恶意代码中常用,特别是当恶意代码被加壳或是混淆的时候。只有当需要使用函数时,才链接到库。
动态链接,程序启动时就会链接,在程序被装载时搜索所需的代码库,如果程序调用了被链接的库函数,这个函数会再代码库中执行。
PE文件头中存储了每个将被装载的库文件,以及每个会被程序使用的函数信息。
Dependency Walker工具:探索动态链接函数。下载地址:http://www.dependencywalker.com/
Windows函数命名:CreateWindowEx,当微软更新一个函数,新函数与旧函数不兼容,这时微软会使用旧函数,新函数会给一个与旧函数相同的名字,并加上Ex的后缀。
以字符串作为参数的函数,在名字后面会包含一个A或W,CreateDirectoryW,这个字母A或W在这个函数的文档中并没有出现,只是表明这个接受字符串参数的函数有不同版本,以A结尾的输入参数类型为ASCII字符串,以W结尾的输入参数类型为宽字符字符串。
导入函数,MSDN库
导出函数,用来与其他程序和代码进行交互时所使用的。通常,一个DLL会实现一个或多个功能函数,然后将它们导出,使得别的程序可以导入并使用这些函数。
DLL文件本身就是实现一些导出函数然后被EXE可执行文件使用的,因此导出函数在DLL文件中常见。
EXE文件里就很少会有导出函数,如果在EXE文件中发现了导出函数,会提供一些有用的信息。
2显示了程序导入的DLL列表
3显示了导入表
4列出了选中的DLL中所有可以被导入的函数(即DLL的导出函数)
5和6分别显示运行程序时装载的DLL版本额外信息,以及报告的错误。
7 静态分析技术实践
Kernel32.dll:FindFirstFile和FindNextFile函数值得关注,搜索一个目录下的所有文件
User32.dll:图形化界面的操作,SetWindowsHookEx函数时间谍软件经常使用的,也是键盘记录器用来接收键盘输入的方法;RegisterHotKey,注册热键。
GDI32.dll:图形化界面。
Advapi.dll:使用了注册表。查看字符串,Software\Microsoft\Windows\CurrentVersion\Run,这是一个恶意代码普遍使用的注册表键值,控制Windows启动时会自动装载哪些程序。
8 PE文件头与分节
PE文件格式:PE文件头+分节
.text:CPU执行指令,所有其他节存储数据和支持性的信息,唯一可以执行的节,也应该是唯一包含代码的节。
.rdata:导入与导出函数信息,有些文件中包含.idata和.edata节,来存储导入导出信息。
.data:全局数据,可以从程序的任何地方访问到。本地数据不存储在这个节。
.rsrc:可执行文件所使用的资源,如图标、图片、菜单项和字符串等,这些内容不可执行、
PEview:分析PE文件
IMAGE_DOS_HEADERS和MS_DOS:历史遗留问题,无价值
IMAGE_NT_HEADERS:NT文件头,特征签名始终相同,忽略
IMAGE_FILE_HEADER:文件基本信息
IMAGE_OPTIONAL_HEADER:subsystem指出是控制台程序IMAGE_SUBSYSTEM_WINDOWS_CUI还是图形界面程序IMAGE_SUBSYSTEM_WINDOWS_GUI
IMAGE_SECTION_HEADER:分节头部,命名见表1,任何偏差都是可疑的。
Virtual Size虚拟大小,Size of Raw Data原始大小,两个值应该相等或细小差异,由于内存和磁盘的对齐存在差异。
命名和大小异常,加壳。
Resource Hacker:查看.rsrc节
恶意程序经常会把一个嵌入的程序或者驱动放在资源节中,在程序运行之前,它们会把可执行文件或驱动提取出来。
PE文件工具:PEBrowser Professional、PE Explorer