恶意代码分析实战 Lab 1-1 习题笔记

Lab 1-1


问题

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

解答:这个上传就行了,不过就是要注意www.virustotal.com已经被墙了(2017-8-24:新版virustotal已经可以不挂vpn就可以访问了)


2.这些文件是什么编译的?

解答: 根据本书结尾附录的方法是

使用PEview来打开文件。对于每个文件,我们可以浏览
IMAGE_NT_HEADERS > IMAGE_FILE_HEADER > Time Date Stamp
字段,这个字段会告诉我们编译的时间

但是我通过PEview打开Lab01-01.exe的时候,会出现这个

PEview打来第一个程序

Google了一圈,没有一个相关的解决办法,甚至有人提问这个问题都没有,这句话的意思是[ 你没法查看所有的项目,点取消关闭PEview ], 我们于是点了确定

点确定了

可能我这虚拟机分辨率有点不好看,我单独截一个出来,就是这样了

单独截图

我反正是找不到Time Date Stamp这个字段。。。

然后我突然想到,是不是应该用windows xp来打开看看,然后我又装了一个XP虚拟机,然后还是一样的

winXP

放大一点看看

放大

反正我还是依旧没有找到Time Date Stamp

不过当我用Dependency Walker的时候,可以看到一些基本的信息,但是和书上的答案也不同

Dependency Walker

可以看出,不好看我们再放大一点

放大之后

可以看出来,[ File Time Stamp ] = [ 2012/01/08 2:19 ]
然后 [ Link Time Stamp ] = [ 2010/12/20 0:16 ]

本书的答案是2010/12/19,那Link Time Stamp指的就是编译时间

因为作者问的是这些文件,我们继续看Lab01-01.dll

PEview打开那个目录依旧会报错,点了确定之后依旧找不到那个字段

我们依旧用Dependency Walker来看

Dependency Walker

我们找到这个DLL文件

放大一点

放大

我们可以清楚的看到[ Link Time Stamp ] = [ 2010/12/20 0:16 ]

这就对应上了作者的答案,所以前面的Lab01-01.exe应该存在一些作者的潦误,我们就不深究了

再看Lab01-03.exe

玄学问题来了
  • 这次Lab01-03.exe可以使用PEview看到明显的Time Date Stamp字段了。。。

  • 这次没报错

Lab01-03.exe

老规矩放大一点

放大

但是时间啥都看不出来啊。。。

没办法,还是用Dependency Walker来看

Lab01-03.exe

这个文件的编译时间是1970/01/01 8:00
显然这个时间是伪造的

然后我们照此法看Lab01-04.exe

PEview打开还是会报错

继续老方法
Lab01-04.exe

这个文件的编译时间是2019/08/31
显然这个时间也是伪造的


第二题个人体会

其实看过书的同学都知道,在本书的中译本page20的地方,三号小黑圈的地方就已经看到了

如果这个文件是正常的话,会显示Value的值,就是编译的时间

原书相关章节

这是从英文版PDF截图截下来的

我们的确可以看到Time Date Stamp那里后面的Value字段的值就是一个时间

下面这个是我们实际做出来的

实际做的

在我们实际做的结果,后面的Value并没有跟着一个时间,然后这就比较尴尬了

用WinXP也是一样的结果[无语]


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

解答: 书中的方法是这样的

PEiD工具标记为未加壳的代码

这里提示我们是用PEiD来做的检查,我们试试Lab01-01.exe

PEiD

这里我们可以明显的看出来,这个Lab01-01.exe是没有加壳的
编译器是Microsoft Visual C++ 6.0

然后再看看Lab01-01.dll

PEiD

也可以明显的看出来没有加壳的迹象,这题过


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

解答: 我们可以先看Lab01-01.exe的导入表

导入表

我们可以看到基本的文件操作函数的出现

不过最应该引起注意的是FindFirstFileAFindNextFileA这两个函数

说明这个程序会在系统中查找某些文件,然后有创建文件的函数和复制文件的函数,可能会对系统某些文件进行操作

然后我们用IDA打开这个exe

按照书上的说法,我们可以发现一些有趣的String

IDA

除了最后一句的估计是作者的提醒之外,我们的确可以发现这个kerne132.dll

注意这个kerne132.dll,那个kernel的最后的L字母其实是1(one),为了混淆视听和躲避分析。

然后还可以看到在Lab01-01.exe 中出现了Lab01-01.dll,说明Lab01-01.exe很有可能调用了Lab01-01.dll这个动态链接库。

顺便

顺便说一下这个两个一般很常见的DLL

kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。


msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(MicrosoftCRuntimeLibrary),其中提供了printf、malloc、strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能。

下面我们查看DLL的导入表

DLL

我们可以看到一个CreateProcessA函数,说明这个DLL会创建一个进程,也许以后还要分析这个创建的进程

然后还有一个CreateMutexA这是创建一个互斥变量的,和OpenMutexA一起,都是为了操作一个互斥变量的

最后有一个Sleep,由此我们大概是可以猜想,这个DLL会创建一个互斥变量,然后保证一个资源同时只能被一个进程使用,如果这个互斥变量被锁,则其他的进程就执行Sleep函数等待。

书中的解答是

CreateProcess 和 Sleep 函数,这两个函数普遍在后门程序中使用。
这个文件导入WS2_32.dll中的函数,这些函数提供了联网功能


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

解答: 任何其他文件的话就是Lab01-01.exe会在运行时导入Lab01-01.dll,还有那个混淆视听的kerne132.dll

基于主机的迹象就是如果可以查找到kerne132.dll而不是kernel32.dll,就说明这台主机已经被感染了


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

解答: 这个其实可以从Lab01-01.dll中的字符串中发现一个ip,加上前面的导入函数WS2_32.dll,我们就可以断定这个可执行文件,可以进行联网,和网络通信。

DLL


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

解答: 其实这个书中的解答已经说得很清楚了,就是一个后门程序,exe用来装载dll文件运行

本文完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值