QIP Infium удивляет

На днях таки решил разобрать новый алгоритм шифрования паролей, используемый в последних версиях QIP Infium (начиная с 9042?), там оказалось все очень просто – обычный Rijndael. Но вот что удивило, я, конечно, не такой уж профи в программировании, но вот скажите, зачем так извращаться? Профиль (ххх.qip) имеет определенную структуру, первые 25 байт хранят сигнатуру, размер и md5 хэш этого профиля. MD5 хэш хранится в бинарном виде (16 байт), при открытии профиля, он проверяется на валидность путем подсчета md5 суммы, которая потом сравнивается с эталонной (записанной в первых 25 байтах). Вот листинг сего кода, правда, без комментариев, извиняйте:

0076AA7F	MOV EDX,10
0076AA84	CALL GetHash_1_from_pMapProfile
0076AA89	MOV EAX,DWORD PTR SS:[EBP-24]
0076AA8C	LEA ECX,[EBP-14]
0076AA8F	XOR EDX,EDX
0076AA91	CALL Get_string_md5_Hash_1
0076AA96	LEA ECX,[EBP-38]
0076AA99	MOV EDX,DWORD PTR SS:[EBP-4]
0076AA9C	MOV EAX,DWORD PTR SS:[EBP-8]
0076AA9F	CALL Get_validate_md5_Profile
0076AAA4	LEA EAX,[EBP-38]
0076AAA7	LEA EDX,[EBP-28]
0076AAAA	CALL BinToHex
0076AAAF	MOV EAX,DWORD PTR SS:[EBP-28]
0076AAB2	LEA EDX,[EBP-18]
0076AAB5	CALL UpperCase
0076AABA	MOV EAX,DWORD PTR SS:[EBP-14]
0076AABD	MOV EDX,DWORD PTR SS:[EBP-18]
0076AAC0	CALL LStrCmp

А вот теперь объясните, зачем сохраненный md5 извлекать, потом переводить в текстовый вид (32 символа), подсчитать для профиля его действительный md5, опять таки перевести его в строку, перевести символы в верхний регистр, и кульминация сиих действий – сравнить две этих строчки не сходятся ли они? Нельзя что ли просто сравнить 16 байт данных простой функцией:

CompareMem(hash1, hash2, 16);

В общем, как-то печально стало после увиденного…


Комментарии

  1. Летучая Мышшшь · 19 Апрель 2011, 13:26 · #

    а ты напиши разработчикам то))))

  2. Владимир · 8 Май 2011, 13:54 · #

    Пока не собираетесь выкладывать софтинку под qip infium 9042?

  3. alexey-m · 8 Май 2011, 17:56 · #

    Владимир, возможно в скором будующем выпущу апдейт, сейчас нет пока времени…