Suicide EXE (Inject)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

;*******************************************************

;ml /c /coff /Fo selfkill-Rnt.obj selfkill-Rnt.asm

;Link /subsystem:windows /SECTION:.text,WRE selfkill-Rnt.obj

;*******************************************************

.386

.model flat, stdcall

option casemap :none

include windows.inc

include user32.inc

includelib user32.lib

include kernel32.inc

includelib kernel32.lib

;*******************************************************

.code

;删除自身的远程线程代码

KREMOTE_CODE_START equ this byte

call @F

@@:

pop ebx

sub ebx,offset @B ;重定位

push 500

call [ebx+_lpselfkillSleep]

lea eax,[ebx+offset _selfkillselfname]

push eax

call [ebx+_lpselfkillDeleteFile]

ret

_lpselfkillSleep dd ?

_lpselfkillDeleteFile dd ?

_selfkillselfname:

KREMOTE_CODE_END equ this byte

KREMOTE_CODE_LENGTH equ offset KREMOTE_CODE_END - offset KREMOTE_CODE_START

;*******************************************************

.data?

REMOTE_CODE db KREMOTE_CODE_LENGTH dup (?)

szSelfName db MAX_PATH dup (?)

.code

;*******************************************************

;用于在explorer.exe进程中插入远程线程

szDesktopClass db 'Progman',0

szDesktopWindow db 'Program Manager',0

_RemoteCode2KXP proc @_RmCodeStart,@_RmCodeLen

local @hRmCodeMemory

local @hselfkillProcessID

local @hselfkillProcess

;查找文件管理器窗口并获取进程ID,然后打开进程

invoke FindWindow,addr szDesktopClass,addr szDesktopWindow

lea ecx,@hselfkillProcessID

invoke GetWindowThreadProcessId,eax,ecx

invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,FALSE,@hselfkillProcessID

mov @hselfkillProcess,eax

;在进程中分配空间并将写入远程代码,建立远程线程

invoke VirtualAllocEx,@hselfkillProcess,NULL,@_RmCodeLen,MEM_COMMIT,PAGE_EXECUTE_READWRITE

.if eax

mov @hRmCodeMemory,eax

invoke WriteProcessMemory,@hselfkillProcess,eax,@_RmCodeStart,@_RmCodeLen,NULL

xor eax,eax

invoke CreateRemoteThread,@hselfkillProcess,eax,eax,@hRmCodeMemory,eax,eax,eax

invoke CloseHandle,eax

.endif

invoke CloseHandle,@hselfkillProcess

ret

_RemoteCode2KXP endp

;*******************************************************

szselfkillDllKernel db 'Kernel32.dll',0

szselfkillSleep db "Sleep",0

szselfkillDeleteFile db "DeleteFileA",0

start:

;取得API地址(硬编码地址)

invoke GetModuleHandle,addr szselfkillDllKernel

mov esi,eax

invoke GetProcAddress,esi,offset szselfkillSleep

mov _lpselfkillSleep,eax

invoke GetProcAddress,esi,offset szselfkillDeleteFile

mov _lpselfkillDeleteFile,eax

;把远程代码和自身地址合并

cld

mov ecx,KREMOTE_CODE_LENGTH

mov esi,offset KREMOTE_CODE_START

mov edi,offset REMOTE_CODE

rep movsb

invoke GetModuleFileName,NULL,offset szSelfName,MAX_PATH

push KREMOTE_CODE_LENGTH+MAX_PATH

push offset REMOTE_CODE

call _RemoteCode2KXP

ret

end start

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航