恶意代码分析实战 5 分析恶意Windows程序

article/2024/4/13 14:00:47

1 Lab07-01

本次实验分析lab07-01.exe,lab07-02.exe,先来看lab07-01.exe的问题
问题

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

首先,查看导入函数。
vmware_rxArff1ORt.png
vmware_yCHgkko6gV.png
OpenSCManagerA和CreateServiceA函数暗示着这个恶意代码可能创建一个服务,来保证它在系统被重启后运行,StartServiceCtrlDispatcherA导入函数提示了这个文件是一个服务。
vmware_7gjZ8LVnBN.png
调用了StartServiceCtrlDispatcherA函数,这个函数被程序用来实现一个服务,并且它通常立立即被调用。
创建了一服务,这个程序创建服务MarlService,来保证它每次在系统启动后运行。

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

vmware_Hnzr6w58Px.png
在此处的函数调创建了互斥量。
vmware_mNhZoK57El.png
这段代码创建了一个名为“HGL345”的互斥量。这两对互斥量组合调用,被设计来保证这个可执行程序任意给定时刻只有一份实例在系统上运行。如果有一个实例已经在运行了。,则对OpenMuteA的第一次调用成功,并且这个程序就会退出。
接下来,这段代码调用OpenSCManager,它打开一个服务控制管理器的句柄,以便这个程序可以添加或者修改服务。下一个调用的是GetModuleFileName函数,它返回当前正在运行的可执行程序或一个被夹在DLL的全路径名。第一个参数是要获取路径名的模块句柄,或者将它设置为NULL来获取这个可执行体的全路径名。
这个程序使用一个互斥量,来保证在同一时间这个程序只有一份实例在运行。

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

主机特征是一个名为HGL345的互斥量,以及MalService服务。

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

再之后是调用createserviceA来创建一个新的服务。Createservicea调用有许多参数,关键的参数如binarypathname,dwstarttype,dwservicetype.Dwstarttype这里是0x02,对应的是service_auto_start,说明这个服务在系统启动时自动运行。
vmware_0QsokDGSii.png
chrome_mwaF4qXSAv.png
ida标记了systemtime结构体,是windows多个结构体之一。由xor edx,edx及之后的指令可知,程序中该结构体的所有值首先被设置为0然后表示年yaer的值被设置为834h,10进制的2100,该事件表示2100年1月1日的午夜,之后通过systemtimetofieltime,在不同时间格式之间转换。
vmware_140BnZsuJM.png
可以看到调用了setwaitabletimer,关键参数为lpduetime,这个参数是systemtofiletime返回的filetime,然后通过waitforsingleobject进入等待,直到2100年1月1日。接下来看到了一个循环。
vmware_B8yF8Iwb2s.png
vmware_UZG5XwrpAO.png
这个恶意代码使用用户代理 “Internet Explorer 8.0”,并不断的访问 “http://www.malwareanalysisbook.com”。

  1. 这个程序的目的是什么

这个程序等待到2100年1月1日的半夜,那时发送许多请求到 “http://www.malwareanalysisbook.com” ,带盖是为了对这个网站进行一次分布式拒绝服务(DDoS)攻击。

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

这个程序永远不会完成。它在-一个定时器上等待直到2100年,到时候创建20个线程,每一个运行一个无限循环。

2 Lab07-02

分析在文件Lab 07-02.exe 中发现的恶意代码。
问题
分析:
查看导入表
17790459-28ea4b41109873e8.webp
从ole32库中导入了OleInitialize函数,这个程序可能使用了COM功能。
继续查看strings,存在可疑URLhttp://www.malwareanalysisbook.com/ad.html
Tips:这里需要设置让strings页面可以读取unicode编码的字符串。
17790459-4a59a7384694bd3b.webp
跟进main函数,按下F5,查看
17790459-fbdacbc79ac74f75.webp
CLSID是0002DF01-0000-0000-C000-000000000046 (表示Internet Explorer)
IID是D30C1661-CDAF-11D0-8A3E-00C04FC9E26E (表示IWebBrowser2)
vmware_RTDsZfi12Z.png
CoCreateInstance执行结果保存在ppv,一旦结构体从调用返回,一旦结构体从 CoCreateInstance处返回,COM客户端调用位于这个结构体某处偏移的一个函数,见下图。

1处拿到返回的结构体指针,2处将eax解引用并赋给edx,3处通过偏移调用IWebBrowser2Vtbl中的第12个函数Navigate,可以在struct页面尝试添加一个结构体(快捷键Insert)。每个函数4字节,第一个函数在0位置。
vmware_FGXB1GAP6n.png
vmware_UgphXhnv2E.png
嗲用Navigate函数之后,会执行一些清理函数,然后程序终止。这个程序不会持久化自己,也不会修改系统。只是简单的显示一次广告。当遇到如此简单的一个程序时,要考虑它是可疑的,他可能只是随额外的恶意代码一起打包,只是其中的一个组件。
该函数被调用后,Internet Explorer将导航至http://www.malwareanalysisbook.com/ad.html。该函数执行一些清理函数,但是没有持久化驻留,仅简单显示一个广告页面。

  1. 这个程序如何完成持久化驻留?

这个程序没有完成持久化驻留,运行一次然后退出了。

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

这个程序的目的是显示一个页面,ad.html,可能是一个广告页面。

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

这个程序在显示这个广告页面后完成执行。

3 Lab07-03

问题
分析:
首先分析Lab07-03.exe文件,查看导入表,有很多文件操作。
vmware_NEXTNVTZDt.png
查看strings视图
vmware_0idmtnTayY.png
.data:0040304C 00000021 C C:\windows\system32\kerne132.dll 是仿冒的dll,说明该文件存在仿冒系统关键dll的可能,.data:0040307C 0000000D C Lab07-03.dll 说明可能调用了Lab07-03.dll,用IDA Pro打开查看代码。
vmware_a8Z23vNk7s.png
首先用eax保存命令行参数的格式,如果参数的个数不是2,会直接退出,并且比较了argv[1]是不是WARNING_THIS_WILL_DESTROY_YOUR_MACHINE这样保证了恶意代码不会在虚拟机中被自动执行,属于反动态检测的一种手段。
打开两个文件C:\Windows\System32\Kernel32.dll 和Lab07-03.dll映射到内存中。
17790459-de13e7f2928931d1.webp
接下来就是将C:\Windows\System32\Kernel32.dll 的导出表部分复制到Lab07-03.dll的导出表。
vmware_1wqkh7wnEn.png
然后将Lab07-03.dll 复制到C:\windows\system32\kerne132.dll将文件命名为和关键系统库相似的名称,进一步进行恶意行为。并跳转到loc_401806位置。先将参数C:\*压栈,调用函数sub_4011E0。
该函数如下,主要是遍历C盘文件,第29行找到.exe结尾的文件,调用函数sub_4010A0。
判断文件是不是以.exe结尾的逻辑主要在0x004013F6处。在0x004011E0和0x004013F6处设置断点,F9执行,查看栈上数据变化。可以看到这部分的执行逻辑和静态分析的结论一致。
17790459-cd7f8b820daa96b9.webp
至此,程序功能清晰,就是将对kernel32.dll的调用,转换为kerne132.dll的调用,这样很多程序都会受到影响,很难清除
分析Lab07-03.dll,查看导入表,有创建互斥体以及网络相关函数。
17790459-5b318b753e97dc7d.webp
查看strings,发现疑似恶意IP127.26.152.13还有几个其他可疑的字符串。
17790459-fa45ef848f3380a8.webp
跟进SADFHUHF字符串,可以看到这是一个互斥量名称硬编码,保证同一时刻只有一个恶意代码进程在执行。
17790459-f1958e2e4e679793.webp
跟进127.26.152.13结构体sockaddr.data保存了host信息和端口信息。IP是127.26.152.13,端口是0x50(十进制80)
17790459-90ad621289b516d2.webp
17790459-31b91df1a39784e7.webp buf中保存的是hello,发送这个字符串给C2,受害者已经上线,然后接收C2发送的命令,继续保存在buf中,检查buf的前五个字节是不是sleep如果是,跳出循环sleep60s,检查前四个字节是不是exec,如果是,使用CreateProcessA创建新的进程。关于此函数文档如下,lpCommandLine参数可以执行命令。说明此DLL文件带有后门功能。

  1. 这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?

这个程序将自己复制到C:\windows\System32,并伪装成重要dll库,实际名称为kerna132.dll来执行持久化。

  1. 这个恶意代码的两个明显的基于主机特征是什么?

基于主机的特征是互斥量硬编码SADFHUHF,文件名kerna132.dll。

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

目的是执行持久化操作,并留下后门,可以执行sleep和exec命令。

  1. 一旦这个恶意代码被安装,你如何移除它?

这个程序很难被删除,是因它感染系统上每一个.exe文件。可能在这个例子中,最好的方法是从一个备份恢复系统。可以留下kernel132.dll文件,删除其中的恶意代码,或者复制kernell32.dll文件,并将它命名为kernel132.dll。


http://www.ngui.cc/article/show-841446.html

相关文章

手把手教你写一个极简版Netty

目录前言BIO版本NIO版本mini-netty版本v1:Reactor线程模型mini-netty版本v2:任务处理总结前言 Netty如今是使用最广泛的网络通信框架,许多人对此有强烈的学习需求。但是Netty本身代码量大、概念众多,单纯看代码学习容易一头雾水&…

【老卫搞机】136期:华为开发者联盟社区2022年度战码先锋2期开源贡献之星

首先祝大家兔年大吉,身体安康,钱兔似锦!接上次的“2022年牛人之星”( https://developer.huawei.com/consumer/cn/forum/topic/0203109930647268095),今天咱们来开箱另外一件特殊的奖品,来自华为…

ubuntu压缩、归档 tar zip gzip的介绍

不同文件需要使用不同的工具进行压缩和解压,可以使用file文件查看是什么类型的文件 file 文件名如图,在第二行看到这个文件是gzip类型的。 文件:gzip 工具:gunzip gunzip是 gnu unzip的缩写。用来解压gzip压缩包。 解压命令 …

Leetcode 数组存储大整数加一

前言:Leetcode 每日刷题,从容易题目开始,坚持不懈是成功的一半,喜欢的朋友欢迎订阅关注,欢迎大家留言交流,共同学习共同进步~~题目介绍:https://leetcode.com/problems/plus-one/d大型整数使用数…

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标注意:NI将在NI2020软件版本中删除对cRIO的Pharlap和NI2022软件版本中对PXI的支持。更多信息,请参阅PharLapRTOSEOL路线图。您可能已经拥有一台台式PC,可以作为下一个可靠的确定性测试或控制系统…

6、算术运算符与算术表达式

目录 一、算术运算符 二、算术表达式 三、优先级与结合性 1. 算术运算符的优先级 2. 算术运算符的结合性 四、自增/自减运算符 一、算术运算符 算术运算符包括两个单目运算符(正和负)和5个双目运算符(即乘法、除法、取模、…

时间调度理论-要事先行

我们度过每一天的方式,自然就是度过一生的方式。 亚里士多德的这句话——“重复的行为造 就了我们”,这种行为可能是拖地、与家人共度更多时光、准时发传真,或者学法语。 所以,我们该怎么做,什么时候做,以…

网关zuul源码解析==ZuulServlet

用法&#xff1a; 使用zuul网关&#xff0c;需要引入starter为 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> 同时在springboot启动类上加注解…

【机器学习】(西瓜书习题8.5)编程实现Bagging模型,以决策树桩为基学习器,在西瓜数据集3.0a上训练一个Bagging集成,并与教材图8.6进行比较。

&#xff08;1&#xff09;问题理解与分析 编程实现Bagging模型&#xff0c;以决策树桩为基学习器&#xff0c;在西瓜数据集3.0a上训练一个Bagging集成&#xff0c;并与教材图8.6进行比较。 &#xff08;2&#xff09;Bagging算法原理阐述 若想得到泛化性能强的集成&#xf…

Python3 条件控制

Python 条件语句是通过一条或多条语句的执行结果&#xff08;True 或者 False&#xff09;来决定执行的代码块。 IF-ELSE判断 常用的if-else语句&#xff0c;通常用于二分支结构的条件语句代码。 Python 中用 elif 代替了else if&#xff0c;所以if语句的关键字为&#xff1a…