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

📄 _proc.asm

📁 linux ip fiter source
💻 ASM
字号:
_MoveRule		proc	_Direct
;	移动规则,1为下移,0为上移

		xor	edx,edx
		mov	ecx,sizeof st_packet
		mov	eax,dwRow
		mul	ecx
		lea	edi,offset szBuffer
		add	edi,eax						;	到这里 edi 已经指向对应的规则
		mov	esi,edi
		.if		_Direct == 0
			.if	dwRow > 0
				sub	edi,sizeof st_packet	;	上移
			.else
				invoke	MessageBox,hDlgEdit,offset szErrDirect,offset szErr,MB_OK or MB_ICONSTOP
				ret
			.endif
		.else
			.if	dwRow < (sizeof szBuffer/sizeof st_packet -1)
				add	edi,sizeof st_packet	;	上移
			.else
				invoke	MessageBox,hDlgEdit,offset szErrDirect,offset szErr,MB_OK or MB_ICONSTOP
				ret
			.endif
		.endif
		invoke	RtlMoveMemory,offset szFileName,edi,sizeof st_packet	;	备份
		invoke	RtlMoveMemory,edi,esi,sizeof st_packet
		invoke	RtlMoveMemory,esi,offset szFileName,sizeof st_packet	;	备份

;	关闭对话框,刷新列表
		invoke	EndDialog,hDlgEdit,NULL
		invoke	_ListRule

		ret
_MoveRule		endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_SavedRow		proc	;	保存数据到内存中
;	int 3
		xor	edx,edx
		mov	ecx,sizeof st_packet
		mov	eax,dwRow
		mul	ecx
		lea	edi,offset szBuffer	
		add	edi,eax						;	到这里 edi 已经指向对应的规则
	;	检查来源 IP 地址
		invoke	GetDlgItemText,hDlgEdit,1000,offset szFileName,sizeof szFileName
		invoke	inet_addr,offset szFileName
		.if	eax == INADDR_NONE
			invoke	MessageBox,hDlgEdit,offset szErrIp,offset szErr,MB_OK or MB_ICONSTOP
			mov	eax,-1
			ret
		.endif
	;	检查保存目的 IP 地址
		invoke	GetDlgItemText,hDlgEdit,1001,offset szFileName,sizeof szFileName
		invoke	inet_addr,offset szFileName
		.if	eax == INADDR_NONE
			invoke	MessageBox,hDlgEdit,offset szErrIp,offset szErr,MB_OK or MB_ICONSTOP
			mov	eax,-1
			ret
		.else
			mov	(st_packet ptr [edi]).ip_dest,eax
		.endif
	;	保存来源 IP 地址
		invoke	GetDlgItemText,hDlgEdit,1000,offset szFileName,sizeof szFileName
		invoke	inet_addr,offset szFileName
		.if	eax != INADDR_NONE
			mov	(st_packet ptr [edi]).ip_src,eax
		.endif

	;	保存来源端口
		invoke	GetDlgItemInt,hDlgEdit,1002,offset szFileName,0			;	设置  源端口
		xchg	ah,al
		mov	(st_packet ptr [edi]).src_port,ax
	;	保存目的端口
		invoke	GetDlgItemInt,hDlgEdit,1003,offset szFileName,0			;	设置目的端口
		xchg	ah,al
		mov	(st_packet ptr [edi]).dest_port,ax

	;	保存协议信息
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_GETCURSEL,0,0		;	读取协议
		.if		eax == 0	;	选择的是 TCP
			mov	eax,IPPROTO_TCP
		.elseif	eax == 1
			mov	eax,IPPROTO_UDP
		.elseif	eax == 2
			mov	eax,IPPROTO_ICMP
		.elseif	eax == 3
			mov	eax,0
		.endif
		mov	(st_packet ptr [edi]).ip_protocol,al
	;	保存数据包方向
		invoke	SendDlgItemMessage,hDlgEdit,1005,CB_GETCURSEL,0,0		;	数据包方向
		.if		eax == 0	;	选择的是 接收
			mov	eax,1
		.elseif	eax == 1
			mov	eax,2
		.elseif	eax == 2
			mov	eax,0		
		.endif
		mov	(st_packet ptr [edi]).ip_direction,al

	;	保存处理办法
		invoke	SendDlgItemMessage,hDlgEdit,1006,CB_GETCURSEL,0,0		;	保存处理办法
		.if		eax == 0	;	选择的是 拦截
			mov	eax,1
		.elseif	eax == 1	;	选择的是 通过
			mov	eax,0
		.endif
		mov	(st_packet ptr [edi]).ip_operation,al

		invoke	EndDialog,hDlgEdit,NULL
		invoke	_ListRule
		ret
_SavedRow		endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_LoadRow		proc	;	加载数据到窗体中
;	int 3
		.if		dwRow == 0
			invoke	GetDlgItem,hDlgEdit,1007
			invoke	EnableWindow,eax,FALSE
		.elseif	dwRow == (sizeof szBuffer/sizeof st_packet -1)
			invoke	GetDlgItem,hDlgEdit,1009
			invoke	EnableWindow,eax,FALSE
		.endif

		xor	edx,edx
		mov	ecx,sizeof st_packet
		mov	eax,dwRow
		mul	ecx
		lea	edi,offset szBuffer
		add	edi,eax						;	到这里 edi 已经指向对应的规则
		invoke	inet_ntoa,(st_packet ptr [edi]).ip_src		;	设置来源 IP
		invoke	SetDlgItemText,hDlgEdit,1000,eax
		invoke	inet_ntoa,(st_packet ptr [edi]).ip_dest		;	设置目的 IP
		invoke	SetDlgItemText,hDlgEdit,1001,eax
		movzx	eax,(st_packet ptr [edi]).src_port
		xchg	ah,al
		invoke	SetDlgItemInt,hDlgEdit,1002,eax,0			;	设置  源端口
		movzx	eax,(st_packet ptr [edi]).dest_port
		xchg	ah,al
		invoke	SetDlgItemInt,hDlgEdit,1003,eax,0			;	设置目的端口
	;	初使化协议组合框
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_ADDSTRING,0,addr szTCP
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_ADDSTRING,0,addr szUDP
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_ADDSTRING,0,addr szICMP
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_ADDSTRING,0,addr szAny
		movzx	eax,(st_packet ptr [edi]).ip_protocol
		.if		eax == IPPROTO_TCP
			mov	ecx,0
		.elseif	eax == IPPROTO_UDP
			mov	ecx,1
		.elseif	eax == IPPROTO_ICMP || eax == IPPROTO_IGMP
			mov	ecx,2
		.else
			mov	ecx,3
		.endif
		invoke	SendDlgItemMessage,hDlgEdit,1004,CB_SETCURSEL,ecx,0
	;	初使化方向组合框
		invoke	SendDlgItemMessage,hDlgEdit,1005,CB_ADDSTRING,0,addr szIn
		invoke	SendDlgItemMessage,hDlgEdit,1005,CB_ADDSTRING,0,addr szOut
		invoke	SendDlgItemMessage,hDlgEdit,1005,CB_ADDSTRING,0,addr szAny
		movzx	eax,(st_packet ptr [edi]).ip_direction
		.if		eax == 1
			mov	ecx,0
		.elseif	eax == 2
			mov	ecx,1
		.else
			mov	ecx,2
		.endif
		invoke	SendDlgItemMessage,hDlgEdit,1005,CB_SETCURSEL,ecx,0
	;	初使化操作组合框
		invoke	SendDlgItemMessage,hDlgEdit,1006,CB_ADDSTRING,0,addr szDrop
		invoke	SendDlgItemMessage,hDlgEdit,1006,CB_ADDSTRING,0,addr szPass
		movzx	eax,(st_packet ptr [edi]).ip_operation
		.if		eax == 1
			mov	ecx,0
		.else
			mov	ecx,1
		.endif
		invoke	SendDlgItemMessage,hDlgEdit,1006,CB_SETCURSEL,ecx,0

		ret
_LoadRow		endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgEdit	proc	uses ebx edi esi hWnd,wMsg,wParam,lParam

		mov	eax,wMsg
		.if	eax == WM_CLOSE
			mov		hDlgEdit,0
			invoke	EndDialog,hWnd,NULL
		.elseif	eax == WM_INITDIALOG
			push	hWnd
			pop		hDlgEdit
			invoke	LoadIcon,hInstance,ICO_MAIN
			invoke	SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
			invoke	_LoadRow
		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			.if	eax == 1007			;	"上移 ↑" 按钮
				invoke	_MoveRule,0
			.elseif	eax == 1008		;	"保  存 " 按钮
				invoke	_SavedRow
			.elseif	eax == 1009		;	"下移 ↓" 按钮
				invoke	_MoveRule,1
			.endif
		.else
			mov	eax,FALSE
			ret
		.endif
		mov	eax,TRUE
		ret

_ProcDlgEdit	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain	proc	uses ebx edi esi hWnd,wMsg,wParam,lParam

		mov	eax,wMsg
		.if	eax == WM_CLOSE
			invoke	EndDialog,hWnd,NULL
		.elseif	eax == WM_INITDIALOG
			push	hWnd
			pop		hDlgWnd
			invoke	LoadIcon,hInstance,ICO_MAIN
			invoke	SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
;int 3
			invoke	GetCommandLine
			mov		edi,eax
			invoke	lstrlen,edi
			add		edi,eax
			sub		edi,4
			mov		eax,[edi]
			.if		eax == "tes/" || eax == "TES/"	;	/set
				invoke	_Install
			.endif

		;	初使化列表框控件
			invoke	InitList
			invoke	_ReadFile
			invoke	_ListRule
		.elseif eax==WM_NOTIFY
		    push edi
		    mov edi,lParam
		    assume edi:ptr NMHDR
		    mov eax,[edi].hwndFrom
		    .if eax==hList
				.if [edi].code==NM_DBLCLK
				;	在这里处理列表框的双击动作	先取得选中列
					invoke SendMessage,hList,LVM_GETNEXTITEM,-1, LVNI_FOCUSED
					mov		dwRow,eax
					invoke	DialogBoxParam,hInstance,DLG_EDIT,hWnd,offset _ProcDlgEdit,NULL
				.endif
			.endif
			pop	edi
		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			.if	eax == 100			;	"读取文件"按钮
				invoke	_ReadFile
				invoke	_ListRule
			.elseif	eax == 101		;	"保存文件"按钮
				invoke	_WriteFile
			.elseif	eax == 102		;	"读取内存"按钮
				invoke	_ReadBuffer
				invoke	_ListRule
			.elseif	eax == 103		;	"保存内存"按钮
				invoke	_WriteBuffer
			.elseif	eax == 104
				invoke	_InstallDrv	;	"启动/安装"按钮
			.elseif	eax == 105
				invoke	_StopDrv,1	;	"卸载驱动"按钮
			.elseif	eax == 106
				invoke	_InstallDrv	;	"启动/安装"按钮
			.elseif	eax == 107
				invoke	_StopDrv,0	;	"停止驱动"按钮

			.endif
		.else
			mov	eax,FALSE
			ret
		.endif
		mov	eax,TRUE
		ret

_ProcDlgMain	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

⌨️ 快捷键说明

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