1. 反病毒引擎扫描

反病毒引擎主要依靠一个已知恶意代码那可识别片段的特征数据库(病毒文件特征库),以及基于行为与模式匹配的分析(启发式检测)来识别可疑文件。

因为不同的反病毒软件使用了不同的特征库和启发式检测方法,所以对同一个可以恶意代码样本,运行不同反病毒软件进行扫描检测时相当有必要的。

这一步尽可能通过这类网站解密恶意代码的行为以及找到根据该类代码进行的关联线索,以下介绍三款优秀平台。

方法1:谷歌该恶意代码的分析报告

网站1:www.virustotal.com

网站2:https://x.threatbook.cn/

软件1:安天动态行为分析工具

软件2:虚拟机运行软件,使用火绒剑进行行为监控

2.字符串检测

从字符串中进行搜索时获得程序功能提示的一种简单办法。

有时候有 Strings 程序检测到的字符串并非真正字符串,例如,找到一个字节序列 0x56、0x50、0x33 和 0x00,它将解释为字符串 VP33,但是这些字节并不是真正在表示字符串的内容,它们可能是一个内存地址、CPU 指令序列、或是由哪个程序所使用的一段数据。

我们可以轻易识别 Windows 函数,因为这些函数通常以大写字母开始的第一个词开始,后面每个词也都以大写字母开始。

3.查看链接库与函数

对于一个可执行程序,我们收集到的最有用的信息之一,就是它的导入表。导入函数是一个程序所使用的但存储在另一程序中的那些函数。代码库可以被静态链接,也可以在运行时链接,或者动态链接。

静态链接:是 Window 平台链接代码库最不常用的方法,尽管在 UNIX 和 Linux 程序中是比较常见的。当一个库被静态链接到可执行程序时,所有这个库中的代码都会被复制到可执行程序中,这会让可执行程序增大许多。而在代码分析时,很难区分静态链接的代码与可执行程序自身的代码,因为在 PE 文件头中没有迹象表命这个文件包含有链接代码。

运行时链接:恶意代码中常用,特别是当恶意代码被加壳或者混淆的时候。使用运行时链接的可执行程序,只有当需要使用函数时,才链接到库,而不是像动态链接模式那样在程序启动时就会链接。

一些 Windows API 允许程序员导入并没有在程序文件头中列出的链接函。其中两个最为常见的时 LoadLibrary 和 GetProcAddress 允许一个程序访问系统上任何库的任何函数,意味着当这些函数被使用时,你无法静态分析出可以样本程序中会链接那些函数。

动态链接:当代码库被动态链接时,宿主操作系统会在程序被装载时搜索所需的代码库,如果程序调用了被连接的库函数,这个函数会在代码库中执行。

PE 文件头中存储了每个被装载的库文件,以及每个被程序所使用的函数信息。

常见 DLL 程序

DLL 描述
Kernel32.dll 常见 DLL,它包含核心系统功能,如访问和操作内存、文件和硬件,等等
Advapi32.dll 这个 DLL 提供了对核心 Windows 组件的访问,比如服务器管理器和注册表
User32.dll 这个 DLL 包含了所有用户界面组件,如按钮、滚动条以及控制和响应用户操作的组件
Gdi32.dll 这个 DLL 包含了图形显示和操作的函数
Ntdll.dll 这个 DLL 是 Windows 内核的接口。可执行文件通常不直接导入这个函数,而是由 Kernel32.dll 间接导入,如果一个可执行文件导入了这个文件,这意味着作者企图使用那些不是正常提供给 Windows 程序使用的函数。一些如隐藏功能和操作进程等任务会使用这个接口
Wsock32.dll 和 Ws2_32.dll 联网 DLL,访问其中任一个 DLL 的程序非常可能连接网络,或者执行网络相关任务
Wininet.dll 这个 DLL 包含了更高层次的网络函数,实现了如 FTP,HTTP 和 NTP 等协议。

导入函数

PE 文件头也包含了可执行文件使用的特定函数相关信息.

导出函数

与导入函数类似,DLL 和 EXE 的导出函数,是用来与其他程序和代码进行交互所使用的.导出函数使得别的程序可以导入并使用这些函数.