Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как расчитать MD5 - хеш самого себя (Приложения) [D7, XP]


Страницы:   1 2 3

Дима ©   (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)

Возможно излишнее, но не бред :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо