Без заголовка

Автор: Без имени Написано: 1 мес. назад Форматирование: asm.
Без нумерации строк
  1.  
  2. format PE GUI 4.0
  3. entry start
  4.  
  5. include 'win32a.inc'
  6.  
  7. include 'riched32.inc'
  8.  
  9. section '.text' code readable executable
  10.  
  11.   WM_SOCK = WM_USER + 100
  12.  
  13.   SOCK_IDLE   = 0
  14.   SOCK_LISTEN = 1
  15.   SOCK_SERVER = 2
  16.   SOCK_CLIENT = 3
  17.  
  18.   start:
  19.         mov     [initcomctl.dwSize],sizeof.INITCOMMONCONTROLSEX
  20.         mov     [initcomctl.dwICC],ICC_INTERNET_CLASSES
  21.         invoke  InitCommonControlsEx,initcomctl
  22.         invoke  LoadLibrary,_riched
  23.         or      eax,eax
  24.         jz      exit
  25.         invoke  WSAStartup,0101h,wsadata
  26.         or      eax,eax
  27.         jnz     exit
  28.         invoke  GetModuleHandle,0
  29.         invoke  DialogBoxParam,eax,IDR_DIALOG,HWND_DESKTOP,DialogProc,0
  30.         invoke  WSACleanup
  31.   exit:
  32.         invoke  ExitProcess,0
  33.  
  34.   proc  DialogProc hwnddlg,msg,wparam,lparam
  35.         push    ebx esi edi
  36.         cmp     [msg],WM_INITDIALOG
  37.         je      wminitdialog
  38.         cmp     [msg],WM_COMMAND
  39.         je      wmcommand
  40.         cmp     [msg],WM_SOCK
  41.         je      wmsock
  42.         xor     eax,eax
  43.         jmp     finish
  44.   wminitdialog:
  45.         mov     [status],SOCK_IDLE
  46.         jmp     processed
  47.   wmcommand:
  48.         mov     eax,[wparam]
  49.         cmp     eax,IDCANCEL
  50.         je      wmclose
  51.         cmp     eax,IDOK
  52.         je      .ok
  53.         cmp     eax,ID_LISTEN
  54.         je      .listen
  55.         cmp     eax,ID_GETHOSTBYNAME
  56.         je      .gethostbyname
  57.         cmp     eax,ID_CONNECT
  58.         je      .connect
  59.         cmp     eax,ID_SEND
  60.         je      .send
  61.         shr     eax,16
  62.         cmp     eax,EN_SETFOCUS
  63.         je      .setfocus
  64.         cmp     eax,EN_KILLFOCUS
  65.         je      .killfocus
  66.         cmp     eax,CBN_SETFOCUS
  67.         je      .setfocus
  68.         cmp     eax,CBN_KILLFOCUS
  69.         je      .killfocus
  70.         jmp     processed
  71.   .ok:
  72.         cmp     [focus],ID_HOSTNAME
  73.         je      .gethostbyname
  74.         cmp     [focus],ID_PORT
  75.         je      .connect
  76.         cmp     [focus],ID_SERVPORT
  77.         je      .listen
  78.         cmp     [focus],ID_COMMAND
  79.         je      .send
  80.         jmp     processed
  81.   .setfocus:
  82.         movzx   eax,word [wparam]
  83.         mov     [focus],eax
  84.         jmp     processed
  85.   .killfocus:
  86.         movzx   eax,word [wparam]
  87.         cmp     [focus],eax
  88.         jne     processed
  89.         mov     [focus],0
  90.         jmp     processed
  91.   .listen:
  92.         cmp     [status],SOCK_CLIENT
  93.         je      processed
  94.         cmp     [status],SOCK_IDLE
  95.         jne     .stop
  96.         invoke  socket,AF_INET,SOCK_STREAM,0
  97.         cmp     eax,-1
  98.         je      processed
  99.         mov     [sock],eax
  100.         mov     [saddr.sin_addr],0
  101.         mov     [saddr.sin_family],AF_INET
  102.         invoke  GetDlgItemInt,[hwnddlg],ID_SERVPORT,temp,FALSE
  103.         cmp     [temp],0
  104.         je      processed
  105.         cmp     eax,0FFFFh
  106.         ja      processed
  107.         xchg    ah,al
  108.         mov     [saddr.sin_port],ax
  109.         invoke  bind,[sock],saddr,sizeof.sockaddr
  110.         or      eax,eax
  111.         jnz     .bind_failed
  112.         invoke  listen,[sock],1
  113.         invoke  WSAAsyncSelect,[sock],[hwnddlg],WM_SOCK,FD_ACCEPT
  114.         mov     [status],SOCK_LISTEN
  115.         invoke  GetDlgItem,[hwnddlg],ID_CONNECT
  116.         invoke  EnableWindow,eax,FALSE
  117.         invoke  SetDlgItemText,[hwnddlg],ID_LISTEN,_stop
  118.         invoke  GetDlgItem,[hwnddlg],ID_LISTEN
  119.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  120.         jmp     processed
  121.       .bind_failed:
  122.         invoke  closesocket,[sock]
  123.         jmp     processed
  124.       .stop:
  125.         invoke  closesocket,[sock]
  126.         cmp     [status],SOCK_SERVER
  127.         je      wmsock.disconnected
  128.         mov     [status],SOCK_IDLE
  129.         invoke  GetDlgItem,[hwnddlg],ID_CONNECT
  130.         invoke  EnableWindow,eax,TRUE
  131.         invoke  SetDlgItemText,[hwnddlg],ID_LISTEN,_listen
  132.         jmp     processed
  133.   .gethostbyname:
  134.         invoke  GetDlgItemText,[hwnddlg],ID_HOSTNAME,buffer,8000h
  135.         invoke  gethostbyname,buffer
  136.         or      eax,eax
  137.         jz      .bad_name
  138.         virtual at eax
  139.         .host   hostent
  140.         end     virtual
  141.         mov     eax,[.host.h_addr_list]
  142.         mov     eax,[eax]
  143.         mov     eax,[eax]
  144.         bswap   eax
  145.         invoke  SendDlgItemMessage,[hwnddlg],ID_IPADDR,IPM_SETADDRESS,0,eax
  146.         invoke  SendDlgItemMessage,[hwnddlg],ID_HOSTNAME,CB_ADDSTRING,0,buffer
  147.         invoke  GetDlgItem,[hwnddlg],ID_PORT
  148.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  149.         jmp     processed
  150.       .bad_name:
  151.         invoke  SendDlgItemMessage,[hwnddlg],ID_IPADDR,IPM_CLEARADDRESS,0,0
  152.         invoke  GetDlgItem,[hwnddlg],ID_HOSTNAME
  153.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  154.         jmp     processed
  155.   .connect:
  156.         cmp     [status],SOCK_CLIENT
  157.         je      .disconnect
  158.         cmp     [status],SOCK_IDLE
  159.         jne     processed
  160.         invoke  SendDlgItemMessage,[hwnddlg],ID_IPADDR,IPM_GETADDRESS,0,temp
  161.         mov     eax,[temp]
  162.         bswap   eax
  163.         mov     [saddr.sin_addr],eax
  164.         mov     [saddr.sin_family],PF_INET
  165.         invoke  GetDlgItemInt,[hwnddlg],ID_PORT,temp,FALSE
  166.         cmp     [temp],0
  167.         je      processed
  168.         cmp     eax,0FFFFh
  169.         ja      processed
  170.         xchg    ah,al
  171.         mov     [saddr.sin_port],ax
  172.         invoke  closesocket,[sock]
  173.         invoke  socket,AF_INET,SOCK_STREAM,0
  174.         cmp     eax,-1
  175.         je      processed
  176.         mov     [sock],eax
  177.         invoke  connect,[sock],saddr,sizeof.sockaddr_in
  178.         or      eax,eax
  179.         jnz     .refused
  180.         mov     esi,_connected
  181.         mov     eax,0x9F00
  182.         call    write_status
  183.         mov     [status],SOCK_CLIENT
  184.         invoke  WSAAsyncSelect,[sock],[hwnddlg],WM_SOCK,FD_READ or FD_CLOSE
  185.         invoke  SetDlgItemText,[hwnddlg],ID_CONNECT,_disconnect
  186.         invoke  GetDlgItem,[hwnddlg],ID_SEND
  187.         invoke  EnableWindow,eax,TRUE
  188.         invoke  GetDlgItem,[hwnddlg],ID_LISTEN
  189.         invoke  EnableWindow,eax,FALSE
  190.         invoke  GetDlgItem,[hwnddlg],ID_COMMAND
  191.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  192.         jmp     processed
  193.       .refused:
  194.         mov     esi,_refused
  195.         mov     eax,0xFF
  196.         call    write_status
  197.         jmp     processed
  198.   .send:
  199.         cmp     [status],SOCK_LISTEN
  200.         jbe     processed
  201.         invoke  GetDlgItemText,[hwnddlg],ID_COMMAND,buffer,8000h
  202.         push    eax
  203.         invoke  SendDlgItemMessage,[hwnddlg],ID_COMMAND,CB_ADDSTRING,0,buffer
  204.         pop     eax
  205.         mov     [buffer+eax],13
  206.         inc     eax
  207.         mov     [buffer+eax],10
  208.         inc     eax
  209.         mov     [buffer+eax],0
  210.         invoke  send,[sock],buffer,eax,0
  211.         mov     esi,buffer
  212.         xor     eax,eax
  213.         call    write_status
  214.         mov     [buffer],0
  215.         invoke  SetDlgItemText,[hwnddlg],ID_COMMAND,buffer
  216.         jmp     processed
  217.   .disconnect:
  218.         invoke  closesocket,[sock]
  219.         jmp     wmsock.disconnected
  220.   write_status:
  221.         mov     [charformat.cbSize],sizeof.CHARFORMAT
  222.         mov     [charformat.dwMask],CFM_COLOR
  223.         mov     [charformat.dwEffects],0
  224.         mov     [charformat.crTextColor],eax
  225.         invoke  GetDlgItem,[hwnddlg],ID_STATUS
  226.         mov     ebx,eax
  227.         invoke  SendMessage,ebx,EM_SETSEL,-1,-1
  228.         invoke  SendMessage,ebx,EM_SCROLLCARET,0,0
  229.         invoke  SendMessage,ebx,EM_SETCHARFORMAT,SCF_SELECTION,charformat
  230.         invoke  SendMessage,ebx,EM_REPLACESEL,FALSE,esi
  231.         retn
  232.   wmsock:
  233.         cmp     [status],SOCK_LISTEN
  234.         je      .accept
  235.         invoke  recv,[sock],buffer,8000h,0
  236.         or      eax,eax
  237.         jz      .disconnected
  238.         cmp     eax,-1
  239.         je      .no_response
  240.         mov     [buffer+eax],0
  241.         mov     esi,buffer
  242.         mov     eax,0xFF0000
  243.         call    write_status
  244.       .no_response:
  245.         jmp     processed
  246.       .disconnected:
  247.         mov     [status],SOCK_IDLE
  248.         mov     esi,_disconnected
  249.         mov     eax,0xFF
  250.         call    write_status
  251.         invoke  SetDlgItemText,[hwnddlg],ID_LISTEN,_listen
  252.         invoke  SetDlgItemText,[hwnddlg],ID_CONNECT,_connect
  253.         invoke  GetDlgItem,[hwnddlg],ID_SEND
  254.         invoke  EnableWindow,eax,FALSE
  255.         invoke  GetDlgItem,[hwnddlg],ID_LISTEN
  256.         invoke  EnableWindow,eax,TRUE
  257.         invoke  GetDlgItem,[hwnddlg],ID_CONNECT
  258.         invoke  EnableWindow,eax,TRUE
  259.         invoke  GetDlgItem,[hwnddlg],ID_HOSTNAME
  260.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  261.         jmp     processed
  262.       .accept:
  263.         invoke  accept,[sock],0,0
  264.         cmp     eax,-1
  265.         je      processed
  266.         xchg    eax,[sock]
  267.         invoke  closesocket,eax
  268.         mov     esi,_accepted
  269.         mov     eax,0x9F00
  270.         call    write_status
  271.         mov     [status],SOCK_SERVER
  272.         invoke  WSAAsyncSelect,[sock],[hwnddlg],WM_SOCK,FD_READ or FD_CLOSE
  273.         invoke  GetDlgItem,[hwnddlg],ID_SEND
  274.         invoke  EnableWindow,eax,TRUE
  275.         invoke  GetDlgItem,[hwnddlg],ID_CONNECT
  276.         invoke  EnableWindow,eax,FALSE
  277.         invoke  GetDlgItem,[hwnddlg],ID_COMMAND
  278.         invoke  SendMessage,[hwnddlg],WM_NEXTDLGCTL,eax,TRUE
  279.         jmp     processed
  280.   wmclose:
  281.         invoke  closesocket,[sock]
  282.         invoke  EndDialog,[hwnddlg],0
  283.   processed:
  284.         mov     eax,1
  285.   finish:
  286.         pop     edi esi ebx
  287.         ret
  288.   endp
  289.  
  290. section '.data' data readable writeable
  291.  
  292.   _riched db 'RICHED32.DLL',0
  293.  
  294.   _connect db '&Connect',0
  295.   _disconnect db 'Dis&connect',0
  296.   _listen db '&Listen',0
  297.   _stop db '&Stop',0
  298.  
  299.   _refused db 'Connection refused.',13,10,0
  300.   _connected db 'Connected.',13,10,0
  301.   _disconnected db 'Disconnected.',13,10,0
  302.   _accepted db 'Accepted incoming connection.',13,10,0
  303.  
  304.   sock dd ?
  305.   temp dd ?
  306.   focus dd ?
  307.  
  308.   initcomctl INITCOMMONCONTROLSEX
  309.   charformat CHARFORMAT
  310.   wsadata WSADATA
  311.   saddr sockaddr_in
  312.  
  313.   buffer rb 8000h
  314.  
  315.   status db ?
  316.  
  317. section '.idata' import data readable writeable
  318.  
  319.   library kernel,'KERNEL32.DLL',\
  320.           user,'USER32.DLL',\
  321.           comctl,'COMCTL32.DLL',\
  322.           winsock,'WSOCK32.DLL'
  323.  
  324.   import kernel,\
  325.          GetModuleHandle,'GetModuleHandleA',\
  326.          LoadLibrary,'LoadLibraryA',\
  327.          ExitProcess,'ExitProcess'
  328.  
  329.   import user,\
  330.          DialogBoxParam,'DialogBoxParamA',\
  331.          SendMessage,'SendMessageA',\
  332.          GetDlgItem,'GetDlgItem',\
  333.          GetDlgItemInt,'GetDlgItemInt',\
  334.          GetDlgItemText,'GetDlgItemTextA',\
  335.          SetDlgItemText,'SetDlgItemTextA',\
  336.          SendDlgItemMessage,'SendDlgItemMessageA',\
  337.          GetFocus,'GetFocus',\
  338.          EnableWindow,'EnableWindow',\
  339.          wsprintf,'wsprintfA',\
  340.          EndDialog,'EndDialog'
  341.  
  342.   import comctl,\
  343.          InitCommonControlsEx,'InitCommonControlsEx'
  344.  
  345.   import winsock,\
  346.          WSAStartup,'WSAStartup',\
  347.          WSACleanup,'WSACleanup',\
  348.          WSAAsyncSelect,'WSAAsyncSelect',\
  349.          gethostbyname,'gethostbyname',\
  350.          socket,'socket',\
  351.          bind,'bind',\
  352.          listen,'listen',\
  353.          accept,'accept',\
  354.          connect,'connect',\
  355.          recv,'recv',\
  356.          send,'send',\
  357.          closesocket,'closesocket'
  358.  
  359. section '.rsrc' resource data readable
  360.  
  361.   IDR_DIALOG = 37
  362.   IDR_LOGO   = 7
  363.  
  364.   ID_SERVPORT      = 0x101
  365.   ID_LISTEN        = 0x102
  366.   ID_HOSTNAME      = 0x103
  367.   ID_GETHOSTBYNAME = 0x104
  368.   ID_IPADDR        = 0x105
  369.   ID_PORT          = 0x106
  370.   ID_CONNECT       = 0x107
  371.   ID_STATUS        = 0x108
  372.   ID_COMMAND       = 0x109
  373.   ID_SEND          = 0x10A
  374.  
  375.   directory RT_DIALOG,dialogs,\
  376.             RT_BITMAP,bitmaps
  377.  
  378.   resource dialogs,\
  379.            IDR_DIALOG,LANG_ENGLISH+SUBLANG_DEFAULT,main
  380.  
  381.   resource bitmaps,\
  382.            IDR_LOGO,LANG_ENGLISH+SUBLANG_DEFAULT,logo
  383.  
  384.   dialog main,'Quetannon',70,70,332,176,WS_CAPTION+WS_POPUP+WS_SYSMENU+WS_MINIMIZEBOX+DS_MODALFRAME
  385.     dialogitem 'STATIC',IDR_LOGO,-1,4,4,248,20,WS_VISIBLE+SS_BITMAP
  386.     dialogitem 'BUTTON','',IDOK,0,0,0,0,BS_DEFPUSHBUTTON
  387.     dialogitem 'STATIC','&Host name:',-1,4,26,148,8,WS_VISIBLE
  388.     dialogitem 'EDIT','',ID_HOSTNAME,4,36,148,12,WS_VISIBLE+WS_BORDER+ES_AUTOHSCROLL+WS_TABSTOP
  389.     dialogitem 'BUTTON','>',ID_GETHOSTBYNAME,156,36,20,12,WS_VISIBLE+BS_PUSHBUTTON+WS_TABSTOP
  390.     dialogitem 'STATIC','&IP address:',-1,180,26,72,8,WS_VISIBLE
  391.     dialogitem 'SysIPAddress32','',ID_IPADDR,180,36,72,12,WS_VISIBLE+BS_PUSHBUTTON+WS_TABSTOP
  392.     dialogitem 'STATIC','&Port:',-1,256,26,20,8,WS_VISIBLE
  393.     dialogitem 'EDIT','',ID_PORT,256,36,24,12,WS_VISIBLE+WS_BORDER+ES_NUMBER+WS_TABSTOP
  394.     dialogitem 'BUTTON','&Connect',ID_CONNECT,284,36,44,12,WS_VISIBLE+BS_PUSHBUTTON+WS_TABSTOP
  395.     dialogitem 'STATIC','&Port:',-1,256,2,20,8,WS_VISIBLE
  396.     dialogitem 'EDIT','',ID_SERVPORT,256,12,24,12,WS_VISIBLE+WS_BORDER+ES_NUMBER+WS_TABSTOP
  397.     dialogitem 'BUTTON','&Listen',ID_LISTEN,284,12,44,12,WS_VISIBLE+BS_PUSHBUTTON+WS_TABSTOP
  398.     dialogitem 'RichEdit','',ID_STATUS,4,52,324,104,WS_VISIBLE+WS_BORDER+WS_VSCROLL+ES_AUTOHSCROLL+ES_AUTOVSCROLL+ES_MULTILINE+ES_READONLY+WS_TABSTOP
  399.     dialogitem 'EDIT','',ID_COMMAND,4,160,228,12,WS_VISIBLE+WS_BORDER+ES_AUTOHSCROLL+WS_TABSTOP
  400.     dialogitem 'BUTTON','&Send',ID_SEND,236,160,44,12,WS_VISIBLE+WS_DISABLED+BS_PUSHBUTTON+WS_TABSTOP
  401.     dialogitem 'BUTTON','E&xit',IDCANCEL,284,160,44,12,WS_VISIBLE+BS_PUSHBUTTON+WS_TABSTOP
  402.   enddialog
  403.  
  404.   bitmap logo,'logo.bmp'
  405.