恶意代码分析实战07-02

先peview看看exe程序
在这里插入图片描述

注意到这里有两个kernel32.dll,不过仔细看的话,发现其中有一个是假的,名字为kerne132.dll,kernel的l被换成了1
而且出现了lab07-03.dll。看来运行这个exe的时候会加载这个dll
再来看看导入表
在这里插入图片描述

函数如createfile,createfilemappingA,MapViewOfFile可知程序会打开一个文件并且映射到内存中。Findfirstfile,filenextfile可知程序会搜索目录,并使用copyfilea来复制它找到的文件。
接下来看看dll
在字符串中看到了
在这里插入图片描述

看到了看到了ip地址,以及一些字符串hello,sleep,exec等
看看导入表
在这里插入图片描述

有之前分析过的,创建互斥量的函数,说明应该也是确保在当前系统中只运行一个实例
看到其导出表
没有任何导出函数
它不能被另外一个程序导入。不过一个程序还是可以调用loadlibrary来载入没有导出的dll。
接下来使用ida分析dll
在这里插入图片描述

在graph overview中可以看到比较复杂
为了简化分析的流程,我们可以先看call
在这里插入图片描述

第一个call调用库函数_alloca_probe,在空间中分配栈空间
接着是调用Openmutex,createmutex,用于保证同一时间只有这个恶意代码的一个实例在运行
在这里插入图片描述

接下来要建立远程socket,而且要传输和接收数据
我们猜测这是用于与远程机器C&C的
在connect调用的前几行,看到了对inet_addr的调用使用了固定的ip地址127.26.152.13,参数0x50对应10进制80,即80端口。这个端口我们知道通常是web流量
看看是传输的数据是什么
在这里插入图片描述

可以看到,buf参数保存了将要通过网络发送的数据,指向buf的指针代表字符串hello
接下来看recv
可以看到栈上的缓冲区buf
push eax
而前面的指令是lea eax,[esp+120ch+buf]
也就是这个位置esp+120ch+buf保存着的就是从远程接收的指令
再来分析程序接下来会做什么
在这里插入图片描述

可以看到调用了strncmp,检查前5个字符是不是sleep
之后会test eax,eax会判断eax是否为0,也就是判断返回值是否为0
而我们知道strncmp在相等时返回0
那么,也就是说,如果是通过了strncmp比较,则往左走,调用sleep函数睡眠
如果前五个字符不是0,则往右走
可以看到会检查前4个字符是否为exec
在这里插入图片描述

如果是的话,则会往右边走,调用createprocessa
注意到,在调用时有很多参数,关注commandline参数,它可以指出要被创建的进程。
它的内容实际上就是紧跟在exec后面的内容
也就是说比如exec a
则会调用createprocess执行a

执行完毕之后
在这里插入图片描述

跟着流程可以看到是在不停地接收指令

接下来分析exe程序
在这里插入图片描述

可以看到一开始将argc赋给eax,之后cmp eax,2
argc是main的第一个参数,表示的是参数个数,那么这里cmp指令的作用就是比较参数个数是不是2
如果不是2的话则走右边的线,直接就退出了
接下来mov eax,[esp+54h+argv]
将argv给了eax
将字符串warning…移到esi
之后mov eax,[eax+4]相当于是取argv[1]到eax
在这里插入图片描述

接着是循环比较保存在esi,eax的值,如果不一样则跳到一个位置,并从这个函数返回
比较通过后会继续往下走
在这里插入图片描述

上图可以看到调用了createfile等函数,以及打开了kernel32.dll,lab07-03.dll
继续往下
在这里插入图片描述

看到多次调用sub_401040以及sub_401070
它们在做一些内存操作,直接跳过不再分析
继续往下
在这里插入图片描述

可以看到它在打开的两个文件上调用closehandle,所以我们知道这个恶意代码完成了对那些文件的编辑
然后是调用copyfile,复制lab07-03.dll到kernel1.dll
在快结束时看到调用了sub_4011e0
参数为”c:\”
跟进去
在这里插入图片描述

可以看到,这个函数的第一个参数被标记为lpFileName
之后lpFileName作为FindFirstFileA的参数来进行文件查找
也就是说会在c盘进行查找
往下看
在这里插入图片描述

调用了stricmp
它的参数是被压到栈上的,往前找push,可以看到内容为.exe和Str1,将两者进行比较,如果比较成功则往下走执行sub_4010a0
也就是说找到了exe程序就则调用sub_4010a0
跟入
在这里插入图片描述

可以看到调用createfile,createfilemapping,mapviewoffiel用于将找到的程序映射到内存中
后面调用的isbadreadptr是用于验证指针是否有效

往下走
在这里插入图片描述

看到对stricmp的调用
检查字符串值是不是kernel32.dll
之后调用repne scasb,用于扫描字符串,计算字符串长度
rep movsd是用于进行字符串的复制,会将esi的内容覆盖到edi中
其实直接将其理解为strlen,memcpy就可以了
而edi由于mov edi,ebx,相当于我们要去看ebx
而往上走,可以知道ebx是str1
那么我们也就知道了这段的功能,就是在搜索程序里是否有kernel32.dll,如果有则将esi的内容覆盖edi
我们去看看esi内容
在这里插入图片描述

按A将其转换
在这里插入图片描述

在这里插入图片描述

现在可以看其实表示的是伪造的kernel32.dll
这样子我们就知道这个可执行文件会遍历寻找exe文件,再在exe文件周到kernel32.exe,并使用kerne132.dll(假的)来替换它。加上之前分析到的,lab07-03.dll被复制到c:\windows\system32目录并命名为kerne132.dll。我们可以知道,这个恶意代码修改可执行文件让他们访问kerne132.dll,而不是真的kernel32.dll

接下来运行后进行分析
我们使用process monitor来进行监控
在这里插入图片描述

设置好过滤条件,尝试直接运行
在这里插入图片描述

接下来cmd运行,并且传入字符串
在这里插入图片描述

稍微卡顿了一会儿,可以看到检测到了很多信息
在这里插入图片描述

按照之前的分析,程序会感染c盘所有的exe文件
之前我放置了一个Lab07-01.exe
在这里插入图片描述

使用dependency walker看看是否感染成功
在这里插入图片描述

可以看到一个伪造的kerne132.dll
以及真的kernel32.dll
之前说到程序会复制Lab07-03.dll到system目录下
我们去看看
在这里插入图片描述

可以看到一个是真的,一个是假的
r分析假的dll
在这里插入图片描述

注意到假的dll调用了真的kernel32.dll
而且相比之前的lab07-03.dll
多了很多导出函数
在这里插入图片描述

其实这些导出函数都是真的kernel32.dll的导出函数重定向得到的,这样一来假的kerne132.dll也可以完全实现真的kernel32.dll的功能
Q1这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行
A1.这个程序通过写一个DLL到C:\Windows\System32, 并修改系统上每一 一个导入它的.exe文件,来达到持久化驻留
Q2这个恶意代码的两个明显的基于主机特征是什么
A2.这个程序通过硬编码来使用文件名kerne132.dll, 这是一个很好的检测特征(注意数字1的使用而不是字母l)。
Q3这个程序的目的是什么
A3.这个程序的目的是创建一个很难删除的后门,来连接到一个远程主机。这个后门有两个命令:一个用来执行命令,一个用来睡眠。
Q4.一旦这个恶意代码被安装,如何移除?
A4.这个程序很难被删除,是因为它感染系统上的每一个.exe 文件。我们如果在虚拟机中操作的话,最好的办法就是恢复快照。也可以留下这个恶意的kerne132.dll 文件并修改它,来删除恶意的内容。另外,可以复制kernel32.dll, 并将它命名为kerne132.dII, 或者写一个程序来取消所有对PE文件的修改

kernel32.dll是Windows操作系统中的一个重要的32位动态链接库文件,它主要负责管理内存、进程和线程。在操作系统的运行中,kernel32.dll扮演着核心的角色。然而,在某些情况下,这个文件可能问题,导致系统出蓝屏。 蓝屏通常是由于硬件问题、驱动程序冲突、软件问题或者系统文件损坏等原因引起的。如果蓝屏与kernel32.dll相关,可能是以下几种情况: 1. kernel32.dll文件损坏或丢失:这可能导致系统无法正常访问或使用该文件,从而引发蓝屏。 2. 系统或应用程序与kernel32.dll之间的不兼容:例如,新安装的应用程序可能替换旧版本的kernel32.dll,这可能与系统或其他程序不兼容。 3. 驱动程序错误:某些驱动程序可能对kernel32.dll进行不正确的操作,导致系统错误。 4. 病毒或恶意软件攻击:病毒或恶意软件可能破坏kernel32.dll文件,从而引起系统崩溃。 对于kernel32.dll引发的蓝屏问题,可以尝试以下几种解决方法: 1. 使用系统文件检查器(SFC)扫描并修复系统文件。 2. 进行病毒扫描,确保没有病毒或恶意软件破坏kernel32.dll。 3. 更新所有的硬件驱动程序,确保它们与当前的操作系统版本兼容。 4. 还原或重新安装引起问题的应用程序,或者尝试在兼容模式下运行。 5. 如果问题依然存在,考虑进行系统恢复或重新安装操作系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值