侵入远程的代码也写好了

原创 2006年06月09日 18:01:00

;----------------
;编译模式="CON"
;----------------
.386
.model flat, stdcall
option casemap :none
 
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include Psapi.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
includelib Psapi.lib
;-------------------------------------------------------

Error_Handler   proto :DWORD, :DWORD, :DWORD, :DWORD
Print_Handler   proto :DWORD,  :DWORD,:DWORD
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
RetriveProcess proto :DWORD
Enject_Handle  proto :DWORD

szText MACRO Name, Text:VARARG
          LOCAL lbl
            jmp lbl
              Name db Text,0
            lbl:
          ENDM

.const
 DLG_MAIN equ 1
 ITEM_LIST  equ 1001
 BTN_ENJECT equ  1003


.DATA
 szMsg db "Hello World!",13,10,0
 proID dd 512 dup(0)
 szDbg db 256 dup(0),0
 szProcessName db 256 dup(0),0
 szNewLine db " ",13,10,0 
 szDlgName    db "MAIN_DIALOG", 0
 szDllName db  "D:/temp/Dll/Debug/Dll.dll",0

.DATA?
 dwRet dd ?
 hm HMODULE ?
 dwHmRet dd ?
 hProcess HANDLE ?
 hProcessHandle HANDLE ?
 hProcessID dd ? 
 hInstance dd ?

.CODE
START:
 assume fs:nothing
 push  offset Error_Handler
 push  fs:[0]
 mov   fs:[0],esp

 invoke GetModuleHandle,NULL
 mov hInstance,eax
 invoke DialogBoxParam,hInstance,ADDR szDlgName,0,offset DlgProc,0
 
 pop  fs:[0]
 pop   eax

 invoke ExitProcess,0

DlgProc proc hWnd,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
 invoke LoadIcon,hInstance,DLG_MAIN
 invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
 invoke SendMessage,hWnd,WM_SETTEXT,0,ADDR szMsg
.elseif uMsg==WM_COMMAND
 mov eax,wParam
 .if ax==3002
  invoke EndDialog,hWnd,TRUE
 .endif
 .if ax == 1002 ;;process
  invoke RetriveProcess,hWnd
 .endif
 .if ax==BTN_ENJECT
  invoke  Enject_Handle,hWnd
 .endif
.elseif uMsg==WM_CLOSE
 invoke EndDialog,hWnd,FALSE
.else
 mov eax,FALSE
 ret
.endif
mov eax,TRUE
ret
DlgProc endp

Print_Handler   proc  processname:DWORD , processid:DWORD,hDlg:DWORD
 LOCAL  hItem:HANDLE
 LOCAL szShortName[256]:BYTE 
 szText szFormat,"%s(%d)" 
 invoke GetDlgItem,hDlg,ITEM_LIST
 mov  [hItem] , eax
 invoke GetShortPathName,ADDR processname,ADDR szShortName,256
 invoke wsprintf,ADDR szShortName,ADDR szFormat,processname,processid
 invoke SendMessage,[hItem],LB_ADDSTRING ,0,ADDR szShortName;LB_ADDSTRING
 invoke SendMessage,[hItem],LB_SETITEMDATA ,eax,[processid];LB_ADDSTRING
 ret
Print_Handler endp

RetriveProcess proc hDlg:DWORD 
 LOCAL  hItem:HANDLE
   invoke GetDlgItem,hDlg,ITEM_LIST
 mov  [hItem] , eax
@RepeateDelItem:
 invoke SendMessage,[hItem],LB_GETCOUNT ,0 , 0;LB_ADDSTRING
 test eax , eax
 jz  @DelAllItem
 invoke SendMessage,[hItem],LB_DELETESTRING ,0,0;LB_ADDSTRING
 jmp @RepeateDelItem
@DelAllItem:
 invoke EnumProcesses,ADDR proID,512*4,ADDR dwRet
 test eax , eax
 jz   @EnumOver
 mov   ecx,[dwRet]
 SAR   ecx , 2
 mov [dwRet], ecx  

 push 0
 push offset proID   
 
@OpenProcess:
 mov  eax , [esp]  
 mov  ecx , [esp+4] 
 cmp  ecx , [dwRet]  
 jz   @EnumOver
 SAL  ecx , 2
 add  eax , ecx
 mov  eax , [eax]
 mov  [hProcessID],eax
 invoke OpenProcess,PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,0,eax
 mov [hProcessHandle], eax
 test eax , eax 
 jnz @EnumProcessModules
 invoke GetLastError
 mov ecx , [esp+4]
 inc ecx
 mov [esp+4] ,  ecx
 jmp @OpenProcess
 
@EnumProcessModules:
 invoke EnumProcessModules,eax,ADDR hm,4,ADDR dwHmRet  
 test eax , eax
 jnz @GetModuleFileNameEx  
 invoke GetLastError
 mov ecx , [esp+4]
 inc ecx
 mov [esp+4] ,  ecx
 jmp @OpenProcess 
 
@GetModuleFileNameEx:
 invoke GetModuleFileNameEx,[hProcessHandle],[hm],ADDR szProcessName,256 
 invoke Print_Handler,ADDR szProcessName,[hProcessID],hDlg
 invoke CloseHandle,[hProcessHandle]
 
   mov ecx , [esp+4]
 inc ecx
 mov [esp+4] ,  ecx  
 jmp @OpenProcess   

@EnumOver: 
 pop eax
 pop eax
 ret
RetriveProcess endp

Enject_Handle  proc hDlg:DWORD
 LOCAL  hItem:HANDLE
 LOCAL  processid:DWORD
 LOCAL  proHandle:HANDLE
 LOCAL  dLen : DWORD
 LOCAL  dWlen :DWORD
 LOCAL  lpAllocMem:DWORD
 LOCAL  lpfLoadLib:DWORD
 LOCAL  dwThreadID:DWORD
 invoke GetDlgItem,[hDlg],ITEM_LIST
 mov  [hItem] , eax 
 invoke SendMessage,[hItem],LB_GETCURSEL,0,0
 invoke SendMessage,[hItem],LB_GETITEMDATA ,eax,0;LB_ADDSTRING
 mov [processid],eax
 invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,0,[processid]
 mov [proHandle],eax
 test eax , eax
 jz @ErrMsg
 invoke lstrlen,ADDR szDllName
 inc eax
 mov [dLen] , eax
 invoke VirtualAllocEx,[proHandle],NULL,[dLen],MEM_COMMIT,PAGE_READWRITE
 test eax, eax
 jz @ErrMsg
 mov [lpAllocMem],eax
 invoke WriteProcessMemory,[proHandle],[lpAllocMem],ADDR szDllName,[dLen],ADDR dWlen
 test eax , eax
 jz  @ErrMsg
 mov ecx ,  [dLen]
 mov edx ,  [dWlen]
 cmp ecx , edx
 jnz  @ErrMsg
 szText KerName,"Kernel32.DLL"
 invoke GetModuleHandle,ADDR  KerName
 test eax,eax
 jz @ErrMsg
 szText LoadLibName,"LoadLibraryA"
 invoke GetProcAddress,eax,ADDR LoadLibName
 test eax,eax
 jz @ErrMsg
 mov [lpfLoadLib] , eax
 invoke CreateRemoteThread,[proHandle],0,0,[lpfLoadLib],[lpAllocMem],0,ADDR dwThreadID
 mov [dwThreadID],eax
 test eax , eax
 jz  @ErrMsg
 invoke Sleep,3000
 invoke VirtualFreeEx,[proHandle],[lpAllocMem],[dWlen],MEM_DECOMMIT
 invoke CloseHandle,[dwThreadID]
 jmp @ExitEnject
@ErrMsg: 
 szText szError,"Error Open Process"
 invoke MessageBox,0,ADDR szError,0,0
@ExitEnject:
 ret
Enject_Handle endp

Error_Handler proc uses ecx  lpExceptRecord:DWORD, lpFrame:DWORD, lpContext:DWORD, lpDispatch:DWORD
 mov eax , 1
 ret
Error_Handler endp

end START

----------------------------------

侵入远程进程的代码也写完了。不是很复杂!!!

csdn的blog居然不支持上传文件。无语。。

下一步,钩挂Api!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

获取Android自己写好了的apk以及反编译

今天,我们先说一下,获取Android自带的apk以及反编译它们来学习Android工程师是怎样写的,今天我们就以拿到Android自带的短信管理器的apk为例子 你可能有疑问,为什么要那么麻烦,从系...

MFC中运行一个已经写好了的程序的函数winexec

#include "iostream" #include "windows.h" using namespace std; int main() { WinExec("要调用的程序名",NU...

转发别人的 如何写好代码

作者:金蝶中间件公司CTO袁红岗 不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手, 因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基...

C++写好代码的十个秘诀

  • 2009-05-16 13:10
  • 969KB
  • 下载

写好CSS代码的70个专业建议-前端开发博客

写好CSS代码的70个专业建议-前端开发博客 CSS 并不总是容易处理。 在你的能力和经验不够的时候,CSS编程会成为一个噩梦,特别是你不确定为页面元素中选择哪种选择器的时候。使用一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)