|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах |
|
C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах
|
Будем жить, Маэстро... Сообщения: 6694 |
Профиль | Сайт | Отправить PM | Цитировать
Приветы. Вот собственно, такой вопрос возник в связи с темой - VT Checker - утилита пакетной проверки файлов на VirusTotal.com Хочу дополнительно прикрутить к своей программе поиск вредоносов по их контрольной сумме MD5 с дальнейшей проверкой на различных онлайн сервисах. Прошу помочь в этом. Задача состоит из трёх подзадач.
1. Как получить контрольную сумму (MD5) файла - Решена 2. Как сделать запрос на онлайн-сервис (http://www.virustotal.com/search.html) 3. Как вернуть результат проверки Спасибо. |
|
------- Отправлено: 17:30, 17-08-2010 |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 18:00, 17-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать AlexTNT, О, спасибо, не догадался посмотреть в FAQ(source), я завтра поэкспериментирую. Только там что-то много кода, Delirium говорил, можно короче.
Цитата Delirium:
|
|
------- Отправлено: 18:27, 17-08-2010 | #3 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Drongo,
1. Если кодите в Borland или Delphi, то на вкладке IndyMisc есть компонент для работы с MD5 (не помню названия). 2. Использовать: WinSock, WinInet, TNMHTTP, TIdHTTP. 3. Делать соответствующий GET или POST запрос, далее парсить результат. |
------- Отправлено: 22:38, 17-08-2010 | #4 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать public string GetMD5Hash(string input) { System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] bs = File.ReadAllBytes(input); bs = x.ComputeHash(bs); System.Text.StringBuilder s = new System.Text.StringBuilder(); foreach(byte b in bs) { s.Append(b.ToString("x2").ToLower()); } string password = s.ToString(); return password; } public string getSHA1(string input) { return BitConverter.ToString(System.Security.Cryptography.SHA1Managed.Create().ComputeHash(Encoding.Default.GetBytes(input))).Replace("-", ""); } public string getSHA256(string input) { string hash = null; var sha256 = System.Security.Cryptography.SHA256.Create(); Byte[] hashBytes = sha256.ComputeHash(Encoding.Default.GetBytes(input)); hash = BitConverter.ToString(hashBytes); return hash.Replace("-", ""); } отправка запроса на VirusTotal: //созд. объект, который отравляет GET и POST запросы Stream stRequest; System.Net.WebRequest objRequest = System.Net.WebRequest.Create("http://www.virustotal.com/vt/en/consultamd5"); objRequest.Method = "POST"; objRequest.ContentType = "application/x-www-form-urlencoded"; objRequest.Timeout = 120000; objRequest.Proxy.Credentials = CredentialCache.DefaultCredentials; StringBuilder sendString = new StringBuilder(); sendString.AppendFormat("hash={0}", "ТУТ ПОЛУЧЕННЫЙ MD5"); //узнаём длину строки, нужную для POST запросов byte[] SomeBytes = Encoding.UTF8.GetBytes(sendString.ToString()); objRequest.ContentLength = SomeBytes.Length; stRequest = objRequest.GetRequestStream();//открывает поток stRequest.Write(SomeBytes, 0, SomeBytes.Length);//пишет в него stRequest.Close(); //тут же ждем ответа от cgi. если ответ не нужен, то не ждите :) System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) objRequest.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string res = reader.ReadToEnd(); //Читаем файл using(StreamWriter sw = new StreamWriter(PathToDocs + "\\" + row.Cells[0].Value.ToString() + "-" + row.Cells[2].Value.ToString() + ".html")) { sw.Write(res); } reader.Close(); response.Close(); hash={0} - слово HASH берется из требуемой страницы на сервере. Я просматривал код страницы http://www.virustotal.com/vt/en/consultamd5, там есть TextBox с ID="hash". Вот его и указываем при отправке POST запроса. |
|
------- Отправлено: 05:52, 18-08-2010 | #5 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
|
|
------- Отправлено: 15:26, 18-08-2010 | #6 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Друзья, спасибо за советы, но особо хочу подчеркнуть помощь Serega, если бы не он, так и по сию минуту пытался что-то сделать.
Вариант может быть такой. #include <IdHashMessageDigest.hpp> String __fastcall MD5File(const String FileName) { String Result; TFileStream *fs= new TFileStream(FileName, fmOpenRead | fmShareDenyWrite); try { TIdHashMessageDigest5 *MD5 = new TIdHashMessageDigest5(); try { Result = MD5->HashStreamAsHex(fs); } __finally { delete MD5; } } __finally { delete fs; } return Result; } Цитата:
Теперь становятся актуальны два следующих вопроса. Как правильно отправить полученый MD5 на онлайн-сервис. |
|
------- Отправлено: 20:22, 18-08-2010 | #7 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать По второму пункту:
На форме TButton (Button1), TMemo (Memo) и TIdHTTP (HTTPQuery) void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString md5Hesh = "d8578edf8458ce06fbc5bb76a58c5ca4"; TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); post->Add("chain=" + md5Hesh); try { HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdSocketError &se) { ShowMessage(se.Message); } catch(Exception &e) { ShowMessage(e.Message); } ShowMessage(response->DataString); delete HTTPQuery, post, response; } //--------------------------------------------------------------------------- void __fastcall TForm1::HTTPQueryRedirect(TObject *Sender, AnsiString &dest, int &NumRedirect, bool &Handled, AnsiString &VMethod) { Memo->Lines->Add(HTTPQuery->Get(dest)); Handled = false; } //--------------------------------------------------------------------------- |
------- Отправлено: 23:23, 18-08-2010 | #8 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
В Memo загружается страница какой-то текст, при сохранении в html получается та же самая страница, что и по ссылке - http://www.virustotal.com/search.html void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString md5Hesh = "0045BCBD3047391E47F3B56DC7C7F2F2"; TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); post->Add("chain=" + md5Hesh); try{ IdHTTP1->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdSocketError &se){ ShowMessage(se.Message); } catch(Exception &e){ ShowMessage(e.Message); } // ShowMessage(response->DataString); delete IdHTTP1, post, response; } //--------------------------------------------------------------------------- void __fastcall TForm1::IdHTTP1Redirect(TObject *Sender, AnsiString &dest, int &NumRedirect, bool &Handled) { Memo1->Lines->Add(IdHTTP1->Get(dest)); Handled = false; } //--------------------------------------------------------------------------- |
|
------- Отправлено: 11:18, 19-08-2010 | #9 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Drongo, в результате мы получаем страничку с результатом проверки. Из неё мы должны выдрать таблицу:
распарсить и выдать результат. |
------- Отправлено: 12:52, 19-08-2010 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Info - Онлайн проверка всего компьютера и отдельных файлов на вирусы | iskander-k | Защита компьютерных систем | 6 | 27-01-2013 22:30 | |
Прочие - Программы для подсчёта контрольных сумм файлов | ALEXEY_DFD | Программное обеспечение Windows | 14 | 18-11-2011 15:30 | |
CMD/BAT - [решено] Проверка установки определенных файлов в директорию | korenza | Скриптовые языки администрирования Windows | 17 | 03-06-2010 13:25 | |
Проверка защищенных файлов | SergOst | Microsoft Windows NT/2000/2003 | 11 | 15-10-2006 18:07 | |
Проверка новых файлов налету, чем? | sash minsk | Защита компьютерных систем | 5 | 03-06-2005 16:46 |
|