Все
изложенное ниже
предназначено только для
ознакомления с возможной
опасностью и ни в коем
случае не должно быть
использовано, если это
причинит ущерб каким либо
физическим или
юридическим лицам, так как
это может повлечь за собой
административную или
уголовную
ответственность в
соответствии с
действующим
законодательством.
Для
начала небольшой экскурс
в историю. Во все времена
были люди, которые
старались что-либо утаить
от других, и были и другие:
те, которые с этим были не
согласны и поэтому
всячески старались тайны
первых узнать - такова уж
человеческая сущность. И
вот, придумали первые вход
в Интернет с паролем, ибо
денег это стоит, а вторые
сразу начали этот пароль
отыскивать всеми
возможными и невозможными
способами.
Итак,
стадия первая. Были
времена, когда пароль
пользователь мог выбирать
сам. Безусловно, с одной
стороны, это было удобно:
если сам слово это
заветное придумал, то уж
не забудешь никогда (если
только пребывал в этот
момент в здравом уме и
твердой памяти, но это уже
к делу не относится).
Пароль же выбирался не
просто так: для указанного
пользователя он обычно
нес определенную
смысловую нагрузку. И в
этом было слабое место
данного метода.
Теперь
только в дешевых фильмах
увидишь некоего
гражданина, копающегося в
мусорной корзине своей
будущей жертвы, в надежде
узнать имена, фамилии,
даты рождения всех
родственников таковой
вплоть до десятого колена,
а также всех их собак,
кошек, крыс, хомяков и
прочей живности. И не без
успеха! А как же еще: а что
вам, например, первым
приходит на ум? - Конечно:
имя вашей (или не вашей)
подруги или кличка вашей
собаки, ну, или слово какое,
непотребное (но это уже от
воспитания зависит)!
Наиболее продвинутые
хакеры начали даже
составлять специальные
словари с учетом наиболее
часто встречающихся в
паролях слов. Все это, в
конце концов, положило
конец первой стадии, и
началась вторая: теперь
пароль выдает компьютер,
то есть генерирует
некоторую
псевдослучайную
последовательность букв,
цифр и разных знаков
препинания. Хорошо-то как
стало: 'tHa73?Lp' - поди-ка
подбери! Но тут возникла
другая проблема: а поди-ка
запомни! Пользователи
наши начали их на бумажках
записывать, ну и
периодически... правильно:
бумажки терялись,
похищались, попадали в
мусорную корзину и т. д.- от
чего ушли, к тому и пришли!
И тогда какая-то умная
голова догадалась, что
пароль можно хранить не в
голове, а прямо на жестком
диске. В DialUp-окне галочку
поставить и запомнить
пароль. У компьютера мозги
кремниевые - ему все равно,
что запоминать. Ну, а раз
запомнили, то, само собой,
и записать надо. Ну, а раз
записать, то... правильно:
отвернулся наш
пользователь, а тут хакеры
толпой налетели - и ну
пароль подсматривать. И
тогда запомненные пароли
стали шифровать... Ну вот,
наше лирико-историческое
вступление закончилось.
Теперь пошла проза.
Где
хранятся пароли в Windows 95?
Зашифрованные пароли в
Windows 95, как известно,
хранятся в основном
каталоге, в файлах с
расширением PWL. С учетом
того, что не только "у
нас здесь", но и "у них
там" бывают
персональные компьютеры
коллективного
пользования, да и сети
локальные местами
встречаются, на каждого
пользователя заводится
свой PWL. Кстати, название
файла соответствует
логину (имени... нет, скорее,
кличке) данного
пользователя.
Зашифрованы
эти файлы, в принципе,
достаточно прилично. Если
кому-либо интересно, то,
взяв в руки какой нибудь
дизассемблер (HIEW, QVIEW),
можно посмотреть
процедуру шифрования.
Она
находится в файле MSPWL32.DLL.
Вот
уж где накручено. Имеется
счетчик (назовем его N) от
нуля до <сколько надо>.
Имеются три таблицы. В
соответствии со счетчиком
N берется байт из первой
таблицы (X). По смещению X+N,
урезанному до 8 бит, из
второй таблицы берется
другой байт (Y). Затем по
адресу X+Y, опять же
урезанному до 8 бит, из
третьей таблицы берется
третий байт (Z). После столь
хитрых манипуляций
командой XOR с байтом Z
шифруется байт информации,
после чего счетчик
инкрементируется, и все
повторяется сначала.
Как
формируются таблицы? - не
знаю (лень было выяснять).
Кстати,
таблиц, на самом деле,
может оказаться и две, и
одна (используются
несколько раз на разных
этапах). Расшифровывается
все это аналогично (и той
же процедурой), ибо
команда XOR обратима.
Если же у вас стоит какая-то
другая версия Windows 95, то
это дела не меняет. Не знаю
уж, в чьих нездоровых
мозгах могла появиться
мысль использовать для
шифрования команду хог byte
ptr [eax+ebp],cl. Может, запутать
хотели? А команда
уникальна, такие команды в
обычных программах еще
поискать надо. Стало быть,
ищем соответствующую ей
комбинацию 30h, OCh, 28h - и все
дела. Дальше - просто.
Берем MSPWL32.DLL и со смещения
511 h (или там, где найдем)
ставим 90h, 90h, 90h - команды NОР
(пустая операция). И все,
команда не выполняется!
Что
при этом произойдет? Да
ничего! Ничего страшного и
даже не очень страшного. И
даже никто ничего не
заметит!!! Все останется
как всегда, с одним лишь
исключением: ВСЕ логины/пароли
будут ВИДНЫ, так сказать,
невооруженным глазом! Тут,
правда, есть два
неприятных момента. Во-первых,
во время работы Windows вам не
удастся подобным образом
надругаться над их <святая
святых>: писать в этот
файл нельзя. Значит,
придется перегружаться в
режиме эмуляции MS-DOS, а это
лишнее время, которого
может не быть. Во-вторых, а
это еще хуже, вам надо
будет стереть ВСЕ PWL'ы,
иначе даже в Windows не пустят:
а вот тут у законных
пользователей могут
возникнуть лишние вопросы
и подозрения.
А
можно проще? Без
дизассемблеров и
насильственных действий'?
Можно! И вот здесь я скажу
то, за что (и за многое, увы,
другое) Windows 95 иначе как
MustDie по праву никто не
называет.
Вы,
наверное, думаете, что
пароли расшифровываются
только тогда, когда это
надо, а затем <выжигаются>
из памяти <каленым
железом>? - ну вот еще...
Открытые пароли ПОСТОЯННО
хранятся в системе - с
момента ВХОДА в Windows
данного пользователя и до
момента его ВЫХОДА! Вот
вам и безопасность. Но
этого мало: они доступны
ЛЮБЫМ приложениям через API
Windows. И вот результат:
появляется программа PWLVIEW,
которая спокойно
показывает вам всю
подноготную вашей (или не
вашей) машины. В том числе
и DiaIUp, и сетевые пароли.
Формат выдаваемой
информации таков:
*Rna\1-e
соединение\1-й логин 1-й
пароль
*Rna\2-e
соединение\2-й логин 2-й
пароль и так далее.
Да,
это все хорошо, но она
работает в окне DOS, а это...
унизительно:
мелкий шрифт, белым по
черному... А нет ли еще
чего-нибудь,
ближе и роднее? Есть. Есть
еще одна штука, PEEPER
называется. Эта идет еще
дальше. Пароль, как вы
можете заметить, не
показывается, вместо него
звездочки. Так вот:
запускаем PEEPER, запускаем
соединение, наводим мышь
на звезды и в окне PEEPER
видим... правильно,
открытый пароль.
Вы
скажете: у меня нет ни
времени, ни возможности
ковыряться в чужой машине,
нельзя ли стянуть у соседа
этот самый PWL, а потом, дома,
разобрать? Можно, только
это вам ничего не даст: не
будет он у вас работать.
Вернее, он ОДИН не будет.
Нужно унести еще и USER.DAT.
После чего дома <создать>
User'a с именем из PWL,
заменить свой USER.DAT на
цельнотянутый и еще
добавить в Windows тянутый PWL.
После чего войти в Windows под
соответствующим именем и...
Дальше в игру вступает
PWLVIEW.
Я
все так и сделал, скажете
вы, а вот тот User в Windows с
паролем входил, а мне
теперь не войти - пароля то
я не знаю. Что делать? - Не
беда! Есть способ проще!
Уносим ТОЛЬКО USER.DAT! А
теперь еще раз: Windows'95 - MustDie!
Как
вам известно, кроме
интерактивного доступа в
Интернет, провайдеры
предлагают еще и e-mail. Так
вот, чтобы залезть в ваш
почтовый ящик, в тот, что у
вас на лестнице, нужен
ключ (или лом). Чтобы
залезть в ваш e-mail, нужен
пароль (или виртуальный
лом). И тут я скажу: ВСЕ
ПОГОЛОВНО провайдеры в
славном городе
СанктПетербурге - MustDie!
Пароль к РОРЗ-ящику всегда
тот же, что и DiaIUp!
Ну
и что? - А вот что: Пароль
e-mail находится не в PWLe, а в
USER.DAT,и зашифрован он не
так сильно, вернее, почти
совсем не зашифрован!
А
это как? - А вот как! Метод
<шифрования>
напоминает UUE-кодирование,
иначе говоря, из трех
байтов делают четыре или
из восьми битов - десять.
Весь
исходный пароль
разбивается на части по
три байта. В
результирующей строке на
один символ отводится 10
битов. Теперь: к каждому
байту исходной строки
прибавляется 30h, если
сумма больше, чем 7Ah, то он
становится равен 30h, а к
паре 9 и 10 битов
добавляется единица.
Однако есть исключения.
Если общая длина строки
пароля не кратна трем, то
она дополняется байтами
3Dh. Судя по всему, это ODh (конец
строки)+30(1. В конце строки
ODh, OAh: стандартное
завершение.
На
мой взгляд, подобрать
пароль вручную проще, чем
написать соответствующую
программу: не каждый же
день вы эти пароли
подбираете! Где находится
пароль - см. ниже, оттуда
его и берем. А принцип
прост: запускаем Internet Mail,
заходим в Сообщение ->
Параметры -> Сервер.
Запускаем REGEDIT переходим в
HKEY_CURRENT_USER' -> .Software ->
Microsoft -> InternetMail and News -> Mail
->. POP3 -> <Ваш сервер>:
смотрим Password.
(*)
Удаляем пароль в Internet Mail.
Первый подбираемый символ
влияет на первый и второй
байты, второй - на второй и
третий, третий - на третий
и четвертый. Теперь:
подбираем символ так,
чтобы первый байт совпал с
оригиналом, а второй или
совпал, или был самый
большой, но меньше
оригинала. Аналогично для
второго и третьего
символов. С подбором
третьего символа все
четыре байта должны
совпасть! Если нет -
извините, вы ошиблись.
Естественно, после каждой
замены символа нажимаем
<Применить>. Результат
контролируем REGEDIT'OM,
переходя выше/ ниже для
обновления информации.
Когда первые три символа
подобраны, возвращаемся к
(*) для следующихтрех, и т. д.
до конца. Разумеется, байт(ы)
3Dh подбирать не нужно!
После некоторой
тренировки на все это
уходит меньше 15 минут.
А
где это счастье хранится?
И, кстати, ведь кроме
логина и пароля еще многое
нужно знать, а откуда, не
звонить же провайдеру? - не
надо никому звонить! Все в
нем, в USER.DAT.
HKEY_CURRENT_USER
-> RemoteAccess -> Addresses: и мы
имеем список подключений.
Да, но там ничего не
понятно, цифирь...
Правильно!
Выбираем байт, которого
больше всего, и дешифруем
им все остальные (обычный
ХОR). В результате в куче
всякой ерунды получаем
ASCII-строку с номером
модемного телефона
провайдера.
HKEY_CURRENT_USER
-> RemoteAccess -> Profile -> <подключение>
-> IP: со смещения OCh четыре
байта задом наперед -
первичный DNS, затем еще
четыре - вторичный, и т. д.
HKEY_CURRENT_USER->
RemoteAccess-> Profile -> <подключение>
-> User: логин.
HKEY_CURRENT_USER
-> Software -> Microsoft -> Windows
-> CurrentVersion -> InternetSettings
-> ProxyServer: Proxy-сервер и
порт.
HKEY_CURRENT_USER
-> Software -> Microsoft -> Internet
Mail and News -> Mail:->
DefaultPOP3Server:
->
DefaultSMTPServer:
->
SenderEMail:
->
Name:
->
Organization: это все и так
понятно.
->
POP3 -r <РОРЗ-сервер>:
->
Account: это понятно.
->
Password: ну вот и он, родимый.
А
что делать, если
пользователь - мазохист? Т.е.
не хранит пароли в
компьютере, а вводит их
каждый раз с клавиатуры? -
И этому горю можно помочь.
Существуют программы типа
SPYWIN или HOOKDUMP. Они
записывают все действия,
производимые на
компьютере. Достаточно
подсадить одну из них и...
если вам потом не лень
будет разбирать те
десятки килобайт, которые
будут порождены этими
шпионами. Естественно, их
можно использовать и для
других целей.
В
заключение (да минует меня
чаша сия!) могу сказать
следующее: не берите и уж
тем более не запускайте у
себя всякие <крякеры
Интернета>, почерпнутые
с BBS и из FIDO. Они могут <крякнуть>
только информацию на
вашем винчестере! Ибо тот,
кто может взломать
провайдера, никогда не
будет распыляться на
такую мелочь, а другие в
лучшем случае могут
подбирать пароли по
словарю, а это бесполезно,
в худшем - над вами просто
хотят посмеяться или, того
хуже, сделать вам гадость (прецеденты
уже были).
За
сим позвольте с вами
проститься. Надеюсь,
ненадолго.
(c)
Alex V. Grachev. The Hell Software Laboratory (HellSoft).
26.02.1998.
|