看一下字符串:
然后分析主函数:
这个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文件名称。