在恶意代码分析过程中,关注的重点是恶意代码的整体行为机制和运行逻辑,但是现在由于我们对底层实现逻辑还不太清楚所以花费了大量的时间在具体实现上,要在积累的前提下大胆猜测小心求证。今天我们换一种分析方式,先通过基础静态分析大致猜测恶意代码行为然后再具体分析具体的实现机制。一. 注册表行为
在恶意代码当中通过注册表实现自启动是一种常见的驻留机制,是否存在注册表有关行为我们可以通过查看导入函数表来判断。
常见的注册表有关函数有:
- RegCreateKeyEx()//创建注册表键值
- RegSetValueEx()//写入注册表键值
- RegDeleteValue()//删除注册表键值
- RegOpenKeyEx()//打开注册表内容
- RegQueryValueEx()//访问注册表内容
在该恶意代码样本当中可以看到:
显然存在注册表有关行为。
接下来我们可以具体分析该样本到底向注册表当中写入了什么内容以及写入这些内容的目地。
在HKEY_LOCAL_MACHINE_SOFTWARE\Microsoft \XPS键值下写入了data内容,这个data里面的具体内容可以通过动调得到。
写入的实际上是后门行为所需要的网站以及端口等信息。
这里是将注册表当中的内容读取到对应的变量当中,用于后续的后门操作。
二. 命令行有关行为
命令行的行为直接通过导入函数和字符串不太容易看出,但是有以下几个地方可以帮助我们分析:
- 双击运行程序后程序会自动删除。
- 在分析main函数的时候发现有大量的命令行参数比较操作。
这里先介绍一些有关命令行参数的基础知识:
main参数主要关注的是argc(命令行参数个数),argvargc-1
argv[0] 存储程序的名称,argv[1] 是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。
这里可以看到实际上就是通过命令行参数的不同实现程序的运行逻辑不同。
在分析过程当中这里是花费时间最长的,因为对应不同的命令行参数不同最后的程序运行逻辑不同。我们需要逐个去分析,这就需要足够的逆向基础功底可以迅速归纳出函数实现的功能。
这里直接给出结论:
- 参数一为-in时为安装服务
- 参数一为-re时为卸载服务
- 参数一为-c时配置注册表
- 参数一为-cc时打印注册表配置
- 命令行参数最后一个必须为abcd否则直接退出自动卸载程序。
三. 服务有关操作
在Windows系统当中服务是什么?
Windows服务可视为没有界面的普通应用程序,无需用户干预即可启动和停止。它们是 Windows 操作系统所必需的,用于创建和执行需要长时间运行的进程,以执行不同的任务。
因为服务的特殊性,在恶意代码当中经常通过创建服务来实现其功能。
服务有关api函数
- OpenSCManagerA()//打开服务控制管理器
- CreateService()//创建一个服务
四. 后门操作
后门当中最常见的就是通过send等一系列网络有关函数实现,这个程序当中可以看到很多的有关网络的函数,显然应该是存在后门。
这里就是通过接受返回的字符串,然后相应做出反应。
包括sleep, UPLOAD,DOWNLOAD, CMD, NOTHING等指令,接受指令后有相应函数处理这些操作。