枚举进程(汇编)

原创 2006年06月08日 21:32: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

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

.const
 DLG_MAIN equ 1
 ITEM_LIST  equ 1001


.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

.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
 ;LOCAL  hItem:HANDLE
 ;invoke GetDlgItem,hWnd,ITEM_LIST
 ;mov  [hItem] , 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
.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 szOutPut[256]:BYTE 
 szText szFormat,"%s(%d)"
 invoke GetDlgItem,hDlg,ITEM_LIST
 mov  [hItem] , eax
 invoke wsprintf,ADDR szOutPut,ADDR szFormat,processname,processid
 invoke SendMessage,[hItem],LB_ADDSTRING ,0,ADDR szOutPut;LB_ADDSTRING
 ret
Print_Handler endp

RetriveProcess proc hDlg:DWORD  
 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
 
   mov ecx , [esp+4]
 inc ecx
 mov [esp+4] ,  ecx  
 jmp @OpenProcess   

@EnumOver: 
 pop eax
 pop eax
 ret
RetriveProcess endp

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

end START

Ring 3层枚举进程的四种方法

1.CreateToolhelp32Snapshot()。这一种是比较常见的,利用进程快照进行枚举进程,主要利用CreateToolhelp32Snapshot()、Process32First()和...
  • sinat_34260423
  • sinat_34260423
  • 2017年01月08日 21:16
  • 481

枚举进程中的模块

在Windows中枚举进程中的模块主要是其中加载的dll,在VC上主要有2种方式,一种是解析PE文件中导入表,从导入表中获取它将要静态加载的dll,一种是利用查询进程地址空间中的模块,根据模块的句柄来...
  • lanuage
  • lanuage
  • 2017年05月16日 21:22
  • 722

【转】Windows下如何枚举所有进程(含代码)

Windows下如何枚举所有进程 Posted on 13:37:00 by 晓月 and filed under Coding, Windows, Windows Mobile   要编写一个类似于...
  • zdragon2002
  • zdragon2002
  • 2009年01月03日 11:29
  • 8519

枚举进程,得到所有进程全路径文件名

#include "stdafx.h" #include   #include //声明快照函数的头文件  #include   #include "CpuUsage.h" #inclu...
  • jiangqin115
  • jiangqin115
  • 2014年08月26日 09:37
  • 713

9种枚举枚举进程的方法及实现

////native api获得进程表NTSTATUS NativeApiEnumProcess(){ ULONG pNeededSize=0; int iCount = 1; int bOver=0...
  • instruder
  • instruder
  • 2010年07月02日 20:56
  • 779

枚举当前系统进程以及进程加载模块

枚举当前系统进程的方法大致分一下几个步骤:一、 提升应用程序的进程权限///////////////自定义函数实现///////////////// BOOL PromotePrivilege(...
  • acdnjjjdjkdckjj
  • acdnjjjdjkdckjj
  • 2011年04月03日 21:11
  • 9744

Win32汇编实现枚举进程(PSAPI.DLL)

EnumProcesses是PSAPI提供的导出函数,利用该函数可以在无须快照的情况下枚举进程,甚至可以枚举出一些简单的隐藏进程。本例中的枚举用到了回调过程,在回调过程中用户可以随时决定是否中断枚举,...
  • Modest
  • Modest
  • 2008年02月01日 21:27
  • 1716

内核枚举进程总结

我知道的有三种方法 这里的第三种和第二种是一样的 隐藏进程也可以在这么做手脚 但需要注意多线程,在操作前,理应加锁 可以参考这篇文章 http://blog.csdn.net/zfdyq0/artic...
  • zhuhuibeishadiao
  • zhuhuibeishadiao
  • 2016年05月02日 03:17
  • 1455

转 枚举进程窗口

原文:http://blog.csdn.net/Icedmilk/archive/2010/02/01/5278371.aspx#include   #include   #include   #in...
  • zeflove
  • zeflove
  • 2010年04月22日 14:40
  • 2772

ZwQuerySystemInformation枚举进程

mark一下 #include #include #include #define SystemProcessesAndThreadsInformation 5 // 动态调用 type...
  • u012410612
  • u012410612
  • 2013年11月28日 22:55
  • 1051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举进程(汇编)
举报原因:
原因补充:

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