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

恶意代码防范 实验一

实验目的

了解并熟悉给定的工具:

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

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

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

1、这些文件何时编译的

使用打开文件,可以看到这个文件编译时间的时间戳,把这个十六进制时间戳转换成十进制就可以在站长工具 > Unix时间戳查到这个时间戳对应的北京时间。

这里写图片描述

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

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

我们用PEiD打开这两个文件,发现底下都写着,就此看来,以这个软件扫描的能力内这两个文件都是没有加壳、没有被混淆的。

为了验证这个结论,我把其中一个文件使用工具加壳,再用查看,发现底下不再是原来的VC6.0了,变成了UPX加壳的信息,说明加壳成功了。

这里写图片描述

我发现不仅在后面的实验内容中可以使用到,这个地方我们还可以用自带的脱壳脚本和脱壳功能来为我们自己加壳的文件脱壳。

这里写图片描述

3、是否有导入函数能/h2>

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

这里写图片描述
所属库 函数名 函数功能

>

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、是否有任何其他文件或基于主机的迹象,让你可以再受感染系统上查找/h2>

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

这里写图片描述

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

这里写图片描述

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

实验环境

操作系统:Windows XP Professional SP2

虚拟机:Parallels Desktop

参考文档

  1. 北京交通大学《恶意代码防范》课程实验文档
  2. MSDN
  3. 站长工具 > Unix时间戳

来源:Lauhoman

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年4月15日
下一篇 2016年4月15日

相关推荐