Помогите присоединить файлик Код (Text): .386 .model flat,stdcall option casemap :none ReadFileFromDisk proto :dword Base64Conv proto ;-------------------------------------------------- include \masm32\include\kernel32.inc include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\wsock32.inc includelib \masm32\Lib\masm32.lib includelib \masm32\Lib\user32.lib includelib \masm32\Lib\kernel32.lib includelib \masm32\Lib\wsock32.lib ;-------------------------------------------------- CrLf equ 0dh,0ah lpRecvBufLen equ 200h .data Base64Date db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',0 lszAttach db "D:\smtpMy\my.txt",0 ;---------------- Mail Header --------------------- Header db 'From: <retro83@list.ru>',CrLf ;|от кого db 'X-Mailer: The Bat! (v2.12.00) Business',CrLf ;|косим под TheBat!:) db 'Reply-To: <retro83@list.ru>',CrLf ;|от кого db 'X-Priority: 3 (Normal)',CrLf db 'To: <retro5555@ukr.net>',CrLf ;|кому db 'Subject: Test tema',CrLf ;|тема письма db 'MIME-Version: 1.0',CrLf db 'Content-Type: multipart/mixed; boundary="----A4D921C2D10D7DB"',CrLf,CrLf,0 ;------------------ E-Mail Text -------------------- Message db '----A4D921C2D10D7DB',CrLf db 'Content-Type: text/plain; charset=windows-1251',CrLf db 'Content-Transfer-Encoding: 8bit',CrLf db 'soobsenie',CrLf,0 ;--------------------------------------------------------------------------- msg_my db 'soobsenie',CrLf,0 ;======================================================== ;============= Mail Data ============== Server db 'smtp.mail.ru',0 ;|сервер MailFrom db 'MAIL FROM: <retro83@list.ru>',CrLf,0 ;|от кого MailTo db 'RCPT TO: <retro5555@ukr.net>',CrLf,0 ;|кому ;---------- Login/Pass (Base64 Encode) ------------- Login db 'cmV0cm84M0BsaXN0LnJ1',CrLf,0 ; base64 -- retro83@list.ru Pass db 'cXFxcXFxMQ==',CrLf,0 ;base -- qqqqqq1 ;--------------------------------------------------- ;--------------------------------------------------- SecondPartTemplate db '----ct757',0Dh,0Ah db 'Content-Type: application/octet-stream;name="my.txt"',0Dh,0Ah db 'Content-Disposition: attachment;filename="my.txt"',0Dh,0Ah db 'Content-Transfer-Encoding: base64',0Dh,0Ah ;------------- MailServer's commands --------------- HELO db 'EHLO %s',CrLf,0 AUTH db 'AUTH LOGIN',CrLf,0 DATA db 'DATA',CrLf,0 ENDD db CrLf,'.',CrLf,0 QUIT db 'QUIT',CrLf,0 ;--------------------------------------------------- ;--------------------------------------------------- .data? wsadata WSADATA <> sin sockaddr_in <0> hSock dd ? lpBuf1 db ? Helo_Buf db ? buf db ? ldFileSiz dd ? lpFileData dd ? lpBase64Out dd ? pMessage dd ? ldFullSiz dd ? ;--------------------------------------------------- .code ReadFileFromDisk proc uses edi esi ebx pFileName:dword LOCAL hFile:dword LOCAL resRead:dword LOCAL fileSiz:dword LOCAL pBuffer:dword invoke CreateFile, pFileName, 80000000h, FILE_SHARE_READ, 0, 3, 80h, 0 mov hFile, eax .if eax != -1 invoke GetFileSize, hFile, 0 mov fileSiz, eax invoke VirtualAlloc, 0, fileSiz, 1000h, 40h mov pBuffer, eax invoke SetFilePointer, hFile, 0, 0, 0 .if eax != -1 invoke ReadFile, hFile, pBuffer, fileSiz, addr resRead, 0 .if eax != 0 mov ecx, resRead .if ecx == fileSiz invoke CloseHandle, hFile mov eax, pBuffer mov ecx, fileSiz ret .endif .endif .endif .endif invoke CloseHandle, hFile mov eax, -1 ret ReadFileFromDisk endp ;=============================================================================== Recv_DataLF proc uses edi lea edi,lpBuf1 mov ecx,lpRecvBufLen @loop: jecxz @err ; Check for buffer overlow push ecx invoke recv,hSock,edi,ecx,0 pop ecx ; Error occured cmp eax,SOCKET_ERROR je @err add edi,eax ; Move the poiter sub ecx,eax ; Decrease remaining buffer size ; Fix edi-1 problems when connection was closed from the first ; call of recv procedure (eg. wasn't received any data) cmp ecx,lpRecvBufLen jz @test ; Note: recv always receives at least 1 byte if no error occures ; or connection hasn't been dropped cmp byte ptr[edi-1],10 je @ok @test: ; If connection was closed do not try to receive more data test eax,eax jz @err jmp @loop @err: xor eax,eax jmp @end @ok: ; Check the received status cmp byte ptr [lpBuf1],'2'; 2** - OK jz @F cmp dword ptr [lpBuf1],' 433' ; 334 - Enter Login/Pass jz @F cmp dword ptr [lpBuf1],' 453' ; Accept 354: Start mail input; jnz @err @@: inc eax ; Result = True inc edi mov byte ptr[edi],0 ; Write the null terminator @end: ret Recv_DataLF endp ;=============================================================================== ;=============================================================================== Send_String proc lpStr: DWORD ; Get length of the buffer to send to invoke lstrlen, lpStr ; In blocking sockets send() blocks until all data hasn't been sent ; or error happened (in this case SOCKET_ERROR is returned) invoke send, hSock, lpStr, eax, 0 ret Send_String endp ;=============================================================================== start: invoke ReadFileFromDisk, addr lszAttach mov lpFileData, eax mov ldFileSiz, ecx mov eax, ldFileSiz mov ecx, 2 mul ecx invoke VirtualAlloc, 0, eax, 1000h, 40h mov lpBase64Out, eax push lpFileData push ldFileSiz push lpBase64Out call Base64Conv ; invoke lstrlen, lpBase64Out ; add ldFullSiz, eax ; add ldFullSiz, 200 ; invoke VirtualAlloc, 0, ldFullSiz, 1000h, 40h ; mov pMessage, eax ; ; invoke lstrcat, pMessage, addr SecondPartTemplate ; invoke lstrcat, pMessage, lpBase64Out invoke WSAStartup,0101h,addr wsadata test eax,eax jnz @end invoke socket,AF_INET, SOCK_STREAM, IPPROTO_TCP cmp eax, INVALID_SOCKET je @end mov hSock,eax mov sin.sin_family,AF_INET invoke htons,25 mov sin.sin_port,ax invoke gethostbyname,offset Server mov eax,dword ptr [eax + 12] mov eax,dword ptr [eax] mov eax,dword ptr [eax] mov sin.sin_addr,eax ; соединяемся с сервером invoke connect,hSock,addr sin,sizeof sin test eax,eax jnz @cleanup ;получаем приветствие invoke Recv_DataLF test eax,eax jz @cleanup ;формируем свое invoke gethostname, addr buf,261 invoke gethostbyname, addr buf mov eax,[eax + 12] mov eax,[eax] mov eax,[eax] invoke inet_ntoa,eax invoke wsprintf,offset Helo_Buf,offset HELO,eax ;посылаем свое приветствие invoke Send_String,addr Helo_Buf inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;посылаем строку аутентификации invoke Send_String,offset AUTH inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;посылаем логин invoke Send_String,offset Login inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;посылаем пасс invoke Send_String,offset Pass inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;MAIL FROM invoke Send_String,offset MailFrom inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;RCPT TO invoke Send_String,offset MailTo inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;DATA invoke Send_String,offset DATA inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ;========= посылаем Header ========== invoke Send_String,offset Header inc eax jz @cleanup ;посылаем тело письма invoke Send_String,offset Message inc eax jz @cleanup invoke Send_String,offset msg_my inc eax jz @cleanup ;-------------------------------- invoke Send_String,offset ENDD inc eax jz @cleanup ;получаем ответ invoke Recv_DataLF test eax,eax jz @cleanup ; завершаем работу с сервером invoke Send_String,offset QUIT @cleanup: invoke closesocket,hSock invoke VirtualFree, lpBase64Out, 0, 8000h @end: invoke ExitProcess,0 ret Base64Conv proc near var_14 = dword ptr -14h var_10 = dword ptr -10h var_A = byte ptr -0Ah var_9 = byte ptr -9 var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp add esp, 0FFFFFFECh push edi push esi push ebx xor eax, eax mov [ebp+var_4], eax mov [ebp+var_8], eax mov [ebp+var_9], al mov [ebp+var_A], al mov [ebp+var_10], eax mov [ebp+var_14], eax mov esi, [ebp+arg_0] mov edi, esi jmp loc_40279E loc_40269A: mov eax, [ebp+arg_4] sub eax, [ebp+var_4] cmp eax, 39h jbe short loc_4026AA mov eax, 39h loc_4026AA: mov [ebp+var_10], eax or eax, eax jnz short loc_4026B6 jmp loc_4027A6 loc_4026B6: mov ecx, [ebp+arg_8] add ecx, [ebp+var_4] mov [ebp+var_14], ecx test edi, edi jbe loc_40278E mov eax, 1 loc_4026CC: mov bl, [eax+ecx-1] and [ebp+var_A], 0 cmp eax, edi jnb short loc_4026DE mov dl, [eax+ecx] mov [ebp+var_A], dl loc_4026DE: lea edx, [eax+1] and [ebp+var_9], 0 cmp edx, edi jnb short loc_4026F0 mov cl, [eax+ecx+1] mov [ebp+var_9], cl loc_4026F0: movzx ecx, bl mov ebx, [ebp+var_8] mov edx, ecx and ecx, 3 shr edx, 2 shl ecx, 4 mov dl, byte ptr Base64Date[edx] mov [ebx+esi], dl movzx edx, [ebp+var_A] inc [ebp+var_8] mov edi, [ebp+var_8] mov ebx, edx shr ebx, 4 or ecx, ebx mov cl, byte ptr Base64Date[ecx] mov [esi+edi], cl mov edi, [ebp+var_10] inc [ebp+var_8] mov ecx, [ebp+var_8] mov bl, [ebp+var_9] cmp eax, edi jnb short loc_402758 and edx, 0Fh movzx edi, bl shr edi, 6 shl edx, 2 or edi, edx mov dl, byte ptr Base64Date[edi] mov edi, esi mov [edi+ecx], dl inc [ebp+var_8] mov ecx, [ebp+var_8] mov edi, [ebp+var_10] jmp short loc_402762 loc_402758: mov byte ptr [esi+ecx], 3Dh inc [ebp+var_8] mov ecx, [ebp+var_8] loc_402762: mov byte ptr [esi+ecx], 3Dh lea edx, [eax+1] cmp edx, edi jnb short loc_402779 and ebx, 3Fh mov bl, byte ptr Base64Date[ebx] mov [esi+ecx], bl loc_402779: inc [ebp+var_8] add eax, 3 lea ecx, [eax-1] cmp ecx, edi jnb short loc_40278E mov ecx, [ebp+var_14] jmp loc_4026CC loc_40278E: add [ebp+var_4], edi mov eax, [ebp+var_8] mov word ptr [esi+eax], 0A0Dh add [ebp+var_8], 2 loc_40279E: or esi, esi jnz loc_40269A loc_4027A6: pop ebx pop esi pop edi leave retn 0Ch Base64Conv endp end start
Я мало что понимаю в ресурсах, но, у масма контроллы между BEGIN и END, да и на си тоже. Масм распространяется с примерами, папка - examples, там достаточно информации.