"Алекс Федченко. Описание механизма функционирования парольных кэшей Windows v4.xx" - читать интересную книгу авторапереборщика показала, что скорость снизилась в 2 раза, по сравнению с
вариантом из Windows v4.0 (38 тыс. pps против 55 тыс. pps) Исправлены также недостатки малой длинны свертки пароля и тривиальная зависимость свертки от пароля. Хочется отметить такой факт, что поля ввода в диалогах позволяют ввести пароль максимально до 14 символов и преобразуют его к верхнему регистру (справедливо для версий Windows v4.0-4.0.1111). Это существенно сокращает пространство для перебора. А как с одиноковой гаммой для каждого ресурсного ка- нала? Теперь, при создании ключа для шифрования, используют поля CryptoSeed[i], причем пропускание этой информации сквозь MD5 не позволяет говорить о прямой реконструкции гаммы даже при знании некоторых ресурсов. [3] Дополнения и изменения в операционной системе Windows v4.1 (a.k.a. 98) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Их очень немного, прежде всего, сняли ограничения с полей ввода в диалоговых окнах (теперь можно ввести свыше сотни символов в имя пользователя и в пароль). Так же, при логине имя пользователя выбирается из списка, что позволяет достаточно просто использовать длинные имена пользователей (что очень замедляет перебор). Жаль, но пароль из списка выбирать нельзя ;-) Вот и все, форматы файлов изменений не претерпели. Была дополнительно переписана MSPWL32.dll, конечно же она стала в 2 раза больше объемом (такое ощущение, что мировые производители винчестеров - одно из подразделений фирмы Micro$oft). Больше назвать нечего. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Здесь я бы хотел рассмотреть особенности использованных алгоритмов: RC4 и MD5, а так же кое что из Windows v4.x Hачнем с RC4. typedef struct { /* main cryptotable */ byte body[0x100]; /* data table itself */ byte c1,c2; /* crypto pointers into data table */ dword keylen; /* len of key */ void* key; /* key for table building */ } RC4_table; void init_RC4_table(RC4_table* x) { /* initializing cryptotable */ int i,p,t,tt; x->c1=0,x->c2=0; for (i=0;i<=255;x->body[i]=i,i++); t=0; for (i=0,p=0;i<=255;i++,p=i & 0x0F) { t+=x->key[p]+x->body[i]; t&=0xFF; tt=x->body[i]; x->body[i]=x->body[t]; x->body[t]=tt; } } void use_RC4_table(xor_table* x, void* data, word datalen) { byte p1,p2,t; /* en/decrypting the data via cryptotable */ p1=x->c1; p2=x->c2; |
|
|