只有本站会员才能查看附件,请 登录
上面的是处理快捷方式后的图 ,第一个源码资料文件我就不发了。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;去掉快捷方式里的查找目标等
;复习映射内存文件的几个API
;by 153785587
;原理:http://hi.baidu.com/kingcham/blog/item/253c132bed092824d52af145.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
;include gdi32.inc ;图形
includelib user32.lib
includelib kernel32.lib
;includelib gde32.lib
include shell32.inc
includelib shell32.lib
include macro.asm ;ctxt("")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IDD_DIALOG1 equ 100
;IDC_BUTTON1 equ 1000
IDC_EDIT1 equ 1001
;IDC_BUTTON2 equ 1002
IDC_STATIC equ 1003
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LinkCheck equ 0000004Ch
;LinkGuid equ
NoLink equ 00001091h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data?
hInstance dd ? ;模块句柄
hMain dd ? ;对话框句柄
hFile dd ?
hMapFile dd ?
lpMemory dd ?
szDragQueryFileName db MAX_PATH dup (?)
.const
.code
_CheckLink proc uses esi _lpLinkStart
mov esi,_lpLinkStart
.if DWORD ptr [esi]==LinkCheck
add esi,14h
mov DWORD ptr [esi],NoLink
invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szDragQueryFileName
.endif
invoke UnmapViewOfFile,lpMemory
invoke CloseHandle,hMapFile
invoke CloseHandle,hFile
ret
_CheckLink endp
;
;_MapFile proc _lpFileName
;
; invoke CreateFile,_lpFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
; .if eax!=-1
; mov hFile,eax
; invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
; .if eax
; mov hMapFile,eax
; invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
; .if eax
; mov lpMemory,eax
; ;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
; ;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
; invoke _CheckLink,lpMemory
; .else
; invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
; .endif
; .else
; invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
; .endif
; .else
; invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
; .endif
;
;ret
;_MapFile endp
;
;;对话框回调过程
_DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG ;对话框初始化
push hDlg
pop hMain
;invoke LoadIcon,hInstance,IDR_MAINFRAME
;invoke SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
invoke DragAcceptFiles,hDlg,TRUE ;为True时,hWnd所指向的窗体可以接受拖放的文件
;当窗口接受到文件后,会收到 WM_DROPFILES 消息。wParam中给出拖动文件结构的句柄。
.elseif uMsg==WM_DROPFILES ;*************************************************************
invoke DragQueryFile,wParam,0,addr szDragQueryFileName,sizeof szDragQueryFileName
;***************************************************************************************************
invoke CreateFile,addr szDragQueryFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax!=-1
mov hFile,eax
invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
.if eax
mov hMapFile,eax
invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
.if eax
mov lpMemory,eax
;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
invoke _CheckLink,lpMemory
.else
invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
.endif
.else
invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
.endif
.else
invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
.endif
;***************************************************************************************************
.elseif uMsg==WM_COMMAND
mov eax,wParam
.elseif uMsg==WM_CLOSE
; invoke UnmapViewOfFile,lpMemory
; invoke CloseHandle,hMapFile
; invoke CloseHandle,hFile
invoke EndDialog,hDlg,FALSE
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DlgProc endp
;;对话框回调过程
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr _DlgProc,NULL
invoke ExitProcess,NULL
end start
;去掉快捷方式里的查找目标等
;复习映射内存文件的几个API
;by 153785587
;原理:http://hi.baidu.com/kingcham/blog/item/253c132bed092824d52af145.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
;include gdi32.inc ;图形
includelib user32.lib
includelib kernel32.lib
;includelib gde32.lib
include shell32.inc
includelib shell32.lib
include macro.asm ;ctxt("")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IDD_DIALOG1 equ 100
;IDC_BUTTON1 equ 1000
IDC_EDIT1 equ 1001
;IDC_BUTTON2 equ 1002
IDC_STATIC equ 1003
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LinkCheck equ 0000004Ch
;LinkGuid equ
NoLink equ 00001091h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data?
hInstance dd ? ;模块句柄
hMain dd ? ;对话框句柄
hFile dd ?
hMapFile dd ?
lpMemory dd ?
szDragQueryFileName db MAX_PATH dup (?)
.const
.code
_CheckLink proc uses esi _lpLinkStart
mov esi,_lpLinkStart
.if DWORD ptr [esi]==LinkCheck
add esi,14h
mov DWORD ptr [esi],NoLink
invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szDragQueryFileName
.endif
invoke UnmapViewOfFile,lpMemory
invoke CloseHandle,hMapFile
invoke CloseHandle,hFile
ret
_CheckLink endp
;
;_MapFile proc _lpFileName
;
; invoke CreateFile,_lpFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
; .if eax!=-1
; mov hFile,eax
; invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
; .if eax
; mov hMapFile,eax
; invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
; .if eax
; mov lpMemory,eax
; ;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
; ;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
; invoke _CheckLink,lpMemory
; .else
; invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
; .endif
; .else
; invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
; .endif
; .else
; invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
; .endif
;
;ret
;_MapFile endp
;
;;对话框回调过程
_DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG ;对话框初始化
push hDlg
pop hMain
;invoke LoadIcon,hInstance,IDR_MAINFRAME
;invoke SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
invoke DragAcceptFiles,hDlg,TRUE ;为True时,hWnd所指向的窗体可以接受拖放的文件
;当窗口接受到文件后,会收到 WM_DROPFILES 消息。wParam中给出拖动文件结构的句柄。
.elseif uMsg==WM_DROPFILES ;*************************************************************
invoke DragQueryFile,wParam,0,addr szDragQueryFileName,sizeof szDragQueryFileName
;***************************************************************************************************
invoke CreateFile,addr szDragQueryFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax!=-1
mov hFile,eax
invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
.if eax
mov hMapFile,eax
invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
.if eax
mov lpMemory,eax
;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
invoke _CheckLink,lpMemory
.else
invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
.endif
.else
invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
.endif
.else
invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
.endif
;***************************************************************************************************
.elseif uMsg==WM_COMMAND
mov eax,wParam
.elseif uMsg==WM_CLOSE
; invoke UnmapViewOfFile,lpMemory
; invoke CloseHandle,hMapFile
; invoke CloseHandle,hFile
invoke EndDialog,hDlg,FALSE
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DlgProc endp
;;对话框回调过程
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr _DlgProc,NULL
invoke ExitProcess,NULL
end start

;************************************************
;指定进程不存在时重起系统
;by 153785587
;************************************************
.386
.model flat,stdcall
option casemap:none
;************************************************
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include advapi32.inc
includelib advapi32.lib ;提权
include psapi.inc
includelib psapi.lib;快照
include Shlwapi.inc
includelib shlwapi.lib ;PathFileExists
;************************************************
include macro.asm ;ctxt("")
;************************************************
.data
szPrivilegeName db 'SeDebugPrivilege',0 ;提升为这个权限
;szExplorer db 'explorer.exe',0
szMutex db 'QQ153785587',0 ;互斥名称
;szFmatTxt db '%d',0
szConfigFile db '\cfgfile.ini',0 ;配置文件
szSection db 'zerostudy',0 ;节名
szKeyName db '保护进程名称',0
szKeyValue db 'explorer.exe',0dh,0ah,';程序每一分钟检测上面的进程有没有运行,若没有则重启系统。BY 153785587',0
.data?
hInstance dd ? ;模块句柄
hSanp dd ? ;快照句柄
stSanp PROCESSENTRY32 <?> ;快照的结构
;hProcess dd ? ;进程句柄
hMutex dd ? ;互斥句柄
dwCheckProcess dd ? ;检测指定进程是否在运行
szBuffer db MAX_PATH dup (?)
szFileBuffer db MAX_PATH dup (?) ;ini文件名
szReturnBuffer db MAX_PATH dup (?) ;读取ini的值
;************************************************
.code
;************************************************
;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************
_CheckChongFu proc
invoke CreateMutex,NULL,FALSE,addr szMutex
.if eax ;CreateMutex返回NULL的话表示创建失败
mov hMutex,eax ;指向互斥句柄
invoke GetLastError ;若有一个程序在运行那么用GetLastError得到的值会是ERROR_ALREADY_EXISTS
.if eax==ERROR_ALREADY_EXISTS
; invoke MessageBox,NULL,CTXT("已有程序在运行!"),CTXT("Error"),0
invoke ReleaseMutex,hMutex
invoke ExitProcess,NULL
.endif
invoke ReleaseMutex,hMutex
; .else
; invoke MessageBox,NULL,CTXT("创建Muter失败!"),CTXT("Error"),0
.endif
ret
_CheckChongFu endp
;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************
;************************************************
;检查INI文件是否存在
;************************************************
_CheckPath proc
invoke GetCurrentDirectory,MAX_PATH,addr szFileBuffer
invoke lstrcat,addr szFileBuffer,addr szConfigFile ;当前目录下的ini文件的路径
invoke PathFileExists,addr szFileBuffer ;0表示不存在 1表示存在
.if eax!=1
invoke MessageBox,NULL,CTXT("INI文件不存在,是否创建?"),CTXT("ERROR"),MB_OKCANCEL
.if eax==IDOK
invoke WritePrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szFileBuffer
.if !eax
invoke MessageBox,NULL,CTXT("不能建立文件程序退出,是否有可写权限?"),CTXT("ERROR"),MB_OK
invoke ExitProcess,NULL
.endif
.else
invoke ExitProcess,NULL
.endif
.endif
invoke GetPrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szReturnBuffer,sizeof szReturnBuffer,addr szFileBuffer
ret
_CheckPath endp
;************************************************
;检查INI文件是否存在
;************************************************
;************************************************
;提升权限
;************************************************
_SeDebugPrivilege proc
local @stTkp:TOKEN_PRIVILEGES,@stLuid:LUID
local @hToKen;:DWORD
invoke GetCurrentProcess ;GetCurrentProcess得到得到的称之为"伪句柄"只是一个标识,你可以发现,其实就是返回$FFFFFFFF
;每个进程得句柄都是一样得,只是实用于进程内部得使用.
;如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化,
;调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭.
;其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭,
;不会造成内存泄漏.
mov ecx,eax ;直接用eax会出现register value overwritten by INVOKE
invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr @hToKen
;.if !eax ;返回0则表示出错
; invoke MessageBox,NULL,CTXT("获取访问令牌句柄失败!"),CTXT("出错"),0
; ret
;.endif
;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stLuid
;.if !eax
; invoke MessageBox,NULL,CTXT("获取当前进程权限失败!"),CTXT("出错"),0
; ret
;.endif
;这些函数用在NT以上的系统,也可以在之前判断本系统是否是NT以上的系统。
;第一个参数表示所要查看的系统,本地系统直接用NULL
;第二个参数表示所要查看的特权信息的名称,定义在winnt.h中
;第三个参数用来接收所返回的制定特权名称的信息。
mov @stTkp.PrivilegeCount,1
;***********************************************
;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
;用这个,下面这个push可以不要。因为直接已把特权信息放到@stTkp.Privileges[0].Luid中。
PUSH @stLuid.LowPart
POP @stTkp.Privileges[0].Luid.LowPart
PUSH @stLuid.HighPart
POP @stTkp.Privileges[0].Luid.HighPart
;***********************************************
MOV @stTkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
invoke AdjustTokenPrivileges,@hToKen,FALSE, addr @stTkp,sizeof TOKEN_PRIVILEGES,NULL,NULL
;.if !eax
; invoke MessageBox,NULL,CTXT("提升访问令牌权限失败!"),CTXT("出错"),0
; ret
;.endif
invoke CloseHandle,@hToKen
;invoke MessageBox,NULL,CTXT("权限已提升"),CTXT("OK"),0
ret
_SeDebugPrivilege endp
;************************************************
;提升权限
;************************************************
;************************************************
;进程列举
;************************************************
_ProcessList proc
mov dwCheckProcess,0 ;列举进程时选把它置0
mov stSanp.dwSize,sizeof stSanp ;使用结构之前,要先设置大小
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL ;得到当前的系统进程快照
mov hSanp,eax ;快照句柄传给hSanp Process32First
invoke Process32First,hSanp,addr stSanp ;首次从快照得到一个进程信息
.while eax
invoke CharUpper,addr stSanp.szExeFile ;把程序名转为大写
invoke lstrcmp,addr szReturnBuffer,addr stSanp.szExeFile ;lstrcmp 两字符串比较。区分大小写,相等则返回0
.if !eax ;相等
inc dwCheckProcess ;找到则加1
.endif
invoke Process32Next,hSanp,addr stSanp ;用Process32Next循环从快照取得进程信息,直到取完进程,然后返回flase 从而退出
.endw
invoke CloseHandle,hSanp ;关闭快照句柄
ret
_ProcessList endp
;************************************************
;进程列举
;************************************************
;************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
call _CheckChongFu ;防止重复运行
call _CheckPath ;检测ini文件
call _SeDebugPrivilege ;提权
mov dwCheckProcess,0 ;初始化
invoke CharUpper,addr szReturnBuffer
.while TRUE
invoke Sleep,60000 ;1分钟
call _ProcessList ;列举进程
.if dwCheckProcess==0 ;说明没找到指定的进程
invoke ExitWindows,EWX_REBOOT,0
invoke ExitProcess,NULL
.endif
.endw
invoke ExitProcess,NULL
end start
;************************************************
;指定进程不存在时重起系统
;by 153785587
;************************************************
.386
.model flat,stdcall
option casemap:none
;************************************************
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include advapi32.inc
includelib advapi32.lib ;提权
include psapi.inc
includelib psapi.lib;快照
include Shlwapi.inc
includelib shlwapi.lib ;PathFileExists
;************************************************
include macro.asm ;ctxt("")
;************************************************
.data
szPrivilegeName db 'SeDebugPrivilege',0 ;提升为这个权限
;szExplorer db 'explorer.exe',0
szMutex db 'QQ153785587',0 ;互斥名称
;szFmatTxt db '%d',0
szConfigFile db '\cfgfile.ini',0 ;配置文件
szSection db 'zerostudy',0 ;节名
szKeyName db '保护进程名称',0
szKeyValue db 'explorer.exe',0dh,0ah,';程序每一分钟检测上面的进程有没有运行,若没有则重启系统。BY 153785587',0
.data?
hInstance dd ? ;模块句柄
hSanp dd ? ;快照句柄
stSanp PROCESSENTRY32 <?> ;快照的结构
;hProcess dd ? ;进程句柄
hMutex dd ? ;互斥句柄
dwCheckProcess dd ? ;检测指定进程是否在运行
szBuffer db MAX_PATH dup (?)
szFileBuffer db MAX_PATH dup (?) ;ini文件名
szReturnBuffer db MAX_PATH dup (?) ;读取ini的值
;************************************************
.code
;************************************************
;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************
_CheckChongFu proc
invoke CreateMutex,NULL,FALSE,addr szMutex
.if eax ;CreateMutex返回NULL的话表示创建失败
mov hMutex,eax ;指向互斥句柄
invoke GetLastError ;若有一个程序在运行那么用GetLastError得到的值会是ERROR_ALREADY_EXISTS
.if eax==ERROR_ALREADY_EXISTS
; invoke MessageBox,NULL,CTXT("已有程序在运行!"),CTXT("Error"),0
invoke ReleaseMutex,hMutex
invoke ExitProcess,NULL
.endif
invoke ReleaseMutex,hMutex
; .else
; invoke MessageBox,NULL,CTXT("创建Muter失败!"),CTXT("Error"),0
.endif
ret
_CheckChongFu endp
;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************
;************************************************
;检查INI文件是否存在
;************************************************
_CheckPath proc
invoke GetCurrentDirectory,MAX_PATH,addr szFileBuffer
invoke lstrcat,addr szFileBuffer,addr szConfigFile ;当前目录下的ini文件的路径
invoke PathFileExists,addr szFileBuffer ;0表示不存在 1表示存在
.if eax!=1
invoke MessageBox,NULL,CTXT("INI文件不存在,是否创建?"),CTXT("ERROR"),MB_OKCANCEL
.if eax==IDOK
invoke WritePrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szFileBuffer
.if !eax
invoke MessageBox,NULL,CTXT("不能建立文件程序退出,是否有可写权限?"),CTXT("ERROR"),MB_OK
invoke ExitProcess,NULL
.endif
.else
invoke ExitProcess,NULL
.endif
.endif
invoke GetPrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szReturnBuffer,sizeof szReturnBuffer,addr szFileBuffer
ret
_CheckPath endp
;************************************************
;检查INI文件是否存在
;************************************************
;************************************************
;提升权限
;************************************************
_SeDebugPrivilege proc
local @stTkp:TOKEN_PRIVILEGES,@stLuid:LUID
local @hToKen;:DWORD
invoke GetCurrentProcess ;GetCurrentProcess得到得到的称之为"伪句柄"只是一个标识,你可以发现,其实就是返回$FFFFFFFF
;每个进程得句柄都是一样得,只是实用于进程内部得使用.
;如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化,
;调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭.
;其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭,
;不会造成内存泄漏.
mov ecx,eax ;直接用eax会出现register value overwritten by INVOKE
invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr @hToKen
;.if !eax ;返回0则表示出错
; invoke MessageBox,NULL,CTXT("获取访问令牌句柄失败!"),CTXT("出错"),0
; ret
;.endif
;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stLuid
;.if !eax
; invoke MessageBox,NULL,CTXT("获取当前进程权限失败!"),CTXT("出错"),0
; ret
;.endif
;这些函数用在NT以上的系统,也可以在之前判断本系统是否是NT以上的系统。
;第一个参数表示所要查看的系统,本地系统直接用NULL
;第二个参数表示所要查看的特权信息的名称,定义在winnt.h中
;第三个参数用来接收所返回的制定特权名称的信息。
mov @stTkp.PrivilegeCount,1
;***********************************************
;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
;用这个,下面这个push可以不要。因为直接已把特权信息放到@stTkp.Privileges[0].Luid中。
PUSH @stLuid.LowPart
POP @stTkp.Privileges[0].Luid.LowPart
PUSH @stLuid.HighPart
POP @stTkp.Privileges[0].Luid.HighPart
;***********************************************
MOV @stTkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
invoke AdjustTokenPrivileges,@hToKen,FALSE, addr @stTkp,sizeof TOKEN_PRIVILEGES,NULL,NULL
;.if !eax
; invoke MessageBox,NULL,CTXT("提升访问令牌权限失败!"),CTXT("出错"),0
; ret
;.endif
invoke CloseHandle,@hToKen
;invoke MessageBox,NULL,CTXT("权限已提升"),CTXT("OK"),0
ret
_SeDebugPrivilege endp
;************************************************
;提升权限
;************************************************
;************************************************
;进程列举
;************************************************
_ProcessList proc
mov dwCheckProcess,0 ;列举进程时选把它置0
mov stSanp.dwSize,sizeof stSanp ;使用结构之前,要先设置大小
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL ;得到当前的系统进程快照
mov hSanp,eax ;快照句柄传给hSanp Process32First
invoke Process32First,hSanp,addr stSanp ;首次从快照得到一个进程信息
.while eax
invoke CharUpper,addr stSanp.szExeFile ;把程序名转为大写
invoke lstrcmp,addr szReturnBuffer,addr stSanp.szExeFile ;lstrcmp 两字符串比较。区分大小写,相等则返回0
.if !eax ;相等
inc dwCheckProcess ;找到则加1
.endif
invoke Process32Next,hSanp,addr stSanp ;用Process32Next循环从快照取得进程信息,直到取完进程,然后返回flase 从而退出
.endw
invoke CloseHandle,hSanp ;关闭快照句柄
ret
_ProcessList endp
;************************************************
;进程列举
;************************************************
;************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
call _CheckChongFu ;防止重复运行
call _CheckPath ;检测ini文件
call _SeDebugPrivilege ;提权
mov dwCheckProcess,0 ;初始化
invoke CharUpper,addr szReturnBuffer
.while TRUE
invoke Sleep,60000 ;1分钟
call _ProcessList ;列举进程
.if dwCheckProcess==0 ;说明没找到指定的进程
invoke ExitWindows,EWX_REBOOT,0
invoke ExitProcess,NULL
.endif
.endw
invoke ExitProcess,NULL
end start
;************************************************