恶意代码分析实战 — Lab 11-03

Lab11-03

Strings exe

Strings dll

dil分析Exports导出函数是zzz

Imports导入表user32.dll有关于键盘记录的函数操作

Process monitor添加过滤器

运行lab11-03.exe,监控到在system32下新建了一个inet_epar32.dll

新建的文件与lab11-03.dll是同一个

Idapro载入lab11-03.exe

首先将lab11-03.dll复制到system32下并重命名为inet_epar32.dll

之后将system32下cisvc.exe当做参数传入sub_401070函数

最后调用net start cisvc开启服务

进入sub_401070函数

程序结构比较复杂,查看此函数xrefs from调用函数交叉引用图

调用CreateFileA,CreateFileMappingA,MapViewOfFile等函数将cisvc.exe映射到内存进行读写操作,并使用UnmapViewOfFile操作释放映射

分析中遇到rep movsb指令,前边几个mov,对应于类似memcpy()操作

使用F5查看伪代码,证实是memcpy复制操作

复制内容为byte_409030处数据

此处数据可读性很差,看不出内容,按下C键转化为代码

然后转化为代码,并且有个jmp跳转

跳转到此处,分析发现两个参数

  1. C:\windows\system32\inet_epar32.dll     //复制重命名的dll文件
  2. Zzz69806582                                                    //dll文件的exports导出函数

所以很可能这一部分是shellcode,跳转到此处调用dll导出函数

分析感染前后cisvc.exe差异

使用ultra compare载入感染前后两个cisvc.exe程序

第一处差别出现在00000100处

感染后程序的入口点已经发生变化

第二处差异出现在00000E20 — 00000F50处,感染后添加了大量代码

添加的shellcode就是跳转的代码的机器码

Idapro载入感染后的cisvc.exe程序,可以看到程序入口地址为01001A28

然后运行直接跳转到loc_1001B2C处,然后call sub_1001AD5

进入此call后,首先查看01001B0A处的call操作,结合OD来动态分析

运行到01001B0A时,显示调用的是kernel32.LoadLibraryExA

此时的eax参数值为system32下inet_epar32.dll

同样方法分析后边两个call函数,单步运行到01001B16处时,push eax

此时压栈的eax值为export导出函数zzz

在01001B1B处调用kernel32.GetProcessAddress,获取zzz的函数地址

在堆栈中zzz已压栈

Call 01001B1B结束后,返回值eax,为zzz函数地址

然后call eax即调用zzz导出函数

此处的指令就是感染后添加的shellcode,执行结束后jmp 0100129B回到cisvc.exe感染前的入口地址

所以程序感染cisvc.exe程序,植入shellcode并修改入口地址,运行时加载inet_epar32.dll,调用zzz函数,触发shellcode,之后返回到正常的cisvc.exe执行入口

接下来分析这个dll文件做了哪些操作,idapro载入lab11-03.dll,来到zzz函数

CreateThread创建一个线程,重要的参数是StartAddress这个地址参数

进入地址后分析,首先程序OpenMutexA一个名为MZ的互斥量

如果不存在就CreateMutexA创建这个MZ互斥量

然后CreateFileA创建system32\kernel64x.dll文件

之后SetFilePointer获取文件指针

其中dwMoveMethod = 2表明写入点在当前文件末尾

然后调用call sub_10001380函数,这个函数主要就是WriteFile功能,不过在写入之前有一个call sub_10001030,表明写入的内容

进入此call后先有一个call sub_10001000函数

进入这个call,是获取当前活动窗口和窗口标题

返回上层之后,call sub_10001030函数有大量的GetAsyncKeyState操作,用于记录键盘操作

并且有记录是否按下shift键

之后WriteFile写入kernel64x.dll文件并短暂sleep,然后循环键盘监听记录操作

访问kernel64x.dll文件,可以看到之前操作的程序以及所有按键记录

您可能还喜欢...