⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 akcontrol.asm

📁 服务防杀代码,服务防杀代码,服务防杀代码,服务防杀代码,服务防杀代码
💻 ASM
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 服务程序控制端
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.386
		.model flat, stdcall
		option casemap :none

include		/masm32/include/windows.inc
include		/masm32/include/user32.inc
includelib	/masm32/lib/user32.lib
include		/masm32/include/kernel32.inc
includelib	/masm32/lib/kernel32.lib
include		/masm32/include/AdvApi32.inc
includelib	/masm32/lib/AdvApi32.lib

ICO_MAIN	equ	1000
DLG_MAIN	equ	1000
IDC_INSTALL	equ 	1001
IDC_DELETE	equ 	1002
IDC_START	equ 	1003
IDC_STOP	equ 	1004
IDC_INFO	equ	1005
IDC_FILE	equ	1006
IDC_INFO_INSTALL equ	1007
IDC_INFO_STATUS	equ	1008
IDC_REFRESH	equ	1009

		.data?
hWinMain	dd	?
hInstance	dd	?
hSCM		dd	?
szServiceFile	db	MAX_PATH dup (?)	;全路径的服务 exe 文件名

		.const
szInstalled	db	'已安装',0
szNotInstalled	db	'未安装',0
szStarted	db	'已启动',0
szStoped	db	'已停止',0
szOther		db	'其他状态',0
;********************************************************************
ERR_CREATE_OK	equ	000000001h	;创建服务成功
ERR_CREATE	equ	0c0000001h	;无法创建服务
ERR_CREATE_DUP	equ	0c0000002h	;存在重名服务
ERR_DELETE_OK	equ	000000003h	;删除服务成功
ERR_DELETE	equ	0c0000003h	;无法删除服务
ERR_START_OK	equ	000000004h	;启动成功
ERR_START	equ	0c0000004h	;启动失败
ERR_STOP_OK	equ	000000005h	;停止成功
ERR_STOP	equ	0c0000005h	;停止失败
ERR_CONNECT	equ	0c0000006h	;无法和服务相连接
;********************************************************************
szErrCreateOK	db	'创建服务成功!',0
szErrCreate	db	'无法创建服务!',0
szErrCreateDup	db	'重名服务已经存在!',0
szErrDeleteOK	db	'删除服务成功!',0
szErrDelete	db	'无法删除服务!',0
szErrStartOK	db	'启动服务成功!',0
szErrStart	db	'启动服务失败!',0
szErrStopOK	db	'停止服务成功!',0
szErrStop	db	'停止服务失败!',0

szErrSCM	db	'无法和服务管理器连接!',0
szErrConnect	db	'无法找到服务!',0

szErrUnknown	db	'未知错误!',0

include		<Define.inc>


		.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 显示错误信息
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowInfo	proc	_dwErrCode

		mov	eax,_dwErrCode
		.if	! eax
			mov	eax,NULL
		.elseif	eax ==	ERR_CREATE
			mov	eax,offset szErrCreate
		.elseif	eax ==	ERR_CREATE_DUP
			mov	eax,offset szErrCreateDup
		.elseif	eax ==	ERR_CREATE_OK
			mov	eax,offset szErrCreateOK
		.elseif	eax ==	ERR_DELETE
			mov	eax,offset szErrDelete
		.elseif	eax ==	ERR_DELETE_OK
			mov	eax,offset szErrDeleteOK
		.elseif	eax ==	ERR_START_OK
			mov	eax,offset szErrStartOK
		.elseif	eax ==	ERR_START
			mov	eax,offset szErrStart
		.elseif	eax ==	ERR_STOP_OK
			mov	eax,offset szErrStopOK
		.elseif	eax ==	ERR_STOP
			mov	eax,offset szErrStop
		.elseif	eax ==	ERR_CONNECT
			mov	eax,offset szErrConnect
		.else
			mov	eax,offset szErrUnknown
		.endif
		invoke	SetDlgItemText,hWinMain,IDC_INFO,eax
		ret

_ShowInfo	endp


_ShowStatus	proc	_ErrCode
		local	@hService
		local	@stStatus:SERVICE_STATUS
		local	@lpInstall,@lpStatus
		local	@dwStatIns,@dwStatDel,@dwStatStart,@dwStatStop

		invoke	_ShowInfo,_ErrCode
		invoke	Sleep,500
;********************************************************************
; 打开服务
;********************************************************************
		invoke	OpenService,hSCM,addr szServiceName,SERVICE_ALL_ACCESS
		.if	eax
			mov	@hService,eax
			mov	@lpInstall,offset szInstalled
			mov	@dwStatIns,FALSE
			mov	@dwStatDel,TRUE
;********************************************************************
; 获取状态
;********************************************************************
			invoke	QueryServiceStatus,@hService,addr @stStatus
			mov	eax,@stStatus.dwCurrentState
			.if	eax ==	SERVICE_RUNNING
				mov	@lpStatus,offset szStarted
				mov	@dwStatStart,FALSE
				mov	@dwStatStop,TRUE
			.elseif	eax ==	SERVICE_STOPPED
				mov	@lpStatus,offset szStoped
				mov	@dwStatStart,TRUE
				mov	@dwStatStop,FALSE
			.else
				mov	@lpStatus,offset szOther
				mov	@dwStatStart,FALSE
				mov	@dwStatStop,FALSE
			.endif
			invoke	CloseServiceHandle,@hService
		.else
			invoke	GetLastError
			.if	eax ==	ERROR_ACCESS_DENIED
				mov	@lpInstall,offset szInstalled
				mov	@dwStatIns,FALSE
				mov	@dwStatDel,TRUE
			.else
				mov	@lpInstall,offset szNotInstalled
				mov	@dwStatIns,TRUE
				mov	@dwStatDel,FALSE
			.endif
			mov	@dwStatStart,FALSE
			mov	@dwStatStop,FALSE
			mov	@lpStatus,offset szStoped
		.endif
;********************************************************************
; 显示状态
;********************************************************************
		invoke	SetDlgItemText,hWinMain,IDC_INFO_INSTALL,@lpInstall
		invoke	SetDlgItemText,hWinMain,IDC_INFO_STATUS,@lpStatus
		invoke	GetDlgItem,hWinMain,IDC_INSTALL
		invoke	EnableWindow,eax,@dwStatIns
		invoke	GetDlgItem,hWinMain,IDC_DELETE
		invoke	EnableWindow,eax,@dwStatDel
		invoke	GetDlgItem,hWinMain,IDC_START
		invoke	EnableWindow,eax,@dwStatStart
		invoke	GetDlgItem,hWinMain,IDC_STOP
		invoke	EnableWindow,eax,@dwStatStop

		ret
_ShowStatus	endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 取当前服务的可执行文件名
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_GetServiceFile	proc
		local	@szModule[MAX_PATH]:byte,@dwPtrFileName

		invoke	GetModuleFileName,NULL,addr @szModule,MAX_PATH
		invoke	GetFullPathName,addr @szModule,MAX_PATH,\
			addr szServiceFile,addr @dwPtrFileName
		mov	eax,@dwPtrFileName
		mov	byte ptr [eax],0
		invoke	lstrcat,addr szServiceFile,addr szServiceEXE
		ret

_GetServiceFile	endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 安装服务
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_InstallService	proc
		local	@hService,@dwReturn

		mov	@dwReturn,0
;********************************************************************
; 创建服务
;********************************************************************
		invoke	CreateService,hSCM,addr szServiceName,addr szDisplayName,\
			SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,\
			SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,addr szServiceFile,\
			NULL,NULL,NULL,NULL,NULL
		.if	! eax
			invoke	GetLastError
			.if	eax ==	ERROR_DUP_NAME || eax == ERROR_SERVICE_EXISTS
				mov	@dwReturn,ERR_CREATE_DUP
			.else
				mov	@dwReturn,ERR_CREATE
			.endif
			jmp	@F
		.endif
		mov	@hService,eax
		mov	@dwReturn,ERR_CREATE_OK
		invoke	CloseServiceHandle,@hService
@@:
		mov	eax,@dwReturn
		ret

_InstallService	endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 删除服务
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DeleteService	proc
		local	@hService,@dwReturn
		local	@stStatus:SERVICE_STATUS

		mov	@dwReturn,0
;********************************************************************
; 打开服务
;********************************************************************
		invoke	OpenService,hSCM,addr szServiceName,SERVICE_ALL_ACCESS
		.if	! eax
			mov	@dwReturn,ERR_CONNECT
			jmp	@F
		.endif
		mov	@hService,eax
;********************************************************************
; 停止服务并删除服务
;********************************************************************
		call	_StopService
		invoke	DeleteService,@hService
		.if	eax
			mov	@dwReturn,ERR_DELETE_OK
		.else
			mov	@dwReturn,ERR_DELETE
		.endif
		invoke	CloseServiceHandle,@hService
@@:
		mov	eax,@dwReturn
		ret

_DeleteService	endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 启动服务
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_StartService	proc
		local	@hService

		invoke	OpenService,hSCM,addr szServiceName,SERVICE_START
		.if	eax
			mov	@hService,eax
			invoke	StartService,@hService,0,NULL
			.if	eax
				mov	eax,ERR_START_OK
			.else
				mov	eax,ERR_START
			.endif
			push	eax
			invoke	CloseServiceHandle,@hService
			pop	eax
		.else
			mov	eax,ERR_CONNECT
		.endif
		ret

_StartService	endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 停止服务
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_StopService	proc
		local	@hService
		local	@stStatus:SERVICE_STATUS

		invoke	OpenService,hSCM,addr szServiceName,SERVICE_ALL_ACCESS
		.if	eax
			mov	@hService,eax
			invoke	QueryServiceStatus,@hService,addr @stStatus
			invoke	ControlService,@hService,SERVICE_CONTROL_STOP,addr @stStatus
			.if	eax
				mov	eax,ERR_STOP_OK
			.else
				mov	eax,ERR_STOP
			.endif
			push	eax
			invoke	CloseServiceHandle,@hService
			pop	eax
		.else
			mov	eax,ERR_CONNECT
		.endif
		ret

_StopService	endp


_Init		proc

		invoke	LoadIcon,hInstance,ICO_MAIN
		invoke	SendMessage,hWinMain,WM_SETICON,ICON_BIG,eax
		invoke	_GetServiceFile
		invoke	SetDlgItemText,hWinMain,IDC_FILE,addr szServiceFile
;********************************************************************
; 连接服务管理器
;********************************************************************
		invoke	OpenSCManager,NULL,NULL,SC_MANAGER_ALL_ACCESS
		.if	! eax
			invoke	MessageBox,hWinMain,addr szErrSCM,NULL,MB_OK
			invoke	EndDialog,hWinMain,NULL
			ret
		.endif
		mov	hSCM,eax
		invoke	_ShowStatus,NULL
		ret

_Init		endp


_Quit		proc

		invoke	CloseServiceHandle,hSCM
		invoke	EndDialog,hWinMain,NULL
		ret

_Quit		endp


_ProcDlgMain	proc	uses ebx edi esi hWnd,wMsg,wParam,lParam

		mov	eax,wMsg
		.if	eax ==	WM_CLOSE
			call	_Quit
		.elseif	eax ==	WM_INITDIALOG
			push	hWnd
			pop	hWinMain
			call	_Init
		.elseif	eax ==	WM_COMMAND
			mov	eax,wParam
			.if	ax ==	IDC_INSTALL
				invoke	_InstallService
				invoke	_ShowStatus,eax
			.elseif	ax ==	IDC_DELETE
				invoke	_DeleteService
				invoke	_ShowStatus,eax
			.elseif	ax ==	IDC_START
				invoke	_StartService
				invoke	_ShowStatus,eax
			.elseif	ax ==	IDC_STOP
				invoke	_StopService
				invoke	_ShowStatus,eax
			.elseif	ax ==	IDC_REFRESH
				invoke	_ShowStatus,NULL
			.endif
		.else
			mov	eax,FALSE
			ret
		.endif
		mov	eax,TRUE
		ret
_ProcDlgMain	endp

start:
		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
		invoke	ExitProcess,NULL
		end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -