恶意代码防范 实验一
实验目的
了解并熟悉给定的工具:
- PEiD
- Ollydbg
- Upxshell
- UPX脱壳终结者
使用所给文件完成以下问题
- 这些文件何时编译的/li>
- 这两个文件是否有迹象被加壳或混淆据何在/li>
- 是否有导入函数能/li>
- 是否有任何其他文件或基于主机的迹象,让你可以再受感染系统上查找/li>
- 是否有关于 络的恶意代码感染迹象/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
参考文档
- 北京交通大学《恶意代码防范》课程实验文档
- MSDN
- 站长工具 > Unix时间戳
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!