|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах |
|
C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах
|
Будем жить, Маэстро... Сообщения: 6694 |
Приветы.
![]() 1. Как получить контрольную сумму (MD5) файла - Решена 2. Как сделать запрос на онлайн-сервис (http://www.virustotal.com/search.html) 3. Как вернуть результат проверки Спасибо. |
|
------- Отправлено: 17:30, 17-08-2010 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, О, отлично.
![]() //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); TStringList *lHash = new TStringList; // Просто для примера наполнили список контрольными суммами, // в идеале так и будет, проверка файлов которые // Имеют контрольную сумму и которые не прошли по остальным базам lHash->Add("0045BCBD3047391E47F3B56DC7C7F2F2"); lHash->Add("00636A27AF20104CC13E8DDE7DEE64E7"); lHash->Add("012995DAD105ACEFBF05591271CD2F54"); for(int i = 0; i < lHash->Count; i++){ post->Clear(); post->Add("chain=" + lHash->Strings[i]); try{ HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdSocketError &se){ ShowMessage(se.Message); } catch(Exception &e){ ShowMessage(e.Message); } } delete HTTPQuery, post, response, lHash; } //--------------------------------------------- Цитата ganselo:
![]() |
|
------- Отправлено: 17:45, 21-08-2010 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Проблема в этой строчке:
Мы удаляем HTTPQuery и при повторном нажатии кнопки обращаемся к пустому указателю. Нужно так: P.S Не помешало бы проверку на вирусы засунуть в отдельный поток, а то TIdHTTP (как и все Indy компоненты) работает в синхронном режиме и по этому во время проверки форма не активна. |
------- Отправлено: 18:40, 21-08-2010 | #32 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
Проверяем файлы по уже имеющимся спискам (Malware, Hash) и если по имеющимся спискам найдены вредные файлы, то проверку такого файла не делать на VT, а если по спискам не найдено, и у файла есть MD5 - то добавить файл с MD5 в список(HashVT) для дальнейшей проверки. В итоге, после прогона, получается список уже явно удаляемых(MalwareDelete) по имеющимся спискам и список подготовленых к проверке на VT. Вот теперь проверяем этот список HashVT на VT и если он удовлетворяется по условию процента, то файл добавляется в список подготовленых к удалению MalwareDelete. И теперь как бы ждём вердикта VT, правда вы говорите что форма неактивна, да, действительно неактивна, я только что проверил, сначала не обратил внимание. А как делать в отдельном потоке? |
|
------- Отправлено: 20:22, 21-08-2010 | #33 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать //добавляем новую функцию. Здесь и будет обращение к серверу DWORD WINAPI QueryThread(LPVOID lpParam) { TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); TStringList *lHash = new TStringList; lHash->Add("0045BCBD3047391E47F3B56DC7C7F2F2"); lHash->Add("00636A27AF20104CC13E8DDE7DEE64E7"); lHash->Add("012995DAD105ACEFBF05591271CD2F54"); for(int i = 0; i < lHash->Count; i++){ post->Clear(); post->Add("chain=" + lHash->Strings[i]); try{ Form1->HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdSocketError &se){ MessageBox(0, se.Message.c_str(), 0, 0); } catch(Exception &e){ MessageBox(0, e.Message.c_str(), 0, 0); } Form1->HTTPQuery->Disconnect(); } delete post, response, lHash; } Есть в Indy компонент TIdAntiFreeze. Можно попробовать его кинуть на форму и по идеи форма не должна зависать, но у меня, когда я ложу на форму и компилю выскакивает AccessViolation. Мб у вас заработает. |
------- Отправлено: 22:00, 21-08-2010 | #34 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
Ещё, если знаете, такой вопрос. Это выходной лог, всё работает Удаляем файл = ----------- http://www.virustotal.com/file-scan/report.html?id=e979fcf20233baff3e9c8c27921bd4a215a45236856bf32b2a01ceae988900dc-1265219152 80 ----------- Удаляем файл = ----------- http://www.virustotal.com/file-scan/report.html?id=b570351e7bc3ca00ba47bd8b5e0d2c63814d1aefd786546bd22ad6e8524efc74-1266477769 92 ----------- Вируса нет = ----------- http://www.virustotal.com/file-scan/report.html?id=2bac20016422c9a2ea82aac7386c0147bd0ee96ccf3db3af3127a64348754787-1217825795 8 ----------- |
|
------- Отправлено: 12:30, 22-08-2010 | #35 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать try{ Form1->HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdHTTPProtocolException &se) { switch(se.ErrorCode) { case 200: //всё ок break; case 303: break; //редирект case 404: //404 not found break; } } catch(EIdSocketError &se){ MessageBox(0, se.Message.c_str(), 0, 0); } |
------- Отправлено: 15:08, 22-08-2010 | #36 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Ещё неучтённый нюанс, всплыл при тестировании, допустим результата проверки нет, вот, к примеру такая контрольная сумма
Если проверять на сайте, то адрес странички становится таким Добавляем в список для проверки и имитируем проверку Программа жёстко вылетает в ошибку и закрывается. Как с этим бороться? Хотелось бы так Цитата Drongo:
|
|
------- Отправлено: 17:11, 22-08-2010 | #37 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 18:37, 22-08-2010 | #38 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, В общем, всё отлично, только не пойму как в отдельный поток передавать список lHash с отобраными на проверку MD5
Цитата Drongo:
//добавляем новую функцию. Здесь и будет обращение к серверу DWORD WINAPI QueryThread(LPVOID lpParam) { TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); TStringList *lHash = new TStringList; lHash->Add("564dfacf47f4d215b76a5eb3770a83d4"); lHash->Add("0045BCBD3047391E47F3B56DC7C7F2F2"); lHash->Add("00636A27AF20104CC13E8DDE7DEE64E7"); lHash->Add("012995DAD105ACEFBF05591271CD2F54"); ... ... for(int i = 0; i < GlobalList->Count; i++){ // Здесь разная проверка отсеивания и в итоге присваивание MD5 суммы MD5 = GlobalList->Strings[i]; // Присваивание контрольной сумы от файла переменной. Можно и сразу в список, но пока так } lHash->Add(MD5); // Добавление контрольной суммы в список ... // В итоге после прохода списка GlobalList // список lHash будет содержать некое количество отобраных MD5 на проверку ... |
|
------- Отправлено: 20:03, 27-08-2010 | #39 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать HANDLE hThread; //тут подготавливаем lHash hThread = CreateThread(0, 0, QueryThread, lHash, 0, 0); //тут передаём его в поток if(hThread == INVALID_HANDLE_VALUE) { ShowMessage("Can't create thread"); return; } CloseHandle(hThread); |
------- Отправлено: 22:35, 27-08-2010 | #40 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|