Вернуться Форум Bashtel.RU > Разное > Компьютеры > Программирование
Ответ
 
Опции темы Опции просмотра

кто поможет с курсовой с курсовой!? С++ WINAPI
Старый 16.12.2011, 15:15   #1
Мимо проходил
 
trafalgar_law вне форума
Регистрация: 16.12.2011
Сообщений: 2
Восклицание кто поможет с курсовой с курсовой!? С++ WINAPI

курсовая - Разработка простейшего антивируса...собственно оно только так называется.

Задача состоит в написании утилиты являющей собой сканер(якобы вирусов)
необходимо Создать базу сигнатур состоящую из имени файла и хэша Md5

и собственно сканер открытие файла хэширование и сверка с базой сигнатур...

Хэширование осуществляется с помощью cryptoapi #include <Wincrypt.h>

Собственно я написал создание базы и внесение в неё имен файлов из указаной директории, на хэшах запнулсяи усё.
В принципе работы не много осталось просто мало времени до сдачи осталось да и времени сидеть нету практически. Осталось Вставить хэширование в прогу и выведение хэшей в базу сигнатур. и сканер.

Хелп ми, в долгу не останусь, а если б у кого нашлось время вместе посилдеть по разбираца я бы был оч признателен!!!
  Ответить с цитированием
 

Старый 16.12.2011, 18:19   #2
Задрот форума
 
Аватар для Soul Reaver
 
Soul Reaver вне форума
Регистрация: 21.03.2007
Адрес: Салават
Сообщений: 4,626
По умолчанию

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

А вообще наверняка в Wincrypt.h есть какая нибудь функция для определения MD5 файла, в плюсы сто лет не совался - смотреть не хочу, но не думаю что там что-то очень сложное.

http://citforum.ru/security/articles/defense/

Тут есть пример для Delphi, но учитывая что это WinAPI не думаю что переписать под C++ проблема. Даже вот код имеется:

http://citforum.ru/security/articles...ense/list3.htm
__________________
----------------------------------------------------------------------

Блог на Habrahabr.ru.

Последний раз редактировалось Soul Reaver; 16.12.2011 в 18:22..
  Ответить с цитированием
 

Старый 16.12.2011, 22:10   #3
Мимо проходил
 
trafalgar_law вне форума
Регистрация: 16.12.2011
Сообщений: 2
По умолчанию

ну как бу да немножко обсурдно, но какоето подобие сканера.
В базе сигнатуры тока ехе файлов.
В Криптоапи есть 5 функций для вычисления хэша.
CryptAcquireContext - инициализация работы криптоапи
CryptCreateHash -инициализация хэширования данных
CryptHashData - вычисление хэша
CryptGetHashParam - получение значения хэша
CryptDestroyHash - освобождение дескриптора, возвращенного из
CryptCreateHash

я так то разабрался много в чём, просто не программист я, программирование было 2 года назад.
Тут с этим хэшем хожу уже 2 недели не могу ничё нормального состряпать(дабы работала даная библиотека <wincrypt.h> необходима удобоваримая Sdk, так как в начале работал на vc6 ничё не пёрло, затем поставил вс ультимейт, ща вродь ошибок не пишет на функции,но в этих функциях изрядно параметров которые влёгыч непонятны)
я конечно день ото дня сижу разбираюсь, но при неизбежно кончающемся срроке сдачи начал отчаиваться(
Код:
#include <iostream.h>
#include <windows.h>
#include <vector>
#include <string>

std::vector<std::string> vFiles;

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



void FindMyFiles(char* pszDirName)
{
            WIN32_FIND_DATA winFileData;
            HANDLE hFile;
            char buffer[MAX_PATH];
			ZeroMemory(buffer, sizeof(buffer));
			stprintf(buffer, "%s\\*.exe");

			hFile = FindFirstFile(buffer,&winFileData);
			if (hFile!=INVALID_HANDLE_VALUE)
			{
			   do
			   {
				  if ((!lstrcmp(winFileData.cFileName,".")!=0)&&(!lstrcmp(winFileData.cFileName,".")!=0))
				  {
					  if(IsDir(winFileData.cFileName))
					  {
						  FindMyFiles(winFileData.cFileName)
					  }else
					  {
							  std::string str = winFileData.cFileName;
							  vFiles.push_back(str);
					}
				  }
			   }
			   while (FindNextFile(hFile,&winFileData)!=0);
			   FindClose(hFile);
			}
}

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

	strcpy(szFileName, pRecord->szFileName);

}

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

int __cdecl main(void)
{
	FindMyFiles("c:\\");
	BuildBase();
	DumpBaseToFile("c:\mybase.data");
	return(0);
}
Собственно код - поиск всех exe в задано дириктории, создание структуры тобишь базы ну и вот сюда надо присунуть вычисление хэша и запихивание его в ту же бызу

ну и сканер= > открытие файла-> хэширование->сравнивание имени и хэша с базой.
Причём, хэш должен быть вычислен от содержимого файла, что есть побайтовое занесение в буфер и хэширование, естественно всё это в цикле!
Хелп.

Добавлено через 50 минут
Вот дапустим пишу вычисление хэша,сразу конечноне стал в основной код впихивать, решил начать со Сканера так будет проще наверн.

Код:
#include "stdafx.h"
#pragma comment(lib, "crypt32.lib")

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>


int main()
{
	char buffer[MAX_PATH];
	ZeroMemory(buffer, sizeof(buffer));
	HANDLE hFile;
	hFile = CreateFileW(TEXT("c:\\Porshe.exe"), GENERIC_READ|GENERIC_WRITE , 0,NULL, OPEN_EXISTING,0,NULL);
    HCRYPTPROV hProv;
	HCRYPTHASH hHash;
	DWORD dwBufferSize;
	DWORD dwBufferlen;
    DWORD dwValue;
    PBYTE pBuffer;

	pBuffer=hFile;


	if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
	{
		
		if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
		{
		
			if (CryptHashData(hHash, pBuffer, dwBufferlen, 0))
				
			{
				
				dwBufferSize = sizeof(DWORD);
				if (CryptGetHashParam(hHash, HP_HASHSIZE, &dwValue, &dwBufferSize, 0))
				
			}
		}
	}
	
}
вот у меня есть ехе файл как его в буфер сунуть чтоб потом прохешить, чёт не получается. функция хэширования работает с буфером!

Последний раз редактировалось trafalgar_law; 16.12.2011 в 23:01.. Причина: Добавлено сообщение
  Ответить с цитированием
 
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу кто поможет в трудоустройтве Mak_s Флейм 0 16.06.2011 09:32
Может кто поможет? a.l.l.i Библиотека 2 18.07.2008 22:52
Кто поможет? NightStalkeR Общение 0 14.04.2008 14:44
Indy, WinAPI для Delphi Rondo Библиотека 4 20.08.2006 14:53



Текущее время: 11:55. Часовой пояс GMT +3.


vBulletin skin developed by: eXtremepixels
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
top of page