| div.main {margin-left: 20pt; margin-right: 20pt}Как я ломал The Bat!, или пароли вампира. Автор:Vovan aka L0ki (loki@infantry.com) ICQ: 59946949 
             После огромного количества хвалебных статей "о лучшем мэйлере 
            всех времен и народов" во всевозможных изданиях я набрал пару ведер 
            увесистых булыжников и буду бомбить ими загаженный летучими мышами 
            огород RIT Labs. И пусть не обижаются. В любой бочке меда обязана 
            быть одна (но большая) ложка г... эээ-э-э, дегтя. Пролог Ты не задумывался: сколько людей пользуются The Bat!-ом? (Вся 
            редакция Х юзает только The Bat! - прим. ред.) Сколько народу 
            скачивает его с ritlabs.com и громко вопит в fido7.ru.crack: "Дайте 
            мне кряк к Бату!", создают трафик astalavista.box.sk и других 
            поисковых машин? Много! По словам SideX`а, их добрая треть, а то и половина 
            читателей Х. Удобная вещь: быстро бегает, места мало занимает, 
            наворотов и прибамбасов немеряно. А у тебя, случаем, не Бэт мэйлером 
            работает? И о чем в нем пишешь? А переписочку где хранишь? Где 
            обычно? И не боишься? А-а-а, пароль поставил! Ну, погоди, погоди... 
            Проверим, как ты умеешь хранить тайны... А началось все с мелочи. Решил как-то разок проверить: можно ли 
            Бату доверять на хранение духовные ценности (CityCat'овский 
            eat.dodbar). Поставил пароль. Дай, думаю, посмотрю: а чего он там 
            делает-то с паролем? Посмотрел. Не прошло и пяти минут, как была 
            написана программка (простейшая, на Паскале), показывающая пароль 
            любого запароленного ящика. Но обо всем по порядку. Итак, слово обвиняемому - Бату Вампировичу: "Работая с The Bat!, Вы можете закрыть ваш почтовый ящик паролем, 
            так что никто не сможет прочитать Ваши письма без Вашего 
            разрешения". Ну да! Так уж и никто! Разрешения еще спрашивать! Надрежем лобовую кость... Напомню, что все письма Bat! хранит в файлах, (он их называет 
            базами писем) с расширением .MSB. С них-то я и начал. Сохраняю один 
            из них (ну, например, Inboxmessages.msb) без пароля на ящике с 
            именем ORIG.MSB, потом установил пароль на ящик (его можно было даже 
            не запоминать - настолько нетрудно оказалось его оттуда достать) и 
            сохранил этот же файл с именем CRYPT.MSB. Сравниваю зашифрованный и незашифрованный .MSB-файл, зорким оком 
            замечаю такие вещи: 1) размер файла не изменился (хороший признак, однако); 2) изменился кусок в заголовке файла (а что же там лежит?); 3) зашифрованное тело письма (а какой смысл хакать пустой 
            файл?). При этом последовательности символов в оригинальном письме 
            повторяются и в зашифрованном виде. Имеем явно не блочный шифр, т.к. 
            он из повторяющихся строк на выходе ТАКОЕ вытворяет - мать родная не 
            узнает. Да и не подстановочный тоже - в нем строка из одинаковых 
            символов (приличной длины - см. рисунок) на выходе может возникнуть 
            только чудом. Причем с той же позиции. И одинаково во всех письмах. 
            Но другими символами. Допиваю утренний кефир, отставляю чашку в 
            сторону... АГА! ПОПАЛСЯ! Возникла правомерная мысль, что передо мной 
            обыкновенный заезженный XOR по одному байту. И это действительно 
            он! Ну вот! Теперь он и тебя посчитал! Значение, которым XORится файл, зависит от пароля. Нужны 
            доказательства? Мне в лом их копать: очень не хочется 
            дизассемблировать EXE мега в 3 длиной. Или перебирать сотни три 
            паролей. Поэтому здесь начинается то, что буржуйские криптологи 
            называют "Known text attack", т.е. "атака по известному тексту" - 
            имеем оригинальный текст, имеем полученный текст, знаем алгоритм - 
            получаем ключ. Но не зря же имеется два файла - с паролем и без. Поскольку в 
            результате бесчеловечных издевательств было выяснено, что ВСЕ 
            (непустые) Bat!овские MSB-файлы ВСЕГДА (неясно зачем) заканчиваются 
            парой символов CR-LF (перевод строки). Выяснение значения, которым 
            производится XOR, упрощается до неприличия. Беру последний байт файла и устраиваю ему XOR по значению 10 (LF, 
            если кто забыл). Вижу последовательности в заголовке файла (с 13 
            байта) и пройдусь по ней XOR'ом с тем же значением. Спешите видеть! 
            Вот оно - Pascal'евская (0-й байт - длина) строка с паролем. Вот 
            так! Пароль наш! Получаю значение, которым зашифрован файл. Так можно расшифровать 
            все письма в этом файле. Судя по всему, Bat! из вводимого пароля 
            вычисляет значение, потом им расшифровывает лежащий в .MSB пароль и 
            сравнивает его с введенным. Схема очень даже хорошая, надежная, вот 
            только всю эту красоту и идиллию портит катастрофически неудачный 
            (просто лажовый) алгоритм шифровки. Уж очень он у них простой. 
            Создателей нехватило ни на какой более-менее приличный блочный шифр. 
            Даже не блочный. Да любой. Caesar или Viginere (а еще круче - DES) 
            заставили хотя б задуматься (на пару минут, часов, дней, недель - в 
            зависимости от сложности алгоритма). А так... детский лепет. Эпилог "Если у Вас уже имеется пароль для ящика, Вы можете ввести пустую 
            строку в качестве пароля - после этого ящик будет не защищен". А пароль уже имеется... Вперед! Кстати, зашифрованный таким хитрым образом пароль лежит в КАЖДОМ 
            .MSB-файле в ящике (а на кой, собственно, в каждом?). "Заметьте, что почта в ящике шифруется, если Вы устанавливаете 
            пароль. На случай, если Вы забудете пароль, запишите его 
            где-нибудь". Ага, на крепких лбах товарищей программистов-авторов Батона. Там 
            ему самое место. Не, ни фига - лбов на всех не хватит. Скидай 
            рубаху, на спине писать будем! Далее начинается самое интересное. Теперь можно идти к товарищу 
            за комп, стаскивать все его ящики, если тебе интересна его 
            переписка, и не опасаться наличия пароля, на который он по глупости 
            понадеялся. Понятно, что его любовные письма к подружке по чату 
            Mashulen'ke вряд ли принесут тебе хоть малейшую пользу (можно 
            подумать, ты не знал, что Mashulen'ka - это вот тот небритый урод из 
            соседнего подъезда), но там может быть нечто полезное для тебя - 
            подписки, аккаунты, присланные сервером при регистрации. Мало ли что 
            может там быть? Тут тебе и халявный Инет, купленные шеллы, пароли от 
            других почт... не оберешься добра, короче. А теперь - Киндер-Сюрприз для Самых Находчивых! В интегрированной 
            в The Bat! звонилке может храниться и login с password'ом - вдруг 
            The Bat! у юзера сам дозванивается и почту забирает. Хранится не в 
            реестре, а рядом с .MSB - в каталоге ящика, в account.cfg, кажется. 
            Вот вам еще и Инет на халяву! А ведь хотели просто почту 
            почитать... Самые нервные, наверное, сейчас завопят: "А нам что же делать"? А 
            вам, дорогие мои, настоятельно рекомендуется не хранить пароли где 
            ни попадя и пользоваться PGP. ПЖП с Батом прекрасно интегрируется. А 
            главное - старайтесь пореже пускать за свой комп посторонних, даже 
            хорошо вам знакомых. У меня один хорошо знакомый (ака посторонний) 
            за две минуты гиговый винт умудрился прошерстить, пока я чайник 
            ходил ставить (правда, ничего важного не нашел - для этого у меня 
            Kremlin установлен - DES, IDEA, CAST, 3DES и другие официальные 
            лица), а после моего прихода незамедлительно схлопотал в ухо и 
            больше так не делал. :) Так что следите, гоните всех. Это ведь 
            персональный компьютер, а не коллективная игрушка. P.S. Гонорар за публикацию статьи автор перечисляет фирме 
            RIT Labs на покупку книги Bruce Scheier "Applied Cryptography". А вот и заветный листинг нового монстра для выбивания паролей из 
            вампира. program Bat_Hack; var SourceFile: file of byte; ch: char; c: byte; XOR_Value: byte; PasswordLength: byte; count:longint; begin assign (SourceFile, paramstr(1)); reset (SourceFile); seek (SourceFile,filesize(SourceFile)-1); read (SourceFile,c); {Читаем последний байт файла} {Этот байт - LF XORен по XOR_Value} XOR_Value := (c xor 10); {Находим XOR_Value} seek (SourceFile,13); read (SourceFile,c); {Это длина пароля XORенная по XOR_Value} PasswordLength := (c xor XOR_Value); {Находим длину пароля} if PasswordLength = 0 then {Вдруг пароль не установлен} begin writeln ('No password !'); {не судьба...} exit; end; for count := 1 to PasswordLength do {Находим пароль} begin read (SourceFile,c); write (chr (c xor XOR_Value)); end; writeln; close (SourceFile); end. 
 |