【逆向】恶意代码分析实战Lab7-3

初级静态分析

Lab7-3.exe

查壳

提取字符串 查看导入导出表

通过strings.exe我们可以找到一下有意思的字符串

CloseHandle
UnmapViewOfFile
IsBadReadPtr
MapViewOfFile
CreateFileMappingA
CreateFileA
FindClose
FindNextFileA
FindFirstFileA
CopyFileA
KERNEL32.dll
malloc
exit
MSVCRT.dll
kerne132.dll
kernel32.dll
.exe
C:\*
C:\windows\system32\kerne132.dll //这里kerne132里面是数字1还不是字母l
Kernel32.
Lab07-03.dll
C:\Windows\System32\Kernel32.dll
WARNING_THIS_WILL_DESTROY_YOUR_MACHINE


这儿结合导入表 CreateFileA、CreateFileMappingA,以及MapViewOfFile 猜测这个程序可能打开一个文件,并将这个文件映射到内存
MapViewOfFile:Maps a view of a file mapping into the address space of a calling process.
这个函数将PE文件拉伸,再将拉伸的PE加载到地址空间里
FindFirstFileA和FindNextFileA 以及字符串搜索到的C:*和.exe猜测程序要遍历C盘下所有的exe
CopyFileA复制文件
我们发现这个程序并没有加载Lab7-3.dll 也没有LoadLibrary + GetProcAddress的动态加载组合

Lab7-3.dll

提取字符串 查看导入导出表

CloseHandle
Sleep
CreateProcessA
CreateMutexA
OpenMutexA
KERNEL32.dll
WS2_32.dll
strncmp
MSVCRT.dll
free
_initterm
malloc
_adjust_fdiv
exec
sleep
hello
127.26.152.13
SADFHUHF


sleep休眠 CreateProcessA创建进程 CreateMutexA OpenMutexA 互斥量操作 exec命令执行 IP地址 ws2_32.dll是Windows Sockets应用程序接口

动态分析

运行程序时会快速退出,导入火绒剑也没有什么可疑的行为 这个DLL没有什么导出也不会工作

高级静态分析

Lab7-3.dll

DllMain分析

这段汇编先对互斥体SADFHUHJ进行操作防止多开 然后通过WSAStartup初始化一个网络套接字

然后创建一个socket 向127.26.152.13 发起connect请求 然后发送hello
连接失败则shutdown退出
连接成功则调用recv来接受127.26.152.13的消息 消息长度小于1000h 如果recv失败则跳回hello

当recv成功接收后, 将会执行到1000113C处的代码
将接受到的消息的前5个字节与sleep作比较
如果判断成功则休眠60s 然后跳转到hello处
如果判断失败 则接受到的消息的前4个字节与exec作比较
与exec比较成功则用CreatProcess创建一个进程
如果判断失败则继续判断接受到的消息的第一个字节是否为q
与q比较成功则清理退出程序
如果都不满足则Sleep60s继续回到hello处进行循
这个DLL功能是通过远程下发的指令来执行不同功能 :sleep:执行休眠 exec:执行创建进程 q:清理退出程序

Lab7-3.exe


这儿先判断参数是否为两个 如果不是两个则直接退出 然后把WARNING_THIS_WILL_DESTROY_YOUR_MACHINE放在esi里 把第二个参数放在eax里
之后则是将eax和esi里的字符串一个字母一个字母的进行比较
所以这个程序的正确打开方式为 lab7-3.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE

这一部分是创建了C:\Windows\System32\Kernel32.dll然后对Lab07-03.dll进行了内存映射

这里是一大堆对sub_401040和sub_401070的调用
这两个函数都比较短 并且没有什么相互调用 都是比较内存 计算偏移之类 对我们的分析没有太大的意义

最后这儿对两个dll进行清理并关闭 然后将样本中的dll复制为kerne132.dll
再传参数C:\*调用sub_4011E0然后关闭
分析sub4011E0函数是对整个C盘的exe文件进行遍历 而里面包含的sub4011A0则是kernel32.dll替换为kerne132.dll 循环结束后程序退出

程序的行为

运行exe查看是否为两个参数并且检查第二个参数 然后读取kernel32.dll的导出表, 将其复制到lab7-3.dll的导出表中, 然后将lab7-3.dll复制到系统目录下更名为kerne132.dll
然后遍历C盘所有exe文件, 遍历每个文件的INT表, 如果包含kernel32.dll字符串则替换为kerne132.dll ,程序运行时就会触发lab7-3.dll
而dll文件功能则是从远程服务器接收命令来执行不同的恶意操作

posted @ 2021-03-17 18:54  一窝吉尼斯  阅读(377)  评论(0)    收藏  举报