Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 23:37   #1
Чёрный ветер
 
Регистрация: 22.11.2009
Сообщений: 9
По умолчанию Хэши MD5 и хэш секции кода С++

Прога ищет .ехе файлы во всех папках указаной директории, записывает в имена в тхт файл
Надо вычислитьтакже хэши МД5 и хэш секции найденых файлов и занести в базу к именам.
как?
Функция, а сам алгоритм вычисления крепица цппшкой в проект?
как параметры вычисления задавать?
ну и ваще чтонибудь про хэши.

код:
Цитата:
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>
#include <vector>
#include <string>
#include <shlwapi.h>

using namespace std;

typedef struct _BASE_RECORD
{
char szFileName[MAX_PATH];
char szHash[18];
char szCodeHash[18];
}BASE_RECORD,*PBASE_RECORD;

vector<string> vFiles;
vector<PBASE_RECORD> vRecords;

void FindMyFiles(char* pszDirName)
{
WIN32_FIND_DATA winFileData;
HANDLE hFile;
char buffer[MAX_PATH];
ZeroMemory(buffer, sizeof(buffer));
sprintf(buffer, "%s*.*", pszDirName);
hFile = FindFirstFile(buffer,&winFileData);
if (hFile!=INVALID_HANDLE_VALUE)
{
do
{
if ((lstrcmp(winFileData.cFileName,"." )!=0)&&(lstrcmp(winFileData.cFileNa me,"..")!=0))
{
if((winFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{

char buffer1[MAX_PATH];
ZeroMemory(buffer1, sizeof(buffer1));
lstrcat(buffer1, pszDirName);
lstrcat(buffer1, winFileData.cFileName);
lstrcat(buffer1, "\\");
FindMyFiles(buffer1);
}
else
{
if(strstr(winFileData.cFileName,".e xe"))
{
std::string str = winFileData.cFileName;
vFiles.push_back(str);
}
}
}
}
while (FindNextFile(hFile,&winFileData)!= 0);
FindClose(hFile);
}
}

PBASE_RECORD DoBuildRecord(const char *szFileName)
{
PBASE_RECORD pRecord = (PBASE_RECORD)HeapAlloc(GetProcessH eap(), 0, sizeof(BASE_RECORD));
ZeroMemory(pRecord, sizeof(BASE_RECORD));

for(int i=0; i<strlen(szFileName); i++)
{
pRecord->szFileName[i] = szFileName[i];
}

// посиск хэша pRecord->szHash = hash... ???
return pRecord;
}

void BuildBase()
{
for(vector<string>::iterator i=vFiles.begin();i!=vFiles.end(); i++)
{
PBASE_RECORD pRec = DoBuildRecord((*i).c_str());
vRecords.push_back(pRec);
}
}

void DumpBaseToFile(char * path)
{
ofstream out (path);
out << vFiles.size() << endl;
for(int i=0; i<vFiles.size(); i++)
{
out << vFiles.at(i) <<" "<< vRecords[i]->szFileName << endl;
}
}

int __cdecl main(void)
{
FindMyFiles("C:\\Program Files\\Avira\\");
BuildBase();
DumpBaseToFile("c:\\mybase.txt");
// system("PAUSE");
return(0);
}
Чёрный ветер вне форума Ответить с цитированием
Старый 20.11.2011, 01:12   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А в чем проблема?
Подсчет md5-хеша можно взять из openssl, или crypto++, или свою реализацию написать, если лень тянуть сторонние зависимости. Алгоритм прекрасно описан на википедии.
А потом - открываешь файл, читаешь его кусками и скармливаешь их хеш-функции.

Потом находишь границы секции кода (смотришь поля в pe-заголовке), и считаешь так же для нее отдельно.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различие MD5 Delphi и MD5 PHP Viteef Общие вопросы Delphi 14 09.02.2011 11:53
хэш-функция N-хэш Temka Общие вопросы Delphi 1 29.11.2010 21:11
Строку в MD5-hash если Строка является MD5-хешем... Человек_Борща Общие вопросы Delphi 0 13.04.2010 15:27
PHP MD5 и Delphi/C/C++ MD5 в чем отличие? Человек_Борща Общие вопросы Delphi 1 05.04.2010 20:18
Секции russian-stalker Общие вопросы Delphi 5 06.09.2008 20:25