(C) Сергей Сединкин 1997 г. Львов

Всем любителям использовать Diskreet посвящается...

Экскурс в историю:

Я не помню, когда появился впервые пакет Norton Utility for DOS, но, по-моему, программа Diskreet там была с тех же пор. Эта программа позволяет скрывать информацию на магнитных носителях компьютера от посторонних глаз. Делается это путем полного шифрования этой информации. Операция зашифрования может проводиться как над файлами, так и над логическими дисками. Во втором случае на некотором диске (носителе) создается файл с расширением @#!, в котором и храниться вся информация, записываемая на закрываемый логический диск, в зашифрованном виде. Подключение этого файла (превращение его в логический диск) осуществляет драйвер diskreet.sys при загрузке компьютера. Несанкционировано вторгшийся пользователь может только удалить этот файл, но не прочитать то, что в него записывалось.
Diskreet предоставляет пользователям выбор - шифровать с помощью Fast Proprietary Method, но побыстрее или с помощью DES, но помедленнее. Если на зашифровании отдельных файлов это не особенно заметно, то при создании дисков со скоростью работы уже приходится считаться. Именно поэтому многие предпочитают диски шифровать быстрым методом.

Теперь о том, что там внутри (и о соответствии стандартам):

В любом случае, введенный Вами пароль превращается в 8 байт, которые передаются в процедуру формирования ключей алгоритма DES. По мнению некоторых зарубежных специалистов (о них я скажу позже) - процедура получения этих 8 байт очень и очень дырява. Дело в том, что пароль преобразуется в UPPERCASE (в большие буквы), нарезается на 8-байтовые куски, все куски выписываются в столбик друг под другом и над этим всем проделывается побитовый XOR. Кроме того, т.к. в DES длина ключа 56 бит, а не 64, то нужно еще и 8 бит отбросить. Почему-то авторы решили, что эту операцию лучше всего проделать над младшими битами в каждом байте (хотя разумнее было это делать над старшими битами). Так что, если у Вас в пароле есть, например, буква "t", то можете смело вместо нее использовать "u", вместо "x" - "y" и т.д.
Значит, если Вы англичанин или не знаете этой специфики, то перебрать 13 в восьмой степени вариантов будет почти достаточно для вскрытия Вашего пароля (да, я знаю, что можно и еще кое-какие символы использовать, кроме букв, но все равно, это не много). Но у нас как всегда своя специфика. Мы ведь можем пароль писать и русскими буквами. А выполнение XOR над UPPER латинскими и любыми русскими буквами может дать вообще все, что угодно. Я не проводил изыскания на тему, можно ли получить любую комбинацию из 56 бит, задавая набираемый на клавиатуре пароль Diskreet-у, но то что это почти так, сомнений не вызывает. Ну а перебор 2 в 56 степени вариантов пока еще не очень легкая задача для современной техники.
Поехали дальше.
Полученые 56 бит переставляются местами, правда не как в DES - там еще какие-то байты перепутываются.
И из полученного, путем сдвигов (это как в DES - {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}) и выходных перестановок (опять не таких, как в DES) получается 16 (по одному на такт) 64-битовых ключа. Это все занимает 128 байт. Вполне возможно, что они и используются как ключи для каждого такта DES, если Вы этот метод защиты и выбрали (это я еще не проверял).
Ну а если нет - сами виноваты! Diskreet даже не утруждает себя выполнением хоть одного такта DES при шифровании Fast Proprietary методом. Только в заголовке диска он что-то все равно с помощью DES шифрует. А так - просто эти 128 байт плюс еще 128 байт, полученные тем же способом, только схема формирования ключей переключяется в этом случае в режим расшифрования, т.е. всего 256 байт  используются как гамма, накладываемая на шифруемый текст путем сложения по словам (16 бит , т.е. по модулю 2 в 16 степени). (Там еще сложение на i-м такте происходит с результатом работы (i-1)-го такта, но это задачу вскрытия не усложняет).
Итак, для Fast Proprietary метода:
Мы имеем не только короткую гамму (256 байт), но и совершенно не случайную. Так что, зная хоть какие-то участки того, что зашифровывалось, можно восстановить пароль, даже не прибегая к методам статистического анализа! Ну а авторы Diskreet-а о нас позаботились - в зашифрованом файле первые 48 байт - это заголовок :-).
Посмотреть этот заголовок очень просто. Возьмите в зашифрованном файле байты с 0x10 по 0x40 и запишите, начиная со смещения 0x110 (это начало участка, на котором гамма повторяется - она в пределах одного сектора два раза используется). А теперь просто расшифруйте файл Diskreet-ом. По смещению 0x100 и будет расшифрованый заголовок. В этом заголовке первые 16 байт - заранее определенная последовательность, по которой Diskreet определяет правильность пароля (кстати, почти для всех паролей есть другие такие, правильность которых Diskreet определяет, но при расшифровании ими, выдает в результате какой-то мусор - т.е. этих 16 байт не достаточно, чтобы Diskreet смог понять, верный ли введен пароль). Но для вычисления пароля можно использовать и еще кое-какие байты заголовка, например последние 6 байт - всегда 0. А еще там хранится имя файла, дата и время создания, атрибуты.
Есть еще один нюанс. Если файл по длине не кратен количеству байт на сектор, то его хвост дополняется нулями, что может дать возможность извлечь всю гамму целиком из хвоста файла. Но здесь разные версии Diskreet поступают по-разному. Я не исследовал самую последнюю, но из тех, что у меня были (6.01, 8.0.20) первая проявила себя с лучшей стороны. Восьмая версия почему-то дополняла файлы нулями до 32К - кратной длины. Редко длина шифруемого файла такова, что туда дописывается меньше, чем 256 нулевых байт, а это дает возможность извлечь из хвоста файла сразу всю гамму. А по извлеченной гамме пароль восстанавливается очень легко - гамма в этом случае ведь по сути - только перестановки бит исходного пароля (на длине в 64 бита, т.е. 8 байт - а таких групп у нас 128/8 = 16).
Теперь, что касается шифрования дисков с помощью Fast Proprietary метода:
Первые 0x800 занимает заголовок, в котором находится непонятный мне мусор. Видимо, он используется Diskreet-ом для всевозможных проверок. Если кто-нибудь знает, что там находится, буду очень благодарен, если и мне расскажет. Со смещения 0x800 находится самый настоящий BOOT-сектор, не зашифрованый, который описывает параметры логического диска. Потом находится FAT - столько копий и такой длины, как описано в BOOT-секторе. И тоже не зашифрованый. А дальше, начиная с корневого директория, весь диск шифруется. Шифруется тем же методом, что и при шифровании файлов, вот только гамма берется не непосредственно из набора тактовых ключей, а по результатам работы некоего алгоритма, использующего эти ключи. Идентичность этого алгоритма и DES я пока не установил, - вроде и без этого диски вскрываются.
Для вскрытия я нахожу гамму и с помощью нее раскодирую содержимое диска. Пароль при этом восстановить не пытаюсь.
Это уже совсем не та гамма, что используется при шифровании файлов, по-этому я пока не придумал, как по ней можно восстановить пароль.

Ну вот и все.

Кусочки кода (описывающие работу Diskreet):

Преобразование ключа.
for ( i=0 ; i < strlen ( password ) ; i++ )
         buffer [ i % 8 ] ^= password [ i ];

Шифрование одного сектора с номером sectorNo.
Все операции проводятся над двухбайтовыми данными
( short data[256]; short  gamma[128]; )

data[-1] = 0x1234;    /* Для шифрования файлов. */
                                    /* При шифровании дисков эта константа находится по смещению 0x21 с начала файла */
index = gamma [ sectorNo % 128 ] % 128;
for ( i=0 ; i<256 ; i++ ) {     /* Этот цикл обрабатывает данные в одном секторе  */
    value = gamma [ index++ ] + data [ i ];
    byteSwap ( value );            /*     asm    xchg    ah,    al    */
    value ^= data [ i-1 ];
    data [ i ] = value;
    index %= 128;
}

Заголовок, записываемый в начало файла, перед его зашифрованием:
char    header[16] = "ABCDEFGHENRIXYZ";
char    fileName[13];       /* Сюда ставится и точка между именем и расширением, и \0 в конце */
long    fileDate;
char    fileAttributes;
long    fileSize;
long    fileDataStart;
char    zero[6] = "\0\0\0\0\0\0";

Из этих фрагментов легко видеть, что получить   gamma [ i ] + data [ i ]  очень просто.
Нужно только в пределах сектора провести XOR:  data [ i ] ^ data [ i - 1 ], где data [ - 1 ] = 0x1234;
При известных исходных данных (например последний сектор из 0 или, что известно наверняка: в начале - "ABCDEFGHENRIXYZ\0" и еще 6 нулей в конце заголовка) можно вычислить полностью или частично значения gamma. После этого мы не будем знать только, начиная с какого места расположены эти значения в настоящей гамме. Но для определения этого можно организовать перебор по всем 128 позициям (index = gamma [ 0  % 128 ] % 128) и отбраковку вариантов, для которых не существует ключей, создающих этот участок гаммы.

Если кто-то решится на создание программки, вскрывающей файлы, зашифрованные с помощью Fast Proprietary метода, то по коду Diskreet ему все равно по-ползать прийдется, т.к. там не стандартный DES используется, а чуть-чуть измененный.

Ну вот и все.



Особую благодарность хочу выразить Пете Гутману (Peter Gutmann). Именно его статья, найденная на каком-то сервере и вдохновила меня на изучение Diskreet - говорилось там, что все это просто... Еще я прочитал статью, написаную Paul Carl Kocher.
Однако, кроме этого, в Internet мне не удалось найти ни одного кракера этого самого Diskreet. (Может искал плохо?)
Нашел только  Сервер фирмы AccessData , на котором можно (за деньги) вспомнить забытый пароль от того, что зашифровано Diskreet.
Деньги на это тратить не хотелось, а пароли ведь забываются :-) ...

В скором времени я планирую запустить по адресу  diskreet@srg.cscd.lviv.ua робота, которому можно будет слать заголовки файлов и дисков, от которых Вам удалось забыть пароль (конечно, если они зашифрованы быстрым методом), а в ответ Вы будете получать либо пароль, если это файл, либо программку-ковырялку, если это диск.

Достаточно присылать первые 64 байта файла. Для диска же вопрос длины сложнее решается, но 100Кб должно хватить.

ПОКА ЭТОТ СЕРВИС ЕСЛИ И РАБОТАЕТ, ТО ТОЛЬКО В РУЧНОМ РЕЖИМЕ И, ЖЕЛАТЕЛЬНО, ДИСКИ НЕ ПРИСЫЛАТЬ - ПОКА ТОЛЬКО ФАЙЛЫ!


FindWhat.com

PS. Да, еще пара слов про то, вскрываема ли защита с помощью DES из Diskreet. В принципе это вполне возможно, если учитывать, что пароль набран латинскими буквами или использовать еще какие-либо ограничения. Сами знаете, как работают кракеры UNIX-паролей.
Но мне (пока) этим заниматься не охота...
Можно еще и для начального значения 0x1234 понаделать базу с уже готовыми шифроваными заголовками (это для шифрования файлов) потом просто искать совпадающий с тем, что надо вскрыть. Может быть, скоро сделаю...


Вернуться главную страничку


a better search result 85 x 25 v2 Banner 10000005

Banner 10000035

Hosted by uCoz