1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
| .386
.model flat, stdcall
include Kurs_gui.inc
.code
start:
invoke GetModuleHandle,NULL
mov ebx,eax
invoke InitCommonControls
invoke DialogBoxParam,ebx,IDD_DIALOG1,NULL, offset DialogProc,NULL
invoke ExitProcess,0
DialogProc proc __in hwndDlg:HWND, __in uMsg:UINT, __in wParam:WPARAM , __in lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
;int 3
push hwndDlg
pop hWindow
invoke WSAStartup, 0202h, addr WSAInfo
.if eax!=0
invoke LastErrorMessageBox, TEXT("Windows Sockets initialize error")
ret
.endif
call ListenPool
.elseif eax==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if eax==IDC_Send
call SendMes
.elseif eax==IDC_SendFile
call SendFile
.elseif eax==IDC_Restart
COMMENT *
call KillListeningThreads
invoke RtlFillMemory,addr hListenThreadPool,80,0
call ListenPool
*
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hwndDlg,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DialogProc endp
ListenPool proc uses edi esi ebx
invoke gethostname,addr szHostName,lengthof szHostName
invoke gethostbyname,addr szHostName
assume eax:PTR hostent
mov ebx,dword ptr [eax].h_addr_list
assume eax:nothing
lea esi,hListenThreadPool
lea edi,ListenThreadPool
mov ecx,[ebx]
.while ecx!=0
invoke CreateThread,0,0,edi,ecx,0,0
mov [esi],eax
lea esi,[esi+4]
lea ebx,[ebx+4]
mov ecx,[ebx]
.endw
ret
ListenPool endp
ListenThreadPool proc uses ebx esi edi IPAddr:DWORD
LOCAL wsHost:DWORD
LOCAL Host:sockaddr_in
LOCAL Client:sockaddr_in
LOCAL ClientSockAddrLength:DWORD
LOCAL Command:DWORD
mov ebx,IPAddr
mov ebx,[ebx]
mov Host.sin_addr,ebx
mov LocalHostIP, ebx
invoke inet_ntoa, LocalHostIP
invoke SetDlgItemText, hWindow, IDC_EDT1,eax
;int 3
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP
.if eax==INVALID_SOCKET
invoke MessageBox,0,TEXT("Ñîêåò äëÿ ïðèéîìó ïîâ³äîìëåíü íå áóâ ñòâîðåíèé : "),0,MB_OK
invoke ExitThread,0
.endif
mov wsHost,eax
invoke MessageBox,0,TEXT("Ãîòîâèé ïðèéìàòè ïîâ³äîìëåííÿ :"),0,MB_OK
mov Host.sin_family,AF_INET
xchg al,ah
mov Host.sin_port,4000;ax
invoke bind,wsHost,addr Host,sizeof Host
.if eax==SOCKET_ERROR
invoke MessageBox,0,TEXT("bindRecv : "),0,MB_OK
invoke closesocket,wsHost
invoke ExitThread,0
.endif
invoke listen,wsHost,SOMAXCONN
.if eax==SOCKET_ERROR
invoke MessageBox,0,TEXT("listenRecv : "),0,MB_OK
invoke closesocket,wsHost
invoke ExitThread,0
.endif
.while TRUE
mov ClientSockAddrLength,sizeof Client
invoke accept,wsHost,addr Client,addr ClientSockAddrLength
.if eax==INVALID_SOCKET
invoke MessageBox,0,TEXT("acceptRecv : "),0,MB_OK
invoke closesocket,wsHost
invoke ExitThread,0
.endif
mov esi,eax
invoke recv,esi,addr Command,4,0
invoke SetDlgItemText,hWindow,IDC_EDT2,addr Command
.if Command==1
invoke MessageBox,0,TEXT("Command1Recv : "),0,MB_OK
invoke ReceiveMessage,esi,addr Client
.elseif Command==2
invoke MessageBox,0,TEXT("Command2Recv : "),0,MB_OK
invoke ReceiveFile,esi,addr Client
.endif
invoke closesocket,esi
.endw
ListenThreadPool endp
ReceiveMessage proc uses esi edi ebx wsClient:DWORD,lpWhom:DWORD
lea edi, hMem
;COMMENT;*
invoke lstrlen,edi
.if eax<3500 && eax!=0
mov dword ptr[edi+eax],0A0Dh
.else
mov byte ptr[edi],0
.endif ;*
mov esi,lpWhom
mov ebx,(sockaddr_in PTR [esi]).sin_addr
mov HostIP, ebx
invoke inet_ntoa,LocalHostIP
invoke lstrcat,edi,eax
invoke lstrlen,edi
mov dword ptr [edi+eax],0A0Dh
lea edi,[edi+eax+2];*
invoke recv,wsClient,edi,500,0;addr hMem,lengthof hMem,0
invoke SetDlgItemText,hWindow,IDC_Out,addr hMem
;invoke MessageBox,0,TEXT("End of reading : "),0,MB_OK
ret
ReceiveMessage endp
ReceiveFile proc uses esi edi ebx wsClient:DWORD, lpWhom:DWORD
LOCAL SizeOfFile:DWORD
LOCAL SizeOfBufferForRecv[64]:BYTE
LOCAL BufferForSend[1024]:BYTE
invoke recv,wsClient,addr SizeOfFile,4,0
lea edi, hMem
;COMMENT;*
invoke lstrlen,edi
.if eax<3500 && eax!=0
mov dword ptr[edi+eax],0A0Dh
.else
mov byte ptr[edi],0
.endif ;*
mov esi,lpWhom
mov ebx,(sockaddr_in PTR [esi]).sin_addr
mov HostIP, ebx
invoke inet_ntoa,LocalHostIP
invoke lstrcat,edi,eax
invoke lstrlen,edi
mov dword ptr [edi+eax],0A0Dh
lea edi,[edi+eax+2];*
invoke recv,wsClient,edi,260,0
invoke SetDlgItemText,hWindow,IDC_Out,addr hMem
;invoke recv,wsClient,addr buffer,260,0
;invoke SetDlgItemText,hWindow,IDC_Out,addr buffer
mov lpofn.lStructSize,SIZEOF lpofn
push hWindow
pop lpofn.hwndOwner
push hInstance
pop lpofn.hInstance
mov lpofn.lpstrFilter, OFFSET FilterString
mov lpofn.lpstrFile, OFFSET buffer
mov lpofn.nMaxFile,MAXSIZE
invoke GetSaveFileName, addr lpofn
;int 3
invoke CreateFile, addr buffer,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL
.if eax==INVALID_HANDLE_VALUE
invoke LastErrorMessageBox,addr buffer
invoke lstrlen,edi
invoke lstrcat,edi,TEXT(" - ïîìèëêà ïðè çáåðåæåíí³")
invoke SetDlgItemText,hWindow,IDC_Out,addr hMem
ret
.endif
mov hFileRecv,eax
invoke recv,wsClient,addr BufferForSend,SizeOfFile,0
invoke WriteFile,hFileRecv,addr BufferForSend,SizeOfFile,addr SizeOfBufferForRecv,NULL
invoke CloseHandle,hFileRecv
invoke lstrlen,edi
invoke lstrcat,edi,TEXT(" - ôàéë ïðèéíÿòî")
invoke SetDlgItemText,hWindow,IDC_Out,addr hMem
ret
ReceiveFile endp
SendMes proc uses esi edi ebx
LOCAL wsHostWhom:DWORD
LOCAL HostWhom:sockaddr_in
LOCAL ClientWhere:sockaddr_in
LOCAL ClientSockAddrLength:DWORD
LOCAL BufferForSend[1024]:BYTE
LOCAL Command:DWORD
invoke socket, AF_INET, SOCK_STREAM, IPPROTO_IP
.if eax==INVALID_SOCKET
invoke MessageBox,0,TEXT("Ñîêåò äëÿ â³äïðàâêè ïîâ³äîìëåíü íå áóâ ñòâîðåíèé : "),0,MB_OK
ret
.endif
mov wsHostWhom, eax
mov ClientWhere.sin_family, AF_INET
mov ClientWhere.sin_port, 4000;386Dh
invoke GetDlgItemText, hWindow, IDC_IP,addr WhereHostIP, lengthof WhereHostIP
invoke inet_addr, addr WhereHostIP
mov ClientWhere.sin_addr, eax
invoke connect, wsHostWhom, addr ClientWhere, SIZEOF ClientWhere
.if eax==SOCKET_ERROR
invoke MessageBox,0,TEXT("connectSend : "),0,MB_OK
ret
.endif
mov edx,1
mov Command,edx
invoke send,wsHostWhom,addr Command,4,NULL
invoke GetDlgItemText, hWindow, IDC_EDT2,addr BufferForSend, lengthof BufferForSend
invoke send,wsHostWhom, addr BufferForSend, lengthof BufferForSend, NULL
COMMENT *+
lea esi, Buffer2
invoke StdIn, esi, lengthof Buffer2
mov edi,esi
mov al,0Dh
mov ecx, lengthof Buffer2
repne scasb
mov dword ptr [edi-1], 0A0Dh
sub edi, esi
lea edi,[edi+2] *
invoke closesocket,wsHostWhom ;*
ret
SendMes endp
SendFile proc uses esi edi ebx
LOCAL wsHostWhom:DWORD
LOCAL HostWhom:sockaddr_in
LOCAL ClientWhere:sockaddr_in
LOCAL ClientSockAddrLength:DWORD
LOCAL Command:DWORD
LOCAL SizeOfBuffer:DWORD
LOCAL SizeOfBufferForSend[64]:BYTE
LOCAL BufferForSend[1024]:BYTE
invoke socket, AF_INET, SOCK_STREAM, IPPROTO_IP
.if eax==INVALID_SOCKET
invoke MessageBox,0,TEXT("Ñîêåò äëÿ â³äïðàâêè ïîâ³äîìëåíü íå áóâ ñòâîðåíèé : "),0,MB_OK
ret
.endif
mov wsHostWhom, eax
mov ClientWhere.sin_family, AF_INET
mov ClientWhere.sin_port, 4000;386Dh
invoke GetDlgItemText, hWindow, IDC_IP,addr WhereHostIP, lengthof WhereHostIP
invoke inet_addr, addr WhereHostIP
mov ClientWhere.sin_addr, eax
invoke connect, wsHostWhom, addr ClientWhere, SIZEOF ClientWhere
.if eax==SOCKET_ERROR
invoke MessageBox,0,TEXT("connectSend : "),0,MB_OK
ret
.endif
mov edx,2
mov Command,edx
invoke send,wsHostWhom,addr Command,4,NULL
mov ofn.lStructSize,SIZEOF lpofn
push hWindow
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter, OFFSET FilterString
mov ofn.lpstrFile, OFFSET buffer2
mov ofn.lpstrFileTitle, OFFSET maskbuffer2
mov ofn.nMaxFile,MAXSIZE
invoke GetOpenFileName, addr ofn
invoke CreateFile,addr buffer2,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax==INVALID_HANDLE_VALUE
invoke MessageBox,0,TEXT("NotOpenCreateSend : "),0,MB_OK
ret
.endif
mov hFileSend,eax
invoke GetFileSize,hFileSend,addr SizeOfBuffer
mov SizeOfBuffer,eax
invoke SetDlgItemText,hWindow,IDC_Out,addr SizeOfBuffer
invoke send,wsHostWhom,addr SizeOfBuffer,4,NULL
invoke SetDlgItemText,hWindow,IDC_EDT2,addr buffer2
invoke MessageBox,0,TEXT("³äïðàâèòè ôàéë : "),0,MB_OK
invoke GetDlgItemText,hWindow,IDC_EDT2,addr maskbuffer2,lengthof maskbuffer2
invoke send,wsHostWhom,addr maskbuffer2,260,NULL
invoke ReadFile,hFileSend,addr BufferForSend,SizeOfBuffer,addr SizeOfBufferForSend,NULL
invoke send,wsHostWhom,addr BufferForSend,SizeOfBuffer,NULL
invoke CloseHandle, hFileSend
;invoke MessageBox,0,TEXT("End of writing : "),0,MB_OK
invoke closesocket,wsHostWhom ;*
ret
SendFile endp
end start |