恶意代码分析实战实验Lab 7-1

静态分析IDA Pro

字符串:
在这里插入图片描述
可以看到有一个 MalService,可以推测该程序创建了一个系统服务。 HGL345暂定。网址信息http://www.malwareanalysisbook.com用户代理信息Internet Explorer 8.0
查看导入函数
比较重要的导入函数

Address  Ordinal Name                        Library 
-------  ------- ----                        ------- 
00404000         CreateServiceA              ADVAPI32
00404004         StartServiceCtrlDispatcherA ADVAPI32
00404008         OpenSCManagerA              ADVAPI32
00404010         CreateWaitableTimerA        KERNEL32
00404014         SystemTimeToFileTime        KERNEL32
00404018         GetModuleFileNameA          KERNEL32
0040401C         SetWaitableTimer            KERNEL32
00404020         CreateMutexA                KERNEL32
00404028         OpenMutexA                  KERNEL32
0040402C         WaitForSingleObject         KERNEL32
00404030         CreateThread                KERNEL32
004040C0         InternetOpenUrlA            WININET 
004040C4         InternetOpenA               WININET 

CreateServiceAOpenSCManagerA函数表明创建服务,以确保该程序可以随系统运行。
StartServiceCtrlDispatcherA函数被系统用于实现服务,且一般立即被调用。该函数制定了服务控制管理器会调用的函数。
它所制定的的是sub_401040
在这里插入图片描述
检查sub_401040函数
在这里插入图片描述
第一个函数是OpenMutexA,它尝试获取一个名为"HGL345“的互斥量句柄。如果调用成功,程序就会退出。
下一个调用
在这里插入图片描述
创建名为”HGL345"的互斥量,两处组合调用,用于保证同一时间这个程序只有一份实例在运行。因为如果有一个实例在运行了,则OpenMutexA第一次调用成功,程序就会退出。
OpenSCManagerA打开服务控制管理器句柄,以便该程序可以添加或修改服务。
GetModuleFileNameA返回当前可执行程序或一个被加载DLL的全路径名。
返回的全路径名被CreateServiceA用于创建一个新的服务。
在这里插入图片描述
MSDN

SC_HANDLE CreateServiceA(
  SC_HANDLE hSCManager,
  LPCSTR    lpServiceName,
  LPCSTR    lpDisplayName,
  DWORD     dwDesiredAccess,
  DWORD     dwServiceType,#3
  DWORD     dwStartType,#2
  DWORD     dwErrorControl,
  LPCSTR    lpBinaryPathName,#1
  LPCSTR    lpLoadOrderGroup,
  LPDWORD   lpdwTagId,
  LPCSTR    lpDependencies,
  LPCSTR    lpServiceStartName,
  LPCSTR    lpPassword
);

这里的1 2 3分别对应BinaryPathName、StartType和ServiceType。
MSDN中还列举了StartType和ServiceType的有效值(此处未列全)。
在这里插入图片描述
在这里插入图片描述
和时间相关
在这里插入图片描述
结构体
834h 表示10进制2100,表示2100年1月1日午夜。
SystemTimeToFileTime用于不同时间格式的转换

再接着SetWaitableTimer函数的lpDueTime参数,它来自于刚才时间转换函数返回的FileTime。
在这里插入图片描述
随后进入WaitForSingleObject等待,直到2100年1月1日午夜执行。
在这里插入图片描述
在1处ESI设置为计数器0x14(十进制20),循环的末位,ESI在2处递减,在3处到达0时,循环退出。4处的CreateThread函数的参数中lpStartAddress可以告知当前线程的起始地址。
查看该参数StartAddress
在这里插入图片描述
循环末尾的jmp指令是一个无条件跳转,意味着代码将永远不会停止;调用InternetOpenUrlA,并且一直下载该网址的主页。由于前面ESI被设置为20,因此会有20个线程一直调用InternetOpenUrlA函数。
该恶意代码目的是将自己在多台机器上安装成一个服务,进而启动DDOS攻击。如果所有的被感染机器在同一时间访问该服务器,会导致该服务器过载并无法访问该站点,导致拒绝服务攻击。

1.当计算机重启之后,这个程序如何保证它继续运行(达到持久化驻留)?

创建服务 MalService,在后台随系统启动运行。

2.为什么这个程序会使用一个互斥量?

保证同一时间这个程序只有一份实例在运行。

3.可以用来检测这个程序的基于主机特征是什么?

搜索一个名为HGL345的互斥量,以及服务 MalService

4.检测这个恶意代码的基于网络特征是什么?

网址信息http://www.malwareanalysisbook.com用户代理信息Internet Explorer 8.0

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

定时任务:时间为2100年1月1日半夜,发送大量请求到http://www.malwareanalysisbook.com引发ddos攻击。

6.这个程序什么时候完成执行?

不会完成,等到2100年1月1日半夜,到那时创建20个线程,每个均是无限循环。

参考

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值