计算机病毒分析与防治教程习题答案.doc_第1页
计算机病毒分析与防治教程习题答案.doc_第2页
计算机病毒分析与防治教程习题答案.doc_第3页
计算机病毒分析与防治教程习题答案.doc_第4页
计算机病毒分析与防治教程习题答案.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题答案习题一1简述自己在使用计算机时遇到的病毒,该病毒表现特征。 省略。2简述文件型病毒和引导型病毒的工作原理。磁盘引导区传染的病毒主要是用病毒的全部或部分逻辑取代正常的引导记录,而将正常的引导记录隐藏在磁盘的其他地方。由于引导区是磁盘能正常使用的先决条件,因此,这种病毒在运行的一开始(如系统启动)就能获得控制权,其传染性较大。由于在磁盘的引导区内存储着需要使用的重要信息,如果对磁盘上被移走的正常引导记录不进行保护,则在运行过程中就会导致引导记录的破坏。引导区传染的计算机病毒较多,例如,“大麻”和“小球”病毒就是这类病毒。存在于文件中,被加载后执行。拦截文件操作或主动搜索磁盘文件。3简述病毒在计算机系统中存在的位置。 引导扇区、内存、PE文件中、脚本文件中、磁盘未用扇区、数学扇区。4简述计算机病毒的传播途径。1) 软盘、光盘和USB盘。它们作为最常用的交换媒介,在计算机应用的早期对病毒的传播发挥了巨大的作用,因那时计算机应用比较简单,可执行文件和数据文件系统都较小,许多执行文件均通过相互拷贝、安装,这样病毒就能通过这些介质传播文件型病毒;另外,在用它们列目录或引导机器时,引导区病毒会在软盘与硬盘引导区内互相感染。2) 硬盘。由于带病毒的硬盘在本地或移到其他地方使用、维修等,将干净的软盘、USB盘感染并再次扩散。3) 网络。非法者设计的个人网页,容易使浏览网页者感染病毒;用于学术研究的病毒样本,可能成为别有用心的人的使用工具;散见于网站上大批病毒制作工具、向导、程序等等,使得无编程经验和基础的人制造新病毒成为可能;聊天工具如QQ的使用,导致有专门针对聊天工具的病毒出现;即使用户没有使用前面的项目,只要计算机在网络上,而系统存在漏洞,针对该漏洞的病毒有可能感染该台机器。5简述病毒的工作机制。 病毒的触发机制、病毒的传播机制、病毒的破坏机制。6简述反病毒技术的发展阶段。 1) 病毒扫描,当前最主要的查杀病毒方式,它主要通过检查文件、扇区和系统内存、搜索新病毒,用“标记”查找已知病毒,病毒标记就是病毒常用代码的特征,病毒除了用这些标记,也用别的方法。有的根据算法来判断文件是否被某种病毒感染,一些杀毒软件也用它来检测变形病毒。2) 启发式扫描是通过分析指令出现的顺序,或组合情况来决定文件是否感染,每个对象都要检查,这种方式查毒效果是最高的,但也最可能出现误报。3) CRC检测的原理是计算磁盘中的实际文件或系统扇区的CRC值(检验和),这些CRC值被杀毒软件保存到它自己的数据库中,在运行杀毒软件时,用备份的CRC值与当前计算的值比较,可以知道文件是否已经修改或被病毒感染。4) 行为判断就是通过驻留的杀毒软件截获那些对用户有病毒危险的行为,这些病毒可能会在修改可执行文件、引导扇区或MBR时被发现,这种方法的优点在于可以在病毒感染的早期发现并阻止,但有的病毒可以越过这种保护,使得杀毒软件完全失效。5) 免疫有两种:一种是感染警告,另一种是阻止病毒感染。第一种免疫方式主要是预防那些把自己添加到文件末尾的病毒(通常是文件型病毒),每个文件都会检查。但有一个致命的弱点:无法检测到诡密病毒,所以实际上很少用这种免疫方式。第二种免疫方式主要是预防系统被某种特定病毒感染,如果文件被病毒修改就可以检测到。7以“欢乐时光”、“冲击波”病毒为例,说明其命名方式。新欢乐时光是该病毒的中文名,其英文名包括(方括号中是相对应的各个厂家):HTML.Redlof.A Symantec, VBS.Redlof AVP, VBS_REDLOF.A Trend, VBS/Redlof-A Sophos, VBS.KJ 金山, Script.RedLof 瑞星, VBS/KJ 江民。冲击波有Worm.Blaster.E ,Worm.Blaster.F 等表示。习题二1 试叙述引导型病毒的主要特点。 引导型病毒是一种在ROM BIOS之后,系统引导时出现的病毒,它先于操作系统,依托的环境是BIOS中断服务程序。引导型病毒是利用操作系统的引导模块放在某个固定的位置,并且控制权的转交方式是以物理位置为依据,而不是以操作系统引导区的内容为依据,因而病毒占据该物理位置即可获得控制权,而将真正的引导区内容搬家转移或替换,待病毒程序执行后,将控制权交给真正的引导区内容,使得这个带病毒的系统看似正常运转,而病毒已隐藏在系统中并伺机传染、发作。2试验利用Debug编程读出引导扇区,然后反汇编分析。 用a命令编写一段代码,代码调用中断int 13h读。然后用U命令反汇编。3. 读出一个硬盘的MBR,然后分析磁盘逻辑分区结构。 同上。从0x1be开始分析。4试验:先格式化一张软盘,用int 13h修改FAT中的某项为0xFFF7拷贝尽量多文件,验证其对应的簇是否会被文件使用。 不会。因为该表项不为0,表示已经被占用。5设计一个自己的引导程序,使程序先提示要输入密码,密码正确才能进入系统,否则死机。思考怎么实现。 .MODEL SMALL.STACK.DATA.CODE.STRARTUPMOV AX, 0201H ;AH=02H,为中断的读扇区数据功能,CL=01H 为读扇区的个数;MOV BX, 4000H ;BX=4000H,为存放数据缓冲区; MOV CX, 0001H ;CH=00H,为磁道号;CL=01H,为第1扇区号;MOV DX, 0080H ;DL=80H,为第一个硬盘;DH=00H,为磁头号 INT 13H ;调用中断,读取数据MOV AX, 0301H ;AH=03H,为中断的写扇区数据功能,CL=01H 为读扇区的个数;MOV BX, 4000H ;BX=4000H,为读取数据缓冲区; MOV CX, 0003H ;CH=00H,为磁道号;CL=03H,为第3扇区号;MOV DX, 0080H ;DL=80H,为第一个硬盘;DH=00H,为磁头号 INT 13H ;调用中断,写入数据INT 20H ;退出程序 .EXIT 0END;File name : boot.asm.model tiny ;生成com 文件.code ;代码段、数据段.startup ;代码段开始伪指令 db 7b00H dup(0) ;空7b00字节 pos0 equ $ ;取当前偏移地址值 mov ax,cs ;初始化ES,DS为0 mov es,ax mov ds,ax mov ax,600h ;ah=6,屏幕上滚 mov bh,0f0h mov cx,0 mov dx,184fh int 10h mov dl,1ah mov si,offset password ;取偏移地址,用于下面显示p137: mov ah,2 mov dh,10h mov bh,0 int 10h mov al,si cmp al,0 ;字符串显示结束? jz p160 ;ZF=0,结束跳转 mov ah,9 mov cx,1 mov bh,0 mov bl,70h int 10h inc dl inc si ;指向下一个字符 jmp p137 ;显示下一个字符p160: mov ax,cs; mov es,ax mov ds,ax mov cx,8 ;最多放8密码 mov dl,23h mov di,offset secret_code ;di寄存器为键盘输入字符存放地址p175: mov ah,0 int 16h ;等待键盘输入 cmp al,0dh ; 和回车键比较 jz p1f6 ; 是回车键ZF=0,跳转 mov ah,2 ;显示光标位置 mov dh,10h ; mov bh,0 int 10h cmp al,8 ;和删除键比较 jz p1c2 ;是,跳转 push ax ;al内为得到的密码符号 mov ah,0eh mov al,2ah ;* 的符号ASII码 mov bl,7 int 10h ;显示 * pop ax ;弹出al为键入的字符值 mov di,al ;放密码 inc di ;指向下一个空间 dec cx cmp cx,0 ;超过8个字符么?p19e: jz p1aa inc dlp1a2: jmp p175 p1aa: mov dh,10h mov ah,2 mov dl,23h mov bh,0 int 10h mov ah,9 mov al,0 mov bl,7 mov cx,9 int 10hp1bf: jmp p160p1c1: push cxp1c2: push cx mov ah,3 mov bh,0 int 10h cmp dl,23h jz p175 cmp dl,80p1d2: jz p175 mov ah,2 dec dl int 10hp1da: mov ah,0eh mov al,0 mov bl,7 int 10h mov di,ax dec di mov di,ax pop cxp1eb: jmp p175 pop es inc bx add al,0e8h xchg cl,chp1f3: add si+44,alp1f6: mov ax,cs; ;应该为 0 mov es,ax mov ds,ax mov si,7c00h+1b0h ; 1b0-1bd间可以放设定密码 mov di,offset secret_code mov cx,4 repz cmpsw ;取得的字符和设定的口令比较 jz pequal ;相等,跳转 ;不相等退出,显示错误,死机 mov si,offset err1 call display ;显示提示错误字符串 hlt ;中止pequal: ;相等 mov ax,cs mov es,ax mov ds,ax mov cx,100h ;复制自己到0:600H避免读原引导程序时覆盖自己 mov di,600h mov si,7c00h rep movsw db 0eah ;0eah为jmp指令 dw pos2-pos0+600h,0h ;跳转到新位置的 pos2 pos2 equ $ mov ax,0201h 读原来引导扇区程序到0000:7c00H mov bx,7c00h mov cx,3 mov dx,80h int 13h db 0eah ;0eah为jmp指令 dw 7c00h,0h ;分别为跳转的偏移地址和段地址 display proc ;显示字符串子程序 push ax push bx push cx push dx push sipAgain: mov ah,2 mov dh,10h mov bh,0 int 10h mov al,si cmp al,0 ;字符显示结束? jz return1 mov ah,9 mov cx,1 mov bh,0 mov bl,70h int 10h inc dl inc si jmp pAgainreturn1: pop si pop dx pop cx pop bx pop axretdisplay endp password db Password:,0 secret_code db 8 dup(0),0 err1 db Mistake error!,0db 107 dup(0)real_code db 1234,0,0,0,0,0,0,0,0,0,0 ;设定口令为”1234”partion db 64 dup(0) ;分区表数据,清0dw 0aa55H ;引导程序识别标志end6分析病毒代码,是如何复制自己到高端内存,然后修改内存的高端位置标记值的? 参考引导程序中的自我复制。7将书中接管中断程序设计例子编译成可执行文件,然后安装。再实验在Debug调用int 13h分别读硬盘与软盘,观察发现到的现象。 略。习题三1生成一个最简单的COM格式文件,用Debug观察其内存结构。 省略。看教材的描述。2 生成一个简单的EXE格式文件,用Debug观察其内存结构,尤其比较初始化前后的不同,辨识重定位表的实现方式。省略。3分析DOS文件型病毒利用的主要系统功能。 中断21h的功能35h,以及文件操作功能,内存操作功能。4分析DOS文件型病毒与引导行病毒常驻方式的区别。 前者自我复制到高端内存并修改0:413h的值。后者使用DOS的功能实现。5比较第3节中病毒实例中,病毒是如何修改COM格式和EXE格式文件的。 修改com文件用debug直接修改,修改exe文件需要修改头结构,也可以把扩展名变成其它名字在装进内存修改。6分析病毒实例中是如何修改EXE头结构的。 看头文件各字段的意义。7用Debug尝试修改一个EXE文件,使其运行前总是显示一行提示信息。 编写一个程序,用来修改该exe文件的头,初始执行代码。习题四1分析notepad.exe、kernel32.dll文件的结构。 用反汇编工具,如W32Dasm对被分析文件进行反汇编。2如果被修改文件为只读,要感染它,怎么办? 先修改它的属性,然后再修改,修改完后再把属性改回来。3如果将节中的节实际长度和占用空间长度改成相同大小,思考是否可以感染CIH。 不能。4分析PE文件结构,解释一个PE文件既能够在Windows下显示界面,又能够在DOS下显示类似Turbo C2.0界面的原理。 生成一个程序,看PE结构会知道,可以既在Windows下运行,也可以在DOS下运行。5对比静态和动态方式调用API函数的异同,尝试用两种方式调用MessageBox函数。 静态直接使用函数名字,动态则使用函数地址。前者在使用函数时将所在库文件装载到内存,后者则可以用则装载,不用则释放。6在图4-22,文件aaa.exe感染前后的大小不变,文件修改时间却变了。可是病毒CIH修改文件前后时间不变,阐述原理并实现。 先取当前文件时间(GetFileTime),然后修改,最后将原来取的时间改回去(SetFileTime)。7如何判断一个可执行文件结构是dll结构还是exe结构,是窗体程序(GUI)还是控制台(CUI)程序? 根据头文件中结构的字段。8将一个DLL文件的所有导出函数列举出来。 参照教材中方法。9参考本章的方法,以不修改入口地址方式修改PE。办法是增加一个节,新节显示信息框。入口处指令修改为jmp xxxx,程序执行时,显示信息框后返回原入口。1) 试实现之。2) 论述原理,重点阐述要修改的主要数据。3) 与DOS下修改COM文件格式进行比较。 修改节的属性为可读可写。增加一个新节,从原入口跳转到新节,最后再跳转到原地址。习题五1比较网络蠕虫与一般病毒的区别。 不修改文件,仅占用内存,以独立文件存在。2分析一个程序中堆、栈、全局变量、局部变量在内存中的地址空间布局。堆是程序员分肥的内存空间,如用new分配的。栈是函数执行时为局部变量,实际参数分配的空间。全局变量在数据区。3设计清除“求职信”病毒的专杀软件思路。设定的搜索字符串;搜索磁盘,有该字符串则覆盖病毒数据。搜索使用子线程。4分析共享蠕虫的原理以及防止策略。系统有共享的建立方式,病毒也可以使用。5设“欢乐时光”的特征码是“VBS.Haptime.Amm”,怎样编写专杀工具,怎样避免误杀?主线程显示过程与结果。子线程搜索文件,寻找字符串,匹配则覆盖。如用空格覆盖。习题六1 分析木马与一般病毒的区别。不修改文件,独立文件存在。使用网络控制;存在两个文件。2 从防止防火墙拦截的角度分析木马的通信技术。使用ICMP、UDP通信协议或干脆删除防火墙软件。3 尝试用UDP协议实现将文件从一台机器传送到另一台机器。参照课件中UDP程序。4 本章中讲到,如果发现某模块在某进程内,要删除该模块,怎么实现?进行实验。先将该模块所在的所有进程删除,然后再删除模块。5 编程实现文件关联,如双击某个你设定的扩展名后,你编写的程序会启动并打开它。使用注册表类操作函数reg*实现。关联的方式教材中对txt文件关联有全面描述。6 讨论怎么实现程序的定时启动。At命令或设计程序检测时间以实现。7 实验用回收站隐藏文件。CopyFile,在参数中使用回收站路径就可以。习题七设计一个程序,具有以下功能:1) 列举系统的所有进程和进程内模块以及模块所在的地址到一个数组。 2) 所有程序的运行必须通过该程序,并将进程ID记录到一个数组。3) 生成一个子线程,循环列举系统进程,当发现未经允许的进程运行即杀掉该进程。分析如下代码:UINT Thread(LPVOID param)CGetAllInfoDlg *mys=(CGetAllInfoDlg*)param; mys-OnGetProcess(); do mys-ScanProcess(); while(mys-status);return 1;/ CGetAllInfoDlg dialogCGetAllInfoDlg:CGetAllInfoDlg(CWnd* pParent /*=NULL*/): CDialog(CGetAllInfoDlg:IDD, pParent)/AFX_DATA_INIT(CGetAllInfoDlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);status=0;void CGetAllInfoDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CGetAllInfoDlg)DDX_Control(pDX, IDC_BgetAll, m_BgetAll);DDX_Control(pDX, IDC_LIST1, m_list);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CGetAllInfoDlg, CDialog)/AFX_MSG_MAP(CGetAllInfoDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BgetAll, OnBgetAll)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CGetAllInfoDlg message handlersBOOL CGetAllInfoDlg:OnInitDialog()CDialog:OnInitDialog(); TotalFileNum=0;fp.Open(info.txt,CFile:modeCreate|CFile:modeWrite);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconaProcesses= new DWORD 1024;pagain= new DWORD1024;/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a control/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CGetAllInfoDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CGetAllInfoDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CGetAllInfoDlg:OnBgetAll() if(!status)status=1; AfxBeginThread(&Thread,this,THREAD_PRIORITY_BELOW_NORMAL,0,0); m_BgetAll.SetWindowText(暂停搜索);else m_BgetAll.SetWindowText(查所有信息); status=0;void CGetAllInfoDlg:OnGetProcess()DWORD cbNeeded;/unsigned int i;/枚举系统进程ID列表if(!EnumProcesses( aProcesses, 1024*sizeof(DWORD), &cbNeeded ) )return;/ Calculate how many process identifiers were returned./计算进程数量cProcesses1 = cbNeeded / sizeof(DWORD);/ 输出每个进程的名称和ID/for ( i = 0; i cProcesses1; i+ )PrintProcessNameAndID( aProcessesi);void CGetAllInfoDlg:PrintProcessNameAndID(DWORD processID)char szProcessNameMAX_PATH = unknown;/取得进程的句柄HANDLE hProcess=OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID);/取得进程名称if ( hProcess )HMODULE hMod;DWORD cbNeeded;if(EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) /GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );/该函数得到进程文件名 GetModuleFileNameEx(hProcess,hMod,szProcessName, sizeof(szProcessName);/AfxMessageBox(szProcessName);/该函数得到进程全文件名路径 /回显进程名称和IDCloseHandle( hProcess );tKillProcess(processID);CString in;SYSTEMTIME t;:GetLocalTime(&t);in.Format(%d月-%d日-%d时:%d分%d秒)杀死:,t.wMonth,t.wDay,t.wHour,t.wMinute,t.wSecond);in+=szProcessName;m_list.AddString(in);void CGetAllInfoDlg:OnKillProcess(DWORD processID)tKillProcess(processID);BOOL CGetAllInfoDlg:SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)TOKEN_PRIVILEGES tp;/包含访问令牌的权限设置信息LUID luid;/局部唯一ID值/第一个参数是系统名,为NULL,表示在本地系统查询;/第二个参数为要查询的权限名,定义在文件 Winnt.h 中/如果成功,返回值为非0,其在系统中的 ID 值为第三个参数所指if(!LookupPrivilegeValue(NULL,lpszPrivilege,&luid) m_list.AddString(查询权限值错误); return FALSE; tp.PrivilegeCount = 1; /权限列的个数tp.Privileges0.Luid = luid;if (bEnablePrivilege)tp.Privileges0.Attributes = SE_PRIVILEGE_ENABLED; /使能权限elsetp.Privileges0.Attributes = 0;/设置 luid 进程的权限AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); if (GetLastError() != ERROR_SUCCESS) m_list.AddString(调整权限失败); return FALSE; return TRUE;BOOL CGetAllInfoDlg:tKillProcess(DWORD pid) CString inf;HANDLE hProcess=NULL,hProcessToken=NULL;OSVERSIONINFO ver;ver.dwOSVersionInfoSize=sizeof(ver);/必须的,否则不正确if(!GetVersionEx(&ver) m_list.AddString(无法判断当前操作系统); return 0; if(ver.dwPlatformId=VER_PLATFORM_WI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论