恶意代码防范-熟悉给定工具

  • Post author:
  • Post category:其他


恶意代码防范 实验一

实验目的

了解并熟悉给定的工具:

  • PEiD
  • Ollydbg
  • Upxshell
  • UPX脱壳终结者

使用所给文件完成以下问题

  1. 这些文件何时编译的?
  2. 这两个文件是否有迹象被加壳或混淆?证据何在?
  3. 是否有导入函数?功能?
  4. 是否有任何其他文件或基于主机的迹象,让你可以再受感染系统上查找?
  5. 是否有关于网络的恶意代码感染迹象?

1、这些文件何时编译的

使用

PEiD

打开文件,可以看到这个文件编译时间的时间戳,把这个十六进制时间戳转换成十进制就可以在

站长工具 > Unix时间戳

查到这个时间戳对应的北京时间。

这里写图片描述

这里写图片描述

说明这个文件编译于北京时间

2010/12/20 0:16:19

2、这两个文件是否有迹象被加壳或者混淆?证据何在?

我们用PEiD打开这两个文件,发现底下都写着

Microsoft Visual C++ 6.0

,就此看来,以这个软件扫描的能力内这两个文件都是没有加壳、没有被混淆的。

为了验证这个结论,我把其中一个文件

Lab01_01.exe

使用工具

Upxshell

加壳,再用

PEiD

查看,发现底下不再是原来的VC6.0了,变成了UPX加壳的信息,说明加壳成功了。

这里写图片描述

这里写图片描述

我发现

Olldbg

不仅在后面的实验内容中可以使用到,这个地方我们还可以用

Olldbg

自带的脱壳脚本和脱壳功能来为我们自己加壳的文件脱壳。

这里写图片描述

我们能验证到脱壳后的文件和源文件在

PEiD

中显示的编译信息是一样的。

这里写图片描述

3、是否有导入函数?功能?

可以用

Ollydbg

打开文件,可以看到这个文件有哪些导入函数。

这里写图片描述

这里写图片描述

所属库 函数名 函数功能

>

Lab01_01.exe <<<<<
Kernel32.dll CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程度上的负面影响。但当进程结束退出后,系统会自动清理这些资源。
Kernel32.dll UnmapViewOfFile 不再需要把文件的数据映射到进程的地址空间中时,可以该函数来释放内存区域。
Kernel32.dll IsBadReadPtr 该函数检查调用进程是否有读取指定内存的内容的权限。
Kernel32.dll MapViewOfView 为文件的数据保留一个地址空间区域,并将文件的数据作为映射到这个区域的物理存储器进行提交。
Kernel32.dll CreateFileMapping 创建一个新的文件映射内核对象。
Kernel32.dll CreateFile 这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
Kernel32.dll FindNextFile 用来遍历目录或文件时,判断当前目录下是否有下一个目录或文件。
Kernel32.dll FindFirstFile 根据文件名查找文件。
Kernel32.dll CopyFile 拷贝文件。
MSVCRT.dll malloc 向系统申请分配指定size个字节的内存空间。
MSVCRT.dll exit 终止函数。
MSVCRT.dll XcptFilter 标识要执行的异常和相关事件。
MSVCRT.dll _p___initenv 初始化环境变量。
MSVCRT.dll getmainargs 调用分析的命令行并复制参数传递给 main() 返回传递的指针。
MSVCRT.dll initterm 内部方法指浏览函数指针表并初始化它们。
MSVCRT.dll _setusermatherr 指定用户提供的事务来处理算术错误,而不是_matherr事务。
MSVCRT.dll adjust_fdiv
找不到具体函数功能,猜测为链接时自动调用的
MSVCRT.dll _p__commode 指向_commode 全局变量,它为文件 I/O 操作指定默认 文件提交模式。函数仅供内部使用,用户代码不应调用它。
MSVCRT.dll _p__fmode _p__fmode 函数仅供内部使用,用户代码不应调用它。特定模式的文件。_open_pipe 和 I/O 操作指定 binary 或 text 转换。
MSVCRT.dll _set_app_type
找不到具体函数功能,猜测是定义应用程序类型。
MSVCRT.dll except_handler3 异常处理函数。
MSVCRT.dll controlfp 获取和设置浮点控制字。
MSVCRT.dll stricmp 比较字符串s1和s2,但不区分字母的大小写。

>

Lab01_01.dll <<<<<
Kernel32.dll Sleep 将调用它的进程挂起(暂停)dwMilliseconds毫秒后继续运行,挂起时不仅不会回应用户操作,还会停止自身的运行。
Kernel32.dll CreateProcess 用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。
Kernel32.dll CreateMutex 找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。
Kernel32.dll OpenMutex 现有的一个已命名互斥体对象创建一个新句柄。
MSVCRT.dll free 释放内存空间。
MSVCRT.dll strncmp 是指定比较size个字符。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。
ws2_32.dll socket 创建套接字。
ws2_32.dll WSAStartup 即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令。
ws2_32.dll inet_addr 将一个点分十进制的IP转换成一个长整数型数(u_long类型)。
ws2_32.dll connect 建立套接字网络连接。
ws2_32.dll send 发送数据包。
ws2_32.dll shutdown 关闭套接字。
ws2_32.dll recv 接收数据包。
ws2_32.dll closesocket 关闭套接字。
ws2_32.dll WSACleanup 终止Winsock 2 DLL (Ws2_32.dll) 的使用。
ws2_32.dll ntohs 将一个16位数由网络字节顺序转换为主机字节顺序。

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

上面我把调用的系统API函数和其功能都列出来了,可以看到在这个程序中有有关于文件拷贝的函数,说明会产生基于主机的文件感染。具体的感染细节可以通过阅读汇编源代码了解。

这里写图片描述

由上图可知,

Lab01_01.exe



Lab01-01.dll

拷贝到了系统API文件夹下并重命名为了

kernel132.dll

5、是否有关于网络的恶意代码感染迹象?

根据前面找到的这两个文件所调用的系统API函数和功能可以了解到,在Lab01_01.dll中调用了大量系统的网络API,所以可以确定这些文件有关于网络的恶意代码感染的迹象。

这里写图片描述

查看了这个dll文件的汇编代码之后,由上图可以发现这个dll文件向ip地址为

127.26.152.13

的主机发送了数据包。

这里写图片描述

由上图可以知道这个数据包封装了字符串

“hello”

实验环境

操作系统:Windows XP Professional SP2

虚拟机:Parallels Desktop

参考文档

  1. 北京交通大学《恶意代码防范》课程实验文档

  2. MSDN

  3. 站长工具 > Unix时间戳



版权声明:本文为sinat_26599509原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。