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
的时候,会出现这个
Google了一圈,没有一个相关的解决办法,甚至有人提问这个问题都没有,这句话的意思是[ 你没法查看所有的项目,点取消关闭PEview
], 我们于是点了确定
可能我这虚拟机分辨率有点不好看,我单独截一个出来,就是这样了
我反正是找不到Time Date Stamp
这个字段。。。
然后我突然想到,是不是应该用windows xp来打开看看,然后我又装了一个XP虚拟机,然后还是一样的
放大一点看看
反正我还是依旧没有找到Time Date Stamp
不过当我用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
来看
我们找到这个DLL
文件
放大一点
我们可以清楚的看到[ Link Time Stamp
] = [ 2010/12/20 0:16
]
这就对应上了作者的答案,所以前面的Lab01-01.exe
应该存在一些作者的潦误,我们就不深究了
再看Lab01-03.exe
的
玄学问题来了
这次
Lab01-03.exe
可以使用PEview看到明显的Time Date Stamp
字段了。。。这次没报错
老规矩放大一点
但是时间啥都看不出来啊。。。
没办法,还是用Dependency Walker
来看
这个文件的编译时间是1970/01/01 8:00
显然这个时间是伪造的
然后我们照此法看Lab01-04.exe
用PEview
打开还是会报错
继续老方法
这个文件的编译时间是2019/08/31
显然这个时间也是伪造的
第二题个人体会
其实看过书的同学都知道,在本书的中译本page20
的地方,三号小黑圈的地方就已经看到了
如果这个文件是正常的话,会显示Value的值,就是编译的时间
这是从英文版PDF截图截下来的
我们的确可以看到Time Date Stamp
那里后面的Value
字段的值就是一个时间
下面这个是我们实际做出来的
在我们实际做的结果,后面的Value
并没有跟着一个时间,然后这就比较尴尬了
用WinXP也是一样的结果[无语]
3.这两个文件中是否存在迹象说明它们是否被加壳或混淆?如果是,这些迹象在哪里?
解答: 书中的方法是这样的
PEiD工具标记为未加壳的代码
这里提示我们是用PEiD来做的检查,我们试试Lab01-01.exe
这里我们可以明显的看出来,这个Lab01-01.exe
是没有加壳的
编译器是Microsoft Visual C++ 6.0
然后再看看Lab01-01.dll
也可以明显的看出来没有加壳的迹象,这题过
4.是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?
解答: 我们可以先看Lab01-01.exe
的导入表
我们可以看到基本的文件操作函数的出现
不过最应该引起注意的是FindFirstFileA
和FindNextFileA
这两个函数
说明这个程序会在系统中查找某些文件,然后有创建文件的函数和复制文件的函数,可能会对系统某些文件进行操作
然后我们用IDA打开这个exe
按照书上的说法,我们可以发现一些有趣的String
除了最后一句的估计是作者的提醒之外,我们的确可以发现这个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的导入表
我们可以看到一个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
,我们就可以断定这个可执行文件,可以进行联网,和网络通信。
7.你猜这些文件的目的是什么?
解答: 其实这个书中的解答已经说得很清楚了,就是一个后门程序,exe用来装载dll文件运行
本文完