"Алекс Федченко. Описание механизма функционирования парольных кэшей Windows v4.xx" - читать интересную книгу автора

while (datalen--) { p2+=x->body[++p1];
t=x->body[p1]; x->body[p1]=x->body[p2]; x->body[p2]=t;
t+=x->body[p1]; *((byte*)data)++^=x->body[t];
}; x->c1=p1; x->c2=p2;
}

RC4_table инкапсулирует в себя все данные необходимые для выполнения
шифрования (все поля и процедуры получены в результате анализа кода
MSPWL32.dll, стандарт я в руках не держал). init_RC4_table() осуществляет
первичную настройку таблицы по ключу key, а use_RC4_table выполняет наложение
получающейся гаммы на поток данных data длинной datalen. Hадеюсь, что все
вышеприведенное прозрачно, поэтому перейдем к MD5. Выполнение одного этапа
свертки выполняется следующей функцией:

MD5_FF 1,2,3,4, 0, 0D76AA478h, 7 ; Round 1
MD5_FF 4,1,2,3, 1, 0E8C7B756h, 12
MD5_FF 3,4,1,2, 2, 0242070DBh, 17
MD5_FF 2,3,4,1, 3, 0C1BDCEEEh, 22
MD5_FF 1,2,3,4, 4, 0F57C0FAFh, 7
MD5_FF 4,1,2,3, 5, 04787C62Ah, 12
MD5_FF 3,4,1,2, 6, 0A8304613h, 17
MD5_FF 2,3,4,1, 7, 0FD469501h, 22
MD5_FF 1,2,3,4, 8, 0698098D8h, 7
MD5_FF 4,1,2,3, 9, 08B44F7AFh, 12
MD5_FF 3,4,1,2, 10, 0FFFF5BB1h, 17
MD5_FF 2,3,4,1, 11, 0895CD7BEh, 22
MD5_FF 1,2,3,4, 12, 06B901122h, 7
MD5_FF 4,1,2,3, 13, 0FD987193h, 12
MD5_FF 3,4,1,2, 14, 0A679438Eh, 17
MD5_FF 2,3,4,1, 15, 049B40821h, 22

MD5_GG 1,2,3,4, 1, 0F61E2562h, 5 ; Round 2
MD5_GG 4,1,2,3, 6, 0C040B340h, 9
MD5_GG 3,4,1,2, 11, 0265E5A51h, 14
MD5_GG 2,3,4,1, 0, 0E9B6C7AAh, 20
MD5_GG 1,2,3,4, 5, 0D62F105Dh, 5
MD5_GG 4,1,2,3, 10, 002441453h, 9
MD5_GG 3,4,1,2, 15, 0D8A1E681h, 14
MD5_GG 2,3,4,1, 4, 0E7D3FBC8h, 20
MD5_GG 1,2,3,4, 9, 021E1CDE6h, 5
MD5_GG 4,1,2,3, 14, 0C33707D6h, 9
MD5_GG 3,4,1,2, 3, 0F4D50D87h, 14
MD5_GG 2,3,4,1, 8, 0455A14EDh, 20
MD5_GG 1,2,3,4, 13, 0A9E3E905h, 5
MD5_GG 4,1,2,3, 2, 0FCEFA3F8h, 9
MD5_GG 3,4,1,2, 7, 0676F02D9h, 14
MD5_GG 2,3,4,1, 12, 08D2A4C8Ah, 20

MD5_HH 1,2,3,4, 5, 0FFFA3942h, 4 ; Round 3
MD5_HH 4,1,2,3, 8, 08771F681h, 11