恶意代码分析实战 第七章课后实验

看一下字符串:

然后分析主函数:

这个main函数很简短,看到了StartServiceCtrlDispatcherA函数,这个函数是来实现一个服务,并且指定了要调用的函数就是sub_401040,双击进去看一下:

发现这里调用了一个OpenMutexA函数,这个函数会尝试获取"HGL345"这个互斥量,获取到就说明已经有一个恶意程序在运行了,则调用ExitProcess结束。没有获取到就调用CreateMutexA这个函数,这个函数的目的就是创建一个名字为"HGL345" 的互斥量。继续往下看:

OpenSCManagerA这是一个用于打开服务控制管理器的句柄,getcurrentprocess这是一个伪句柄,可以复制,但不可继承。GetModuleFileNameA这个函数用来获取进程路径。然后CreateServiceA这个函数利用前面的创建一个新的服务"Malservice"。在这里看到了 dwStartType这个参数表示自启动,这个lpBinaryPathName参数保存了刚刚获取的路经,还有一个dwServiceType参数,这是一个服务类型。

这里使用到了SystemTime结构体,首先给.wYear.wDayOfWeek.wHour.wSecond全部赋值为0,然后又把wYear设置为834h,转换成十进制为2100,也就是2100年1月1日的凌晨12点,然后调用SystemTimeToFileTime将这个时间转换为文件时间。

看到了SetWaitableTimer函数,上面的时间就要传到这里。之后利用WaitForSingleObject函数进入等待,等啊等,来看一下如果等到了2100年会干什么:

会执行下面的代码

这里有一个值为14h的循环变量,换成十进制为20,调用了CreateThread,创建线程。下面还看到了esi的自减,也就是循环20次,那么这20次都在干什么呢,双击StartAddress看一下:

也就是一直在加载"http://www.malwareanalysisbook.com"这个网址。

下面来看一下问题

 

问题1:

这个程序会创建一个名为MalService的服务,里面有一个参数dwStartType为2 时自启动,所以可以确保程序继续进行。

问题2:

为了确保只有一个实例在运行。

问题3:

主机特征一共有两个,一个是互斥量"HGL345",另一个是服务"Malservice"

问题4:

网络特征有两个,一个是网站"http://www.malwareanalysisbook.com"另一个用户代理"Internet Explorer 8.0"。

问题5:

这个程序的目的就是运行程序后,等到2100年一月一日的午夜,对上面那个网址发起攻击DdoS(Distributed Denial of Service分布式拒绝服务)攻击。

问题6:

程序不会停止。

先分析一下程序:

首先,这个程序调用了OleInitialize,初始化组件对象模型(COM)库,然后调用CoCreateInstance用于创建一个COM的对象。返回的COM对象被标记为ppv。我们需要检查接口标识符(IID)以及类标识符(CLSID)来判断实现什么com功能。

双击riid查看一下:

可以看到riid的值为:D30C1661-CDAF-11D0-8A3E00C04FC9E26E 。

Rclsid的值为0002DF01-0000-0000-C000000000000046。

看书可以知道这两个分别是iid就是IwebBrowser2,clsid就是internet explorer。

现在来看一下这个2ch的偏移量,在书上已经明确的说了这个就是navigate,

这个navigate函数会允许程序启动Internet Explorer,并且访问一个网址。后面的程序会调用一些清理函数,然后程序也就结束了。

来看一下问题:

问题1:

这个程序运行一次就结束了。

问题2:

最终目的就是打开一个网址

问题3:

网址被打开,显示页面也就结束了。

 

静态分析:

首先用Dependency Walker打开Lab07-03.dll,在kernel32里看到了一些调用的函数:

这里发现了与互斥量相关的函数CreateMutexA和OpenMutexA,这是创建和打开一个互斥量。还看到了CreateProcessA,说明会创建一个进程。最后会调用Sleep函数休眠。

看一下Lab07-03.dll的字符串:

在这里看到了一个IP地址,说明这个恶意程序有可能会连接到这个地址。Sleep,hello,exec这三个应该在ida的分析中重点看一下。

用ida打开Lab07-03.dll来分析一下:

看到了调用了__alloca_probe,这是给栈分陪空间,继续往下看

这里调用了OpenMutexA和CreateMutexA,这里的作用和之前遇到过的一样,目的就是为了保证只有一个实例在运行。

调用了函数connect,在上面看到了一个IP地址"127.26.152.13",可以推断这个程序是要连接到这个IP地址。那么就要想,连接成功之后呢会怎么样呢?会发送什么样的数据呢?继续向下看:

在这里看到了send,这里是要发送buf,buf里面存放的就是要发送的数据,可以看到buf里的内容就是hello。这好像是一个信号,告诉远端的远程服务器已经准好接受指令了。

这里调用了recv,本地计算机在接收到命令后,接受到的内容就会保存到esp+120Ch+buf这个位置的栈空间,

这里调用了strncmp这个函数,这个函数就是比对接受到的5个字符是不是sleep,是的话就休眠一分钟。说明如果远程服务器发送来的指令是sleep那么本机就会进行休眠,

这里的strncmp函数用来对比接受到了4个字符是不是exec。如果是就会执行下面的程序:

这里调用了CreateProcessA函数,我们看到了lpCommandLine这个参数,这个参数可以告诉我们创建的进程是什么。执行完之后就循环回去了。现在可一知道这个程序实现后门功能。让攻击者发送信息来启动本机上的可执行文件。

现在来分析一下Lab007-03.exe程序。

首先还是先用Dependency Walker来查看一下:

在这里我们发现了CreateFileA、CreateFileMappingA以及MapViewOfFile,说明这个程序很可能会打开一个文件,并将其映射到内存中。而FindFirstFileA以及FindNextFileA的函数,说明这个程序会在计算机中搜索文件或目录。CopyFileA说明这个程序会进行文件的拷贝

下面查看一下字符串:

在这里发现了两个非常像的字符串,kernel32.dll和kerne123dll,注意:这两个是不一样的,一个是“l”一个是“1”,这就说明第二个是伪造出来的。.exe说明这个恶意程序会对系统中的.exe文件进行一些操作。还看到了两个路径,一个真的,一个假的,说明恶意程序可能会将伪造的动态链接库拷贝到这里。还有一个Lab07-03.dll,说明这个恶意程序很有可能会调用这个.dll文件.

下面用ida来分析一下Lab07-03.exe。

这里将参数argc与2进行比较,也就是判断是否有两个参数,不等于2 程序就退出了。是就继续。

将第二个参数argv赋值给eax,将字符串"WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"赋值给esi。

可以看到,下面的程序一直在比较eax和esi的值,只有相等才可以继续运行,所以呢这里就要运行一个参数:Lab07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE。
 
 
继续向下看,看到调用了好几个CreateFileA,CreateFileMappingA,MapViewOfFile函数,目的就是将Kernel32.dll以及刚刚分析过的恶意程序"Lab07-03.dll"映射到内存里。

下面有很长很长一段代码调用了sub_401040和sub_401070,这里就不进行分析了。向下找API函数就可以了:

这里关闭了之前两个映射的句柄,然后将Lab07-03.dl改为kerne132.dll并且复制到系统目录下。

下面看到调用了sub_4011E0,双击进去看一下:

第一个参数为lpFileName,这很可能是一个文件名,还可以看到调用了FindFirstFileA函数,并且lpFileName作为参数赋给了文件查找函数FindFirstFileA。恶意程序有可能搜素这个C盘目录。

向下看到调用了_stricmp这个函数的作用是用来比较两个字符串,在上面找到了这两个字符串:

分别是.exe和Str1。可以看到如果这两个字符串比对成功就会跳转到40140c处。分析到这里就可以很明显的知道这个恶意程序就是要搜索C盘里所有的.exe文件进行下一步操作。下面来看一下sub_4010A0,双击进去:

看到这里调用了CreateFileA,CreateFileMappingA,MapViewOfFile。其目的就是将以后找到的.exe文件映射到内存里。下面还有很多IsBadReadPtr函数,用来检查进程是否有权限访问指定的内存块。

接下里看到调用了_stricmp函数,将kernel32.dll与Str1进行比较,如果能够匹配,下面就执行repne scasb以及rep movsd指令,rep movsd会将esi中的内容覆盖到edi中。可以看到,esi中的内容就是dword_403010,而edi中的内容是stricmp的Str1参数的内容。那么我们可以看一下dword_403010中的内容是什么,双击进入:

将光标放在.data:00403010的位置,按下键盘上的A键进行转换结果如下:

在这里可以看到伪造的动态链接库kerne132.dll,那么其实分析到这里我们就可以知道了,这个恶意程序其实会搜素C盘中的所有.exe程序,将这些程序的导入表中的kernel32.dll修改为kerne132.dll,这样一来,每当这些exe程序运行的时候,就会自动加载恶意.dll程序,实现后门的功能。

下面我准备在虚拟机里运行一下这个恶意程序,使用Process Monitor监测,打开Process Monitor,设置好筛选器,双击Lab07-03.exe,然后运行C:\>Lab07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE   这时Process Monitor就已经帮助我们监测到好多东西了,(提示:在运行前虚拟机要先拍好快照,之后恢复快照就可以了!)
 

说明已经开始感染了,具体的就不一一分析了,上面已经分析过了。下面来看问题:

问题1:

这个程序通过复制一个恶意dll文件到C:\Windows\System32目录,并且修改C盘中的所有导入kernel32.dll的.exe程序,让这些程序导入该恶意.dll程序,从而达到目的。

问题2:

有两个机遇主机的特征:一个是经过伪造的文件“kern132.dll”,另一个是名为SADFHUHF的互斥量。

问题3:

这个程序的目的是创建一个难以删除的后门,来连接一个远程主机。

问题4:

在虚拟机里运行可以先拍快照,恢复一下就好。

这个程序很难被删除,因为它会感染C盘中的所有exe文件。最好的办法是写一个程序,用于修改所有被感染的文件,将它们导入表中伪造的dll文件名修改为真实的dll文件名称。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值