恶意代码分析实战 IDA分析 lab 7-3 一个通过感染主机exe 修改kernel.dll为恶意dll的后门程序 要做清理的话 是很难的!

 winxp运行该后门后:

 

 

 

win7下:

运行前:

 

 

运行后还是一样,即便是用cmd管理员运行。看来该病毒只是适合在xp下运行。

 

 

 

 

静态分析strings + IDA pro

查看字符串
exe
在这里插入图片描述

kerne`132`.dll
kernel32.dll
C:\windows\system32\kerne`132`.dll
C:\Windows\System32\Kernel32.dll
 

WARNING_THIS_WILL_DESTROY_YOUR_MACHINE 本书专制
dll

在这里插入图片描述
exec、sleep、hello
127.26.15.13 恶意代码可能访问该IP地址
SADFHUHF
导入函数
exe重点看kernel32.dll下大量和文件相关的函数
在这里插入图片描述
CreateFileACreateFileMappingA以及MapViewOfFile表明该程序可能打开一个文件,并将其映射到内存中。这个 FindFirstFileA 和FindNextFileA函数组合,可能会搜索文件,并使用CopyFileA 对找到的文件进行复制操作。该程序没有导入Lab 07-03.dll(DLL中的函数)、LoadLibrary或者GetProcAddress,暗示它可能没有在运行时加载那个DLL。
dll文件的导入函数
重点看kernel32.dll
在这里插入图片描述
GetProcessA函数,可能会创建另一个进程。

分析EXE

.text:00401440                 mov     eax, [esp+argc]
.text:00401444                 sub     esp, 44h
.text:00401447                 cmp     eax, 2#①
.text:0040144A                 push    ebx
.text:0040144B                 push    ebp
.text:0040144C                 push    esi
.text:0040144D                 push    edi
.text:0040144E                 jnz     loc_401813#②
.text:00401454                 mov     eax, [esp+54h+argv]
.text:00401458                 mov     esi, offset aWarning_this_w ; "WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"
.text:0040145D                 mov     eax, [eax+4]#③
.text:00401460
.text:00401460 loc_401460:                             ; CODE XREF: _main+42j
.text:00401460                 mov     dl, [eax]#④
.text:00401462                 mov     bl, [esi]
.text:00401464                 mov     cl, dl
.text:00401466                 cmp     dl, bl
.text:00401468                 jnz     short loc_401488
.text:0040146A                 test    cl, cl
.text:0040146C                 jz      short loc_401484
.text:0040146E                 mov     dl, [eax+1]
.text:00401471                 mov     bl, [esi+1]
.text:00401474                 mov     cl, dl
.text:00401476                 cmp     dl, bl
.text:00401478                 jnz     short loc_401488
.text:0040147A                 add     eax, 2
.text:0040147D                 add     esi, 2
.text:00401480                 test    cl, cl
.text:00401482                 jnz     short loc_401460#⑤
.text:00401484
.text:00401484 loc_401484:                             ; CODE XREF: _main+2Cj
.text:00401484                 xor     eax, eax
.text:00401486                 jmp     short loc_40148D
 

①:cmp eax, 2检查参数个数是否为2,如果不是,跳转另一节,直接退出。在③处mov eax, [eax+4]移动argv[1]到EAX,以及将字符串"WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"移动到ESI寄存器。在④和⑤之间的循环,会对EAX和ESI中的值进行比较,如果不相同,则跳转,并从这个函数返回,不执行其他操作。
所以该程序的正确用法是

Lab 07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE
 

在字符串C:*处
在这里插入图片描述
sub_4011E0函数
在这里插入图片描述
FindFirstFileA用于检索C盘驱动器
在这里插入图片描述
比较用一个字符串和.exe进行检查,调用sub_4010A0函数,查看是否匹配
sub_4010A0
为了节省时间,只查看函数调用。CreateFileACreateFileMappingA 以及MapViewOfFile表明该程序打开文件,并将其映射到内存中。
出现了大量的IsBadReadPtr

.text:0040116E                 push    offset Str2     ;"kernel32.dll"
.text:00401173                 ⑥push    ebx             ; Str1
.text:00401174                 ①call    ds:_stricmp
.text:0040117A                 add     esp, 8
.text:0040117D                 test    eax, eax
.text:0040117F                 jnz     short loc_4011A7
.text:00401181                 mov     edi, ebx
.text:00401183                 or      ecx, 0FFFFFFFFh
.text:00401186                 ③repne scasb
.text:00401188                 not     ecx
.text:0040118A                 mov     eax, ecx
.text:0040118C                 mov     esi, offset dword_403010
.text:00401191                 ⑤mov     edi, ebx
.text:00401193                 shr     ecx, 2
.text:00401196                 ④rep movsd
.text:00401198                 mov     ecx, eax
.text:0040119A                 and     ecx, 3
.text:0040119D                 rep movsb
 

在②处检查是否为kernel32.dll。③处调用repne scasb,④处调用rep movsd,在功能上等价于strlenmemcpy函数。memcpy调用写入的地址在EDI中,首先需要知道EBX。EBX在⑥处压入栈传给strcmp函数,意味着函数如果找到字符串kernel32.dll,这段代码将用某些东西替换该字符串。什么东西呢?转到rep movsb,查看源头在dword_403010
在这里插入图片描述在这里插入图片描述

检查这个程序如何修改kernel32.dll以及Lab07-03.dll。使用md5检查
发现运行Lab07-03.exe程序后Lab07-03.dll名称修改为kerne132.dll,并且有导出函数,该导出函数是kernel32.dll中的导出函数,并且作了重定向,所有功能还是kernel32.dll中的功能。

所有在main方法中访问kernel32.dll以及Lab07-03.dll的代码是在解析kernel32.dll的导出节,并在Lab07-03.dll中创建一个导出节,来导出同样函数并创建到kernel32.dll的转发。好绕啊

分析DLL

在这里插入图片描述
__alloca_probe:在空间分配栈

在这里插入图片描述

OpenMutexA、CreateMutexA 互斥量
在这里插入图片描述

远程socket建立建立连接
使用了固定ip地址127.26.152.13。端口0x50,为80端口,常用于Web流量。
数据如何传输?
send
在这里插入图片描述
recv
在这里插入图片描述
判断回复的内容:

在这里插入图片描述
strncmp检查是否字符串是否为"sleep",并检查返回值是否为0,如果是休眠60秒。
在这里插入图片描述
检查该缓冲区是否以"exec"开始。如果是strncmp返回0,然后顺序执行到jnz处,调用CreateProcessA函数。
该函数的一个重要参数是CommandLine,告知被创建的进程。未发现写过程。
对应的值在0xFFB处。

1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?

通过DLL到C:\windows\system32\,并修改系统上每一个导入它的.exe文件,达到持久化驻留。

2.这个恶意代码的两个明显的基于主机特征是什么?

硬编码使用文件名kerne132.dll
硬编码使用一个的互斥量SADFHUHF

3.这个程序的目的是什么?

创建后门程序来接远程主机,且难以被删除。两个命令分别用于执行和休眠

4.一旦这个恶意代码被安装,你如何移除它?

难以删除,因为感染了系统上每一个使用kerne132.dll的exe文件。

最好的方法是从备份系统中恢复或者留下这个恶意kerne132.dll文件并修改它,或者复制kernel32.dll为kerne132.dll进行替换,取消对所有PE文件的修改

参考

1.斯科尔斯基, 哈尼克. 恶意代码分析实战[M]. 电子工业出版社, 2014.

 
posted @ 2022-10-02 23:43  bonelee  阅读(245)  评论(0编辑  收藏  举报