📄 _proc.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 + -