![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как расчитать MD5 - хеш самого себя (Приложения) [D7, XP]
Дима © (2008-07-22 20:44:00)Привет Уважаемые!
Есть консольное приложение, в нем использую функцию по расчету MD5:
function md5(s: string): string;
...
Использую так:
var
FileName: String;
...
Constr
Fnam: 'MyApp.exe';
...
FileName := Md5(ChangeFileExt(ExtractFileName(Fnam), ''));
Но это же расчет MD5 Имени файла а не самого приложения!
Как мне реализовать сей Сабж?
С Уважением Дима.
Anatoly Podgoretsky (2008-07-23 18:49:00) [1]> Дима (23.07.2008 18:09:46) [46]
Значит 99% за реализацию на CRC и 1 за MD5
Медвежонок Пятачок (2008-07-23 18:42:00) [2]Вот пример использования.
Только подставить id нужного алгоритма.
function CalculateHash(const AFileName : string; AlgID : Cardinal; var AData : Pointer; var ADataSize : Cardinal) : boolean;
var pBuff : Pointer; aBuffLen,ReadCount : Cardinal; fStream : TFileStream;
hProv : HCRYPTPROV; hHash : HCRYPTHASH;
begin
Result := False; pBuff := nil; fStream := nil;
if FileExists(AFileName) then
begin
if CryptAcquireContext(@hProv,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT) then
begin
if CryptCreateHash(hProv,AlgID,0,0,@hHash) then
try
fStream := TFileStream.Create(AFileName,fmOpenRead or fmShareDenyNone);
if fStream.Size >= BUFF_SIZE then aBuffLen := BUFF_SIZE else aBuffLen := fStream.Size;
GetMem(pBuff,aBuffLen);
repeat
ReadCount := Min(aBuffLen,fStream.Size - fStream.Position);
if ReadCount > 0 then
begin
fStream.ReadBuffer(pBuff^,ReadCount);
Result := CryptHashData(hHash,pBuff,ReadCount,0);
if not Result then Break;
end
else
Break;
until ReadCount <= 0;
if Result then
begin
if CryptGetHashParam(hHash,HP_HASHVAL,nil,@ADataSize,0) then
begin
GetMem(AData,ADataSize);
Result := CryptGetHashParam(hHash,HP_HASHVAL,AData,@ADataSize,0);
end;
end;
finally
if Assigned(pBuff) then FreeMem(pBuff,aBuffLen);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv,0);
fStream.Free;
end;
end;
end;
end;
Дима (2008-07-23 18:31:00) [3]
> Медвежонок Пятачок © (23.07.08 18:20) [49]
>
> А поможет?
А по чему бы и нет? Что, все так безнадежно?
Я думаю Гуру ты или "Чайнег" - а тягу к самообразованию, еще не кто не отменял!
+ Спросить всегда не зазорно было, плохо тупить в гордом одиночестве и прожить пусто но как Гуру-одиночка. ИМХО!
Дима (2008-07-23 18:20:00) [4]
> User (23.07.08 10:15) [31]
Ее роднуюи применил. Не ту что в горячке привел в начальных постах!
Медвежонок Пятачок (2008-07-23 18:20:00) [5]А по подробнее?
А поможет?
function CryptAcquireContext ;external ADVAPI32 name 'CryptAcquireContextA'
function CryptReleaseContext ;external ADVAPI32 name 'CryptReleaseContext';
function CryptGetHashParam ;external ADVAPI32 name 'CryptGetHashParam';
function CryptCreateHash ;external ADVAPI32 name 'CryptCreateHash';
function CryptHashData ;external ADVAPI32 name 'CryptHashData';
function CryptDestroyHash ;external ADVAPI32 name 'CryptDestroyHash';
Дима (2008-07-23 18:16:00) [6]
> Медвежонок Пятачок © (23.07.08 18:13) [47]
А по подробнее?
Медвежонок Пятачок (2008-07-23 18:13:00) [7]импортировать 6 функций из advapi32 и хеш у тебя в кармане
Дима (2008-07-23 18:09:00) [8]
> Я скажу как вычислить md5 хешь файла, но сперва скажите
> где Вы его собрались хранить?
В ini-файле и храню и CRC32 тоже + (есть кое какие наметки) + соответствующая запись (Зашифрованная и в ini тоже) в Лог-файле! ИМХО- так соблаговолила моя душа :) Это все полемика, важна реализация не кривая а Корректная и правильная!
> Anatoly Podgoretsky © (23.07.08 11:40) [43]
> И я на 100% уверен, что поделка автора никому не интересна,
> кроме самого автора.
Огульно! 99% нет не нужна не кому, но всеже 1% за мной и пользователями а это хоть какой но аргумент!
Dennis I. Komarov (2008-07-23 12:16:00) [9]> [44] User (23.07.08 12:08)
Это вопрос вышел...
User (2008-07-23 12:08:00) [10]> Кроме того кроме подделки CRC придется еще и длину подделывать
- не обязательно, тк в файле (исполняемом) имеется уйма места, куда никакие указатели не ссылаются, к тому же имеется выравнивание секций и т.п. (для любителе ужастиков - данные материалы освещает http://www.wasm.ruи др. аналогичные), нолики заменяются на символы = CRC сошлась ...
> А откусывать защиту, что для CRC8, что MD5 одинакова- если CRC8 или MD5 хранить отдельно от файла - нечего будет кусать: проверил контрольную сумму, сравнил с оригиналом КС - делаешь выводы об идентичности ...
ЗЫ: полемика вышла за рамки постановки вопроса ;-)
Anatoly Podgoretsky (2008-07-23 11:40:00) [11]> User (23.07.2008 10:46:39) [39]
Страшилки оставь в покое, зачем пытаться ломать CRC когда проще откусить защиту. Кроме того кроме подделки CRC придется еще и длину подделывать, да и мало ли что еще. И я на 100% уверен, что поделка автора никому не интересна, кроме самого автора.
А откусывать защиту, что для CRC8, что MD5 одинакова. Был бы интерес.
Ega23 (2008-07-23 11:24:00) [12]
> > где Вы его собрались хранить?
>
> мне тоже любопытно
>
В ini-файле, где же ещё... :)))
McSimm (2008-07-23 11:23:00) [13]
> где Вы его собрались хранить?
мне тоже любопытно
Ega23 (2008-07-23 10:53:00) [14]
> Как подделывают CRC16/32
А ты его через RSA закрой, а юзеру - только публичный ключ выдавай. :)
User (2008-07-23 10:46:00) [15]> Надежность для заявленой темы не нужна.- откуда мы знаем, для чего задающему вопрос нужен ответ? ...
> Надежности даже CRC16, или CheckSum32/64 с избытком/
http://www.insidepro.com/kk/118/118r.shtml- Как подделывают CRC16/32
Anatoly Podgoretsky (2008-07-23 10:42:00) [16]> User (23.07.2008 10:29:36) [36]
Надежность для заявленой темы не нужна. Надежности даже CRC16, или CheckSum32/64 с избытком/
Anatoly Podgoretsky (2008-07-23 10:41:00) [17]> Dennis I. Komarov (23.07.2008 10:18:34) [34]
Пока не озвучены другие критерии, то бред. Тут даже простой контрольной суммы хватило бы.
User (2008-07-23 10:29:00) [18]MD5 вроде надежнее: http://www.insidepro.com/kk/163/163r.shtml- Обходи мента сзади, а Patch-Guard - спереди , хотя и долгий, на мелких файлых работа незаметна, на тяжеловесных ощутимо (пробовал pagefile.sys 1 Gb -около минуты считал) ...
Ega23 (2008-07-23 10:21:00) [19]
> Возможно излишнее, но не бред :)
Да бред. Это всё равно что пассатижи в качестве маникюрных щипчиков использовать.
Dennis I. Komarov (2008-07-23 10:18:00) [20]> [32] Anatoly Podgoretsky © (23.07.08 10:15)
Возможно излишнее, но не бред :)