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

时间:2020-11-29 00:15:46

Lab 1-2

问题

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

解答: 这个传就行了。


2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果改文件被加壳,请进行脱壳,如果可能的话。

解答: 因为这个我是看过一遍书才来看这些题目的,所以,可能刚开始看这本书的同学会有些不理解,没事,慢慢来。

Lab01-02.exe这个文件有没有被加壳,那就是老规矩,用PEiD来查看就行了,我们试试

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

大概可以看出来,PEiD的结论是什么都没找到,但是我们注意到这个EP段这里有个UPX1标识,说明这个exe文件很可能用了一个UPX技术的变种,所以PEiD才会识别不出来

然后我们用Dependency Walker,我们就会发现这个代码的导入表只有很少的几个函数

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

第一个函数就是LoadLibraryA,还有一个GetProcAddress,这两个函数都是加壳的迹象,因为加壳的程序运行时候脱壳是必须要这两个函数的

然后我们再试试PEview打开看看

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

有明显的UPX加壳后的表现,基本可以确定这是UPX加的壳了

然后我们尝试脱壳

先用UPXshell来试试

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

貌似不行额

再换一个UPX Easy UI来试试

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

也是不行额

再试试国产的

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

还是不行,根据书中的说法,是从http://upx.sourceforge.net/下载upx工具,然后解压就可以导出源文件了,我们试试

顺便说一下就是,upx的维护团队已经将upx的源码从sourceforge上搬到github了

https://github.com/upx/upx

下载地址在这里

https://github.com/upx/upx/releases

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

我们会看到这么一个说明文件

我们选择被标那个版本的

下载下来之后解压之后会有一个upx.exe的可执行文件,如果你想把他当作全局可以使用的命令的话,可以把UPX的路径加入PATH里面,如果不想的话,可以把这个文件复制到你想脱壳的那个目录下面,然后cmd切换到那个目录,然后执行upx的命令就行了

upx.exe -o Lab01-02a.exe -d Lab01-02.exe

-o 是指定脱壳后的文件名称(output)
-d 是指定要脱壳的文件(destination)
这个两个参数顺序可以颠倒

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

然后运行命令

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

然后这就很尴尬了,下面的分析完全没法进行下去了

反正,方法就是这么个方法,但是结果可能和书里的有些不同,掌握方法就好了

3.有没有任何的导入函数能够暗示这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?

解答: 这个没脱壳就只能看到那几个基本的导入函数

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

其中从KERNEL32.DLL导入的函数可以看到的也就那么几个

具体说说

LoadLibraryA 是一般带壳程序的最小的导入函数,如果这个函数都不导入,则没法在程序运行时候就行加载模块脱壳

GetProcAddress 是程序运行Load了一个模块时候,用来获取这个模块的地址的,也是必须的,最小必须的函数就是上面这两个

VirtualProtect 的 Win32 实作会在呼叫处理序的虚拟位址空间里,变更认可页面区域上的保护(这个函数我也不懂干什么用的)

VirtualAllc 这个一看Alloc的关键词,就知道它应该是分配空间给程序的

VirtualFree 这个也是看关键字,释放分配的内存的函数

ExitProcess 这个函数是退出程序用的

然后是从ADVAPI32.DLL中的导入函数

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

有个导入的function: CreateServiceA很有意思

这个函数一般是用作创建一个服务的,说明这个恶意代码会当做一个服务运行在Windows的机器里面

然后MSVCRT.DLL这个库没有啥研究的,里面就有一个exit函数

我们直接来看WININET.DLL,这个库是Windows的机器来打开一个网络连接用的

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

我们可以看到他导入了一个函数InternetOpenA,这个函数是初始化一个应用程序,以使用WinINet的其他函数

但是也是加了壳,所以没法看到里面具体使用了什么函数

结论: 这些导入函数基本就是告诉了我们,这个函数会当作一个service运行在计算机里面,然后会使用到网络来进行一些通讯和联络,其他的因为是加了壳的,真正蕴含信息的函数还在壳里面没脱出来,然后没脱出来的原因大家也在上面看到了,我也没法了


哪些基于主机或基于网络的迹象可以用来被确定被这个恶意代码所感染的?

解答: 这个因为没有脱壳出来,所以没有

本文完