签到

05月11日
尚未签到

共有回帖数 0

    霜晨守候

    等级:
    最近看到一个关于"进程保护"的问题,无聊就研究了一下,总共得出了2种比较可行的方法,第一种就是进程隐藏,第2种就是进程守护.代码发出来,希望大家可以互相学习......

    进程守护:http://hi.baidu.com/ciw%5Fblue/blog/item/edd5ff457062603b869473a1.html

    进程隐藏:http://hi.baidu.com/ciw%5Fblue/blog/item/bcb8b0c4ad66e9cf38db49f3.html

    进程隐藏的代码:
    .386  
    .model flat, stdcall  
    option casemap:none  
    include windows.inc  
    include kernel32.inc  
    include user32.inc  
    includelib kernel32.lib  
    includelib user32.lib  

    .data  
         
        szLoadLibrary db 'LoadLibraryA',0  
        szGetProcAddress db 'GetProcAddress',0  
        szGetModuleHandle db 'GetModuleHandleA',0  
         
        szProcessWndName db 'Program Manager',0  
           
        szKernel   db 'Kernel32.dll',0  
         
    .data?  
        dwProcessID dd ?  
        hProcess   dd ?      
        lpLoadLibrary dd ?  
        lpGetProcAddress dd ?  
        lpGetModuleHandle dd ?  
        hModule   dd ?  
        lpRemoteCode dd ?  
         
         
    .code  
    REMOTE_CODE_START equ this byte  
    _lpLoadLibrary   dd ?  
    _lpGetProcAddress dd ?  
    _lpGetModuleHandle dd ?  
    _lpMessageBox   dd ?  
    _hInstance   dd ?  
    _hUserModule   dd ?  
    _szMessageBox   db 'MessageBoxA',0  
    _szUserDLL   db 'User32.dll',0  
    _szMsgCaption   db '远程成功',0  
    _szMsgText   db '请打开Windows任务管理器,看看!',0  

    ;  
    _RemoteThread proc uses ebx edi esi lParam  
       
      call @F  
      @@:  
      pop ebx  
      sub ebx,offset @B  
       
      push NULL  
      call [ebx + _lpGetModuleHandle]  
      mov   [ebx + _hInstance],eax  
       
      lea   eax, [ebx + offset _szUserDLL]  
      push eax  
      call [ebx + _lpLoadLibrary]  
       
      .if eax  
       
      mov [ebx + _hUserModule], eax  
       
      lea eax, [ebx + offset _szMessageBox]  
      push eax  
      mov   eax, [ebx + _hUserModule]  
      push eax  
      call [ebx + _lpGetProcAddress]  
           
              .if eax  
               
        mov   [ebx + _lpMessageBox], eax  
        lea edx, [ebx + offset _szMsgText]  
        lea ecx, [ebx + offset _szMsgCaption]  
         
        push MB_OK  
        push ecx  
        push edx  
        push NULL  
      call [ebx + _lpMessageBox]  
       
      .endif  
       
      .endif  
      ret  
    _RemoteThread endp  
    REMOTE_CODE_END   equ this byte  
    REMOTE_CODE_LENGTH equ offset REMOTE_CODE_END - offset REMOTE_CODE_START  

    start:  

    invoke GetModuleHandle, offset szKernel  
    mov hModule, eax  

    invoke GetProcAddress, hModule, offset szLoadLibrary  
    mov lpLoadLibrary, eax  

    invoke GetProcAddress, hModule, offset szGetProcAddress  
    mov lpGetProcAddress, eax  

    invoke GetProcAddress, hModule, offset szGetModuleHandle  
    mov lpGetModuleHandle, eax  


    invoke FindWindow, NULL, offset szProcessWndName   ;获取窗口句柄  
    invoke GetWindowThreadProcessId, eax, offset dwProcessID   ;获取程序   ID  

    invoke OpenProcess, PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or   PROCESS_VM_WRITE,  
          FALSE, dwProcessID  
    .if eax  
      mov hProcess, eax  
            invoke VirtualAllocEx, hProcess, NULL, REMOTE_CODE_LENGTH, MEM_COMMIT, PAGE_EXECUTE_READWRITE  

      .if eax  
      mov lpRemoteCode, eax  
       
      invoke WriteProcessMemory, hProcess, lpRemoteCode, offset REMOTE_CODE_START,  
        REMOTE_CODE_LENGTH , NULL  
         
      invoke WriteProcessMemory, hProcess,lpRemoteCode,   offset lpLoadLibrary,  
            sizeof dword * 3, NULL  
       
      mov eax, lpRemoteCode  
      add eax, _RemoteThread - offset REMOTE_CODE_START  
      invoke CreateRemoteThread, hProcess, NULL, 0, eax, 0, NULL, 0    
       
      invoke CloseHandle, eax  
      .endif  
       
    .endif  

    invoke CloseHandle, hProcess  
    invoke ExitProcess, 0  
    end start  

    楼主 2016-01-15 18:27 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知