恶意代码分析实战 1 静态分析基础技术

news2025/1/17 0:22:35

1.1 Lab 1-1

对Lab01-01.exe和Lab01-01.dll进行分析
问题

  1. 将文件上传至http://www.VirusTotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?

首先查看Lab-01-01.exe。
chrome_wFdEMK6bBe.png
然后查看Lab01-01.dll。
chrome_5vVPK0iPYf.png
这两个文件应该都是恶意文件。

  1. 这些文件是什么时候编译的?

查看PE文件的结构:
ApplicationFrameHost_h9WWpHS2zK.png
通过PE Tools查看文件头:
vmware_qXZYiq1B2e.png
Lab-01-01.exe 编译时间是2010年12月19日 16:16:19.
Lab-01-01.dll 编译时间是2010年12月19日 16:16:38.
这两个文件编译的时间非常接近,极有可能就是同时编译的。

  1. 这两个文件中是否存在迹象说明它们是否被加壳或混淆?如果是,这些迹象在哪里?

vmware_zrzCi9wKnl.pngvmware_RK25RRT7Tx.png
两个文件都没有加壳迹象。

  1. 是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?

Lab-01-01.exe :
vmware_Eipyi34CUt.png
导入函数有很多,一个一个看:
Kernel32.dll

  • CloseHandle:关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。
  • CopyFileA:将现有文件复制到新文件。
  • CreateFileMappingA:为指定文件创建或打开命名或未命名的文件映射对象。
  • FindClose:关闭由 FindFirstFile、FindFirstFileEx、FindFirstFileNameW、FindFirstFileNameTransactedW、FindFirstFileTransacted、FindFirstStreamTransactedW 或 FindFirstStreamW 函数打开的文件搜索句柄。
  • FindFirstFileA/FindNextFileA:用于搜索文件目录和枚举文件系统的函数。
  • IsBadReadPtr:验证调用进程是否具有对指定内存范围的读取访问权限。
  • mapViewOfFile :映射一个文件到内存,将文件内容变得通过内存地址可访问。启动器、装载器和注入器使用这个函数来读取和修改PE文件。通过使用mapViewOfFile 函数,恶意代码可以避免使用WriteFile来修改文件内容。
  • UnmapViewOfFile**😗*从调用进程的地址空间取消映射文件的映射视图。

其中,FindFirstFileA/FindNextFileA和CopyFileA表示这个程序可能会将自身复制到一个指定路径中去。
Lab-01-01.dll :
vmware_EtU06CwlHI.png
Kernel32.dll:

  • CloseHandle:关闭句柄
  • CreateMutexA:创建一个互斥对象,可以被恶意代码用来确保在给定时刻只有一个实例在系统上运行。恶意代码经常使用固定名字为互斥对象命名,这样他们就可以成为一个很好的主机特征,来检测系统是否感染了一个恶意代码。
  • CreateProcessA:创建一个新进程。
  • OpenMutexA:打开一个双向互斥对象的句柄,可以被恶意代码用来确保在任意给定时间在系统上只能有一个运行实例。恶意代码通常使用固定名字来为互斥对象命名,因此可以用作很好的主机特征。
  • Sleep:使程序暂停一段时间。

CreateProcessA和Sleep。这两个函数普遍在后门程序中使用。这些函数在exec与sleep字符串结合使用时,需要特别关注。exec字符串可能是通过网络来给后门程序传送命令,让它通过CreateProcess函数运行一个程序的。sleep字符串可能用于命令后门程序进入休眠状态。

  1. 是否有任何其他文件或基于主机的迹象,让你可以在受感染系统上查找?

C:\Documents and Settings\Administrator\桌面>strings Lab01-01.exe
UVWj
ugh 0@
_^][
SUVW
h00@
_^][
SUVW
h|0@
D P j l Pj l Pjl\u
S Q W R F x R V P D QWR FxRVP D QWRFxRVPD$3
D 8 R t 8R t 8Rt<f
T$PR
hL0@
h|0@
hD0@
_^]3
hp @
SVW
%8 @
%D @
%\ @
%` @
CloseHandle
UnmapViewOfFile
IsBadReadPtr
MapViewOfFile
CreateFileMappingA
CreateFileA
FindClose
FindNextFileA
FindFirstFileA
CopyFileA
KERNEL32.dll
malloc
exit
MSVCRT.dll
_exit
_XcptFilter
__p___initenv
__getmainargs
_initterm
__setusermatherr
_adjust_fdiv
__p__commode
__p__fmode
__set_app_type
_except_handler3
_controlfp
_stricmp
kerne132.dll
kernel32.dll
.exe
C:*
C:\windows\system32\kerne132.dll
Kernel32.
Lab01-01.dll
C:\Windows\System32\Kernel32.dll
WARNING_THIS_WILL_DESTROY_YOUR_MACHINE

有文件目录,还有kerne132.dll这个程序,与Kernel32.dll容易混淆。检查C:\Windows\System32\kerne132.dll来发现额外的恶意活动。请注意,文件kerne132.DLL,用数字1代替了字母l,是为了看起来像是系统文件kernel32.dll。这个文件可以用来在主机作为恶意代码感染的迹象进行搜索。

  1. 是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?

使用strings命令。
Lab-01-01.dll :

C:\Documents and Settings\Administrator\桌面>strings Lab01-01.dll
L$xQh
IQh `
L 4 P Q j D 4PQj D 4PQjD\D
t WVS
NWVS
u7WPS
u&WVS
_1
CloseHandle
Sleep
CreateProcessA
CreateMutexA
OpenMutexA
KERNEL32.dll
WS2_32.dll
strncmp
MSVCRT.dll
free
_initterm
malloc
_adjust_fdiv
exec
sleep
hello
127.26.152.13
SADFHUHF
/0I0[0h0p0
141G1[1l1
1Y2a2g2r2
3!3}3

发现dll文件中有ip地址,sleep,exec这种函数,可能会进入此ip地址进行下载文件,后门程序。

  1. 你猜这些文件的目的是什么?

.dll文件可能是一个后门
.exe文件是用来安装与运行DLL文件的

1.2 Lab 1-2

分析Lab01-02.exe文件
问题:
1.将Lab01-02.exe文件上传至https://www.virustotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征码?
Lab01-02.exe匹配到已有的反病毒软件特征,截图如下:
chrome_THzOTr71wD.png
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话?
拖入PEiD中,发现有壳。
vmware_Q5WjsHZoyA.pngvmware_ODa0d9YKmX.png
UPX的壳,可以使用Free UPX壳。
vmware_f5R0iKFK55.png
脱壳成功。
vmware_keBKtqgTK5.png
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
查看导入函数和答案(哈哈),有一些比较有意思的导入函数,CreateServiceA、InternetOpenA和InternetOpenUrlA。
CreateService:创建一个可以在启动时刻运行的服务。恶意代码使用CreateService这个函数来持久化、隐藏,或是启动内核驱动。
InternetOpenA:初始化WinINet中的一些高层次互联网访问函数,比如InternetOpenUrl和InternetReadFile。搜索InternetOpen函数是中岛互联网访问功能初始位置的一个好方法。InternetOpen函数的一个参数是User-Agent,有时也可以作为基于网络的特征码。
InternetOpenUrlA:使用FTP、HTTP或HTTPS协议连接来打开一个特定的URL,如果URL固定,则可以作为基于网络的特征码。
4.哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
strings找到的字符串:

C:\Documents and Settings\Administrator\桌面>strings Lab01-02.exe
h(0@
Vh(0@
L$,j
=0 @
hT0@
=p @
h00@
SVW
=l0@
5p0@
%< @
%L @
%d @
%h @
KERNEL32.DLL
ADVAPI32.dll
MSVCRT.dll
WININET.dll
SystemTimeToFileTime
GetModuleFileNameA
CreateWaitableTimerA
ExitProcess
OpenMutexA
SetWaitableTimer
WaitForSingleObject
CreateMutexA
CreateThread
CreateServiceA
StartServiceCtrlDispatcherA
OpenSCManagerA
_exit
_XcptFilter
exit
__p___initenv
__getmainargs
_initterm
__setusermatherr
_adjust_fdiv
__p__commode
__p__fmode
__set_app_type
_except_handler3
_controlfp
InternetOpenUrlA
InternetOpenA
MalService
Malservice
HGL345
http://www.malwareanalysisbook.com
Internet Explorer 8.0

一个名为Malservice的服务,并通过到http://www.malwareanalysisbook.com的网络流量,来检查被恶意代码感染的主机。

1.3 Lab1-3

分析Lab01-03.exe文件
问题:
1.将Lab01-03.exe文件上传至https://www.virustotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征码?
Lab01-03.exe匹配到已有的反病毒软件特征,截图如下:
chrome_1pHWQOizZ8.png
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话?
拖入PEiD, FSG 1.0 -> dulek/xt:
vmware_16DGJ3YMy6.png
使用LinxerUnpacker进行脱壳:
vmware_OOHNBsne7s.png
脱壳成功。
vmware_TOhTkOogVS.png
看看导入函数,看不懂哈哈哈。
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
查一查函数的用处:
OlerInitialize:用来初始化COM库。使用COM对象的程序必须在调用任何其他COM功能之前,调用这个函数。
CoCreateInstance:创建一个COM对象。COM对象提供了非常多样化的功能。类标识(CLSD)会告知你哪个文件包含着实现COM对象的代码。
使用了这个组件对象模型。
4.哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
vmware_TLUwmdDRT4.png
脱壳后的程序的字符串中没有看到什么东西,答案说到后面学会手动脱壳后再来解答这个问题。

1.4 Lab1-4

分析Lab01-04.exe文件
问题:
1.将Lab01-04.exe文件上传至https://www.virustotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征码?
Lab01-03.exe匹配到已有的反病毒软件特征,截图如下:
chrome_PuqsENbe9g.png
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话?
vmware_i7sSH9TLIm.png
看起来似乎是没有壳。
3.这个文件是什么时候被编译的?
vmware_sCFAjIVFxq.png
15年出版的书,出现19年编译的程序,哈哈哈。
4.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
vmware_fG11Zfh449.png
创建文件和写入文件的函数。
WinExec是运行一个程序,可能会是去运行一个后门程序。
vmware_Bkn2yqv6HB.png
有一些关于资源的函数,说明这个程序可能对他的资源部分进行嗲用。
vmware_Lge82NY809.png
AdjustTokenPrivileges:用来启用或禁用特定的访问权限。执行进程注入的恶意代码经常会调用这个函数,来取得额外的权限。
5.哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
vmware_OnO3ROabYX.png
有一个网址,有\system32\这样一个目录,还有URLDownloadToFileA这个后台下载的API函数(这个函数可以与winexec结合使用,然后就是运行后台下载的程序),还有获取windows目录的函数,可能会将自身复制到一个目录下,或者将下载的程序转到目录下进行混淆。
6.这个文件在资源段中包含一个资源。使用Resource Hacker工具来检查资源,然后抽取资源,从资源中你能发现什么吗?
vmware_Fxk6YJLo48.png
这段字符是在PE文件开始处的DOS头部中都会包含的错误消息,所以这个程序的资源中应该是隐藏了一个PE文件。我们把它保存下来看看。
vmware_p7Fx1IyWps.png
这里没打勾,确实是exe文件。
使用strings命令查看一下。
vmware_NC0t8EQS7p.png
查看一下导入表。
vmware_o6tbU5bzcy.png
vmware_vDX5a7cwN2.png
查看导入表,该嵌入文件在访问一些网络函数,它调用了URLDownloadToFile,一个由恶意下载器普遍使用的函数,它调用了WinExec函数,可能执行了下载到的文件。


  1. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20230125英语学习

Office Buzzwords You’re Using That Annoy All Your Co-workers 说话之道&#xff1a;避开办公室行话的“雷区” Joining a new office means having to learn how to communicate with your team.But in order to do that well, it sometimes means having to learn your …

索引优化示例

目录 1.单表优化 2.两表优化 3.三表优化 4.总结 1.单表优化 创建索引前 (1)先按照where条件创建索引 按照查询条件中的三个项目创建索引&#xff0c;并且索引中的项目存在顺序&#xff0c;分别是1,2和3。 (2)创建索引 type 变成了 range,这是可以忍受的。但是 extra 里使用…

恶意代码分析实战 4 识别汇编中的C代码结构

4.1 Lab06-01.exe 由main函数调用的唯一子过程中发现的主要代码结构是什么&#xff1f; 使用Strings进行查看&#xff0c;需要注意最后的这两个字符串&#xff0c;一个是“没有网”&#xff0c;另一个是“联网成功”。 IDA 中查看图结构。 明显是if-else结构。 位于0x4010…

进程间通信/管道/消息队列/共享内存/信号量

本文重点目标&#xff1a; ⭐进程间通信介绍⭐ ⭐管道⭐ ⭐消息队列⭐ ⭐共享内存⭐ ⭐信号量⭐ 1.进程间通信介绍 什么是通信&#xff1f; 通信指的是数据传输、资源共享、通知事件和进程控制。 ①数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 ②资源共享&a…

【GIS】高分辨率遥感影像智能解译

1 绪论 随着航空科技工业的不断成熟与发展&#xff0c;我国遥感卫星研制能力不断攀升&#xff0c;发射数量逐年提高&#xff0c;在轨运行的遥感卫星为社会生产及居民日常生活提供了巨大的支持与便利。我国目前同时在轨运行的遥感卫星数量已超过60颗&#xff0c;每天获取并传回…

LeetCode[990]等式方程式的可满足性

难度&#xff1a;中等题目&#xff1a;给定一个由表示变量之间关系的字符串方程组成的数组&#xff0c;每个字符串方程 equations[i]的长度为 4&#xff0c;并采用两种不同的形式之一&#xff1a;"ab"或 "a!b"。在这里&#xff0c;a 和 b 是小写字母&#…

【Python学习003】高效数据结构-列表

【Python学习003】高效数据结构-列表 我们的公众号是【朝阳三只大明白】&#xff0c;满满全是干货&#xff0c;分享近期的学习知识以及个人总结&#xff08;包括读研和IT&#xff09;&#xff0c;希望大家一起努力&#xff0c;一起加油&#xff01;求关注&#xff01;&#xf…

浏览器使用本地硬盘上的JS文档

网页通过<script>标记可以引入在线的js文档&#xff0c;只有把网页保存在本地硬盘才能使用相对路径引入本地js文档&#xff0c;普通浏览器难以实现在线页面上引入本地js文档。怎么解决这个问题呢&#xff1f;首先准备好需要引入的JS文档&#xff0c;可以是成熟的JS库&…

【docker概念和实践 4】(3)本地镜像提交到阿里云

一、说明 本篇讲述如何将自己制作的容器转化成镜像&#xff0c;再将镜像推送到远端阿里云上。 二、制造一个本地容器 2.1 从远端仓库拉取ubuntu镜像 使用镜像拉取语句&#xff1a; docker pull ubuntu:20.04 docker run -it ubuntu&#xff1a;20.04 bash 通过以上两句&…

LeetCode[200]岛屿数量

难度&#xff1a;中等题目&#xff1a;给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外&am…

5-4中央处理器-控制器的功能和工作原理

文章目录一.控制器的结构和功能二.硬布线控制器1.硬布线控制单元图2.微操作命令分析3.CPU的控制方式&#xff08;1&#xff09;同步控制方式&#xff08;2&#xff09;异步控制方式&#xff08;3&#xff09;联合控制方式4.硬布线控制单元的设计步骤&#xff08;1&#xff09;分…

qsort函数用法 + 模拟实现qsort函数

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞…

论文笔记目录(ver2.0)

1 时间序列 1.1 时间序列预测 论文名称来源主要内容论文笔记&#xff1a;DCRNN &#xff08;Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting&#xff09;_UQI-LIUWJ的博客-CSDN博客iclr 2017使用双向扩散卷积GRU&#xff0c;建模空间和…

目标跟踪心得篇五:MOT数据集标注、TrackEval的使用、DarkLabel不能自动跟踪解决方案及如何在MMTracking上输出跟踪评测

跟踪方向的标注成本非常很大的 ,那么我们如何尽可能一次性弄好呢? 所选标注工具:DarkLabel DarkLabel是一个轻量的视频标注软件,尤其做MOT任务非常友好,其标注可以通过脚本转化为标准的目标检测数据集格式、ReID数据集格式和MOT数据集格式。 使用之前: darklabel.yml:保…

传参的理解

前言 当我们调用函数的时候&#xff0c;参数是怎么传递给被调用方的&#xff0c;有想过这个问题吗&#xff1f;传递不同大小的参数对调用方式有影响吗&#xff1f;本文将带你探究这些问题&#xff0c;阅读本文需要对函数栈帧有一定的理解&#xff0c;并了解基本的汇编指令。 …

傅一平:2022年我的私人书单

2022年过去了&#xff0c;推荐我的TOP 10 书单&#xff0c;同时附上我的一句话评语和豆瓣的评分&#xff0c;这些书代表了我学习的方向&#xff0c;包括学习方法、思考方法、数据治理、数字化转型、系统架构、职场管理、个人修养、生活态度等。TOP 1 学习究竟是什么一句话评语…

【Ajax】HTTP超文本传输协议

一、HTTP协议简介什么是通信通信&#xff0c;就是信息的传递和交换。通信三要素&#xff1a;通信的主体通信的内容通信的方式1.1 现实生活中的通信案例&#xff1a;张三要把自己考清北大学的好消息写信告诉自己的好朋友李四。其中&#xff1a;通信的主体是张三和李四&#xff1…

Linux网络:应用层之HTTP协议

文章目录一、应用层1.协议2.网络版计算器二、HTTP 协议1. URL2. HTTP 协议格式3.查看 HTTP 请求4.发送 HTTP 响应5. HTTP 的方法6. HTTP 的状态码7. HTTP 的版本8. HTTP 常见 Header9. Cookie 与 session三、HTTP 与 HTTPS一、应用层 我们程序员写的一个个解决实际问题&#x…

jvm 堆 栈中存什么?

数据类型 Java虚拟机中&#xff0c;数据类型可以分为两类&#xff1a;基本类型和引用类型。基本类型的变量保存原始值&#xff0c;即&#xff1a;他代表的 值就是数值本身&#xff1b;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用&#xff0c;而不是对象本身&…

矩阵理论复习(六)

Q代表有理数&#xff0c;即整数和小数部分有限的分数和小数部分无限循环的分数。无限不循环的小数就是无理数。所有无理数和有理数加起来就是实数集R。与实数对应的就是虚数。 数域的定义 线性空间的定义 线性空间的基和维数 子空间的定义 子空间的判别方法 最常见的…