Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;######################## icmpchat.inc ########################
- include windows.inc
- include kernel32.inc
- include user32.inc
- include Comctl32.inc
- include shell32.inc
- include ws2_32.inc
- include wsock32.inc
- includelib kernel32.lib
- includelib user32.lib
- includelib Comctl32.lib
- includelib shell32.lib
- includelib ws2_32.lib
- DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
- sendmsg PROTO
- init_ws PROTO
- icmpchecksum PROTO :DWORD,:DWORD
- recvmsg PROTO :DWORD
- .const
- IDD_MAIN EQU 101
- IDC_ENT_TEXT EQU 102
- IDC_CHAT EQU 103
- IDC_IPADDRESS EQU 104
- WM_FINISH EQU WM_USER+100h
- WSVERSION EQU 202h
- PORT_ADDR EQU 0h
- SIO_RCVALL EQU 98000001h
- icmp STRUC
- typ db ?
- cod db ?
- chksum dw ?
- ident dw ?
- seq dw ?
- dat db 400h dup (?)
- icmp ends
- ;#########################################################################
- .data
- msglong db "Message is long!",0
- optval dd 10000h
- pusto db " ",0
- .data?
- addr_ip db 10h dup (?)
- compname db 80h dup (?)
- textstr db 400h dup(?)
- buf db 400h dup (?)
- hInstance dd ?
- ws WSADATA <>
- saddr sockaddr_in <>
- inaddr sockaddr_in <>
- lsaddr dd ?
- sock dd ?
- packet icmp <>
- sflag dd ?
- rflag dd ?
- pThread dd ?
- ;#########################################################################
- ;######################## icmpchat.rc ########################
- #define IDD_MAIN 101
- #define IDC_ENT_TEXT 102
- #define IDC_CHAT 103
- #define IDC_IPADDRESS 104
- #define IDC_STC1 105
- IDD_MAIN DIALOGEX 6,6,195,126
- CAPTION "ICMP Chat"
- FONT 8,"Tahoma",0,0,0
- STYLE 0x10CF0800
- BEGIN
- CONTROL "Send",1,"Button",0x50010000,144,108,48,13
- CONTROL "Exit",2,"Button",0x50010000,6,108,48,13
- CONTROL "",IDC_ENT_TEXT,"Edit",0x50010000,9,87,174,12,0x00000200
- CONTROL "",IDC_CHAT,"Edit",0x58010000,9,24,174,57,0x00000200
- CONTROL "",IDC_IPADDRESS,"SysIPAddress32",0x50010000,78,6,105,12
- CONTROL "IP Address:",IDC_STC1,"Static",0x50000000,24,9,45,9
- END
- ;######################## icmpchat.asm ########################
- .386
- .model flat, stdcall ;32 bit memory model
- option casemap :none ;case sensitive
- include icmpchat.inc
- .code
- start:
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- invoke InitCommonControls
- invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL
- invoke ExitProcess,0
- ;########################################################################
- DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
- mov eax,uMsg
- .if eax==WM_INITDIALOG
- ;initialization here
- invoke init_ws
- .elseif eax==WM_COMMAND
- mov edx,wParam
- movzx eax,dx
- shr edx,16
- .if edx==BN_CLICKED
- .if eax==IDOK
- invoke GetDlgItemText,hWin, IDC_IPADDRESS, offset addr_ip, 10h
- invoke GetDlgItemText,hWin, IDC_ENT_TEXT, offset textstr, 400h
- .if eax < 400h
- invoke sendmsg
- invoke SetDlgItemText, hWin, IDC_ENT_TEXT, offset pusto
- .if rflag == 0
- mov eax, offset recvmsg
- invoke CreateThread, NULL, 10240, eax, hWin, NULL, pThread
- ; invoke recvmsg, hWin
- .endif
- .else
- invoke MessageBox, hWin, offset msglong, sizeof msglong, MB_OK
- .endif
- .elseif eax==IDCANCEL
- invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
- .endif
- .endif
- .elseif eax==WM_FINISH
- lea eax, DWORD PTR [buf+1ch]
- invoke SetDlgItemText, hWin, IDC_CHAT, eax
- ; invoke MessageBox,NULL,ADDR icmpa,ADDR icmpa,MB_OK
- .elseif eax==WM_CLOSE
- invoke EndDialog,hWin,0
- invoke closesocket,sock
- invoke WSACleanup
- .else
- mov eax,FALSE
- ret
- .endif
- mov eax,TRUE
- ret
- DlgProc endp
- init_ws proc
- invoke gethostname, offset compname, sizeof compname
- invoke WSAStartup, WSVERSION, offset ws
- invoke socket, AF_INET, SOCK_RAW, IPPROTO_ICMP
- mov sock, eax
- ret
- init_ws endp
- sendmsg proc
- invoke inet_addr, offset addr_ip
- mov saddr.sin_addr,eax
- invoke htons, PORT_ADDR
- mov saddr.sin_port,ax
- mov saddr.sin_family,AF_INET
- invoke setsockopt, sock, SOL_SOCKET, SO_RCVTIMEO, optval, sizeof optval
- mov packet.typ, 8h
- mov packet.chksum, 0h
- mov packet.ident, 6863h
- invoke lstrcpy, offset packet.dat, offset textstr
- invoke icmpchecksum, offset packet, sizeof packet
- mov packet.chksum, ax
- invoke sendto, sock, offset packet, sizeof packet, 0, offset saddr, sizeof saddr
- ret
- sendmsg endp
- recvmsg proc hWin:DWORD
- LOCAL sock2:DWORD
- mov rflag, 1
- invoke socket, AF_INET, SOCK_RAW, IPPROTO_ICMP
- mov sock2, eax
- invoke gethostbyname, offset compname
- mov eax, DWORD PTR [eax+1Ch]
- mov inaddr.sin_addr,eax
- mov inaddr.sin_family,AF_INET
- invoke bind, sock2, offset inaddr, sizeof inaddr
- mov lsaddr, sizeof inaddr
- mov sflag, TRUE
- invoke ioctlsocket, sock2, SIO_RCVALL,offset sflag
- nextpacket:
- invoke recvfrom,sock2, offset buf, sizeof buf, 0, ADDR inaddr, ADDR lsaddr
- mov eax, DWORD PTR [buf+0Ch] ; source address
- .if saddr.sin_addr != eax
- jmp fchk
- .endif
- mov al, BYTE PTR [buf+14h] ; protocol type
- .if al != 8h
- jmp fchk
- .endif
- mov ax, WORD PTR [buf+18h] ; ident
- .if ax != 6863h
- jmp fchk
- .endif
- lea eax, DWORD PTR [buf+1ch] ; text
- invoke PostMessage, hWin, WM_FINISH,NULL, NULL
- fchk:
- jmp nextpacket
- ret
- recvmsg endp
- icmpchecksum proc icmppacket:DWORD, psize:DWORD
- mov edi, icmppacket
- mov ax, WORD PTR [edi]
- xchg al, ah
- mov ecx, 2h
- nextword:
- mov bx, WORD PTR [edi+ecx]
- xchg bl, bh
- add ax, bx
- jnc noverflow
- inc ax
- noverflow:
- add ecx, 2h
- .if ecx >= psize
- jmp endchk
- .endif
- jmp nextword
- endchk:
- not ax
- xchg al, ah
- ret
- icmpchecksum endp
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement