一、分析Lab07-1
1.在ida中打开查看 main函数。
StartServiceCtrlDispatcherA函数被程序用来实现一个服务,并且它通常立即被调用。这个函数指定了服务控制管理器会调用的服务控制函数。这里也能看出sub_401040会在调用StartServiceCtr1DispatchA之后被调用。Malservice恶意代码创建进程的名字。
2.查看sub_401040函数。
OpenMutex函数是打开现有的命名互斥对象。所以这里是打开名为 "HGL345" 的互斥量。如果可以打开,说明该互斥量已经存在,说明已经有一个进程运行了这段代码,因此当前进程将退出以避免重复运行。如果该互斥体对象不存在,则创建名为"HGL345" 的互斥量。
3.这段代码设置了一个时间。
接下来,程序调用CreatewaitableTimer、SetwaitableTimer,以及waitForSingle0bject。对我们的目的来说最重要的参数是传给SetwaitableTimer的lpDueTime参数。这个参数是systemTimeToFileTime返回的FileTime,如前面的清单所示。这段代码随后使用waitForSingleObject进入等待,直到2100年1月1日。
4.绕过时间的设置
所以如果要立即执行代码,则需要绕过时间的设置,即需要直接跳转到 StartAddress 函数,然后运行代码20次,0x14=20
5.查看StartAddress
循环末尾的jmp指令是一个无条件跳转,这意味着这段代码永远不会终止;它会调用InternetOpenUrlA,并且一直下载www.malwareanalysisbook.com的主页。而且由于CreateThread被调用了20次,所以会有20个线程一直调用InternetopenUrlA。显然,这个恶意代码的目的是将自己在多个机器上安装成一个服务,进而启动一个DDoS攻击。如果所有被感染的机器在同一时间(2100年1月1日)连接到服务器,它们可能使服务器过载并无法访问该站点。
总之,这个恶意代码使用互斥量来保证同一时刻只有一份实例在运行,它创建一个服务确保系统重启后它再次运行,直到2100年1月1日,然后继续无限期地下载www.malwareanalysisbook.com。
二、绕过时间
1、修改Lab07_01.exe
这条把jnz这条语句跳转的地址改成startadrss的入口地址。Jnz这条语句的地址在ida看是0x00401118,startadrss的入口地址是0x00401150.
修改使得绕过时间触发机制运行StartAddress,在OD打开,跳转到00401118,双击语句修改成jnz short 00401150.如图。
2.修改下图StartAddress中的相关参数
打开winhex,把这里改成一个不存在的ip地址 ,win2003的浏览器版本是6.0,所以也需要改一下。
3.Win2003虚拟机,运行修改后的exe。
4.物理机捕获该exe发出的网络连接报文,与上一步修改的参数匹配。