|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах |
|
|
C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах
|
|
Будем жить, Маэстро... Сообщения: 6694 |
Приветы.
Вот собственно, такой вопрос возник в связи с темой - 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 | |
|