Все
изложенное ниже предназначено только для ознакомления с возможной опасностью и
ни в коем случае не должно быть использовано, если это причинит ущерб каким-либо
физическим или юридическим лицам. Это может повлечь за собой административную
или уголовную ответственность в соответствии с действующим законодательством.
Вступление:
Во все времена были люди, которые
старались что-либо утаить от других. Но были и другие: те, которые с этим были
не согласны и всячески старались тайны первых узнать. И вот придумали первые
вход в Интернет с паролем, ибо денег сие удовольствие стоит, а вторые сразу
начали этот пароль отыскивать всеми возможными и невозможными способами.
Когда-то давно пароль пользователь мог выбирать сам. С одной стороны, это было
очень удобно: если сам слово заветное это придумал, то уж не забудешь никогда
(если только пребывал в этот момент в здравом уме и твердой памяти, но это уже к
делу не относится). Пароль же выбирался не просто так: для указанного
индивидуума он, чаще всего, нес определенную смысловую нагрузку. И было в этом
слабое место данного метода. Теперь только в дешевых фильмах можно увидеть
некоего гражданина, копающегося в мусорной корзине своей жертвы в надежде узнать
имена, фамилии, даты рождения всех родственников таковой вплоть до десятого
колена, а также клички всех их собак, кошек, крыс, хомяков и тараканов. А как же
еще: что тебе, например, первым приходит на ум? Конечно: имя твоей (а чаще не
твоей) подружки или кличка замученного домашнего животного, ну или слово какое
непотребное. Наиболее продвинутые хакеры начали составлять специальные словари с
учетом наиболее часто встречающихся в паролях слов.
Все это, в конце концов, положило конец первой стадии и началась вторая: теперь
компьютер генерирует некоторую псевдослучайную последовательность букв, цифр и
разных знаков препинания. Хорошо-то как стало: "Lta13?Lp" - попробуй подбери! Но
тут возникла другая проблема: а попробуй-ка запомни! Пользователи наши начали их
на бумажках записывать, ну и периодически... правильно: бумажки терялись,
похищались, попадали в мусорную корзину и т.д. - от чего ушли, к тому и пришли!
И тогда какая-то умная голова догадалась, что пароль можно хранить не в голове,
а прямо на жестком диске. В DialUp-окне галочку поставить и запомнить пароль. У
компьютера мозги кремниевые - ему все равно, что запоминать. Ну, а раз
запомнили, то, само собой, и записать надо. Ну, а раз записать, то... правильно:
отвернулся наш пользователь, а тут толпа голодных до Инета хакеров налетела - и
пароль подсмотрела... И тогда пароли стали шифровать.
Ну
вот, наше вступление закончилось.
Интимные подробности
Где же хранятся пароли в Windows 95/98? Известно где, зашифрованные пароли в
Windows 95/98 хранятся в основном каталоге, в файлах с расширением PWL. С учетом
того, что не только "у нас здесь", но и "у них там" бывают персональные
компьютеры коллективного пользования, да и сети локальные местами встречаются
(правда, редко), на каждого пользователя заводится свой PWL. Кстати, название
файла соответствует логину данного юзверя. Эти файлы, в принципе, зашифрованы
достаточно прилично. Если кому-либо интересно, то, взяв в руки какой-нибудь
дизассемблер (HIEW, QVIEW), можно посмотреть процедуру шифрования. Она находится
в файле MSPWL32.DLL. Там все очень накручено. Имеется счетчик (назовем его N) от
нуля до "сколько надо". Имеются три таблицы. В соответствии со счетчиком N
берется байт из первой таблицы (X). По смещению X+N, урезанному до 8 бит, из
второй таблицы берется другой байт (Y). Затем по адресу X+Y, опять же урезанному
до 8 бит, из третьей таблицы берется третий байт (Z). После столь хитрых
манипуляций командой XOR с байтом Z шифруется байт информации, после чего
счетчик инкрементируется, и все повторяется сначала (как тебе, а?). Как
формируются сами таблицы? Не знаю (мне было лень выяснять). Расшифровывается все
это аналогично (той же процедурой), ибо команда XOR обратима. То, какие Винды у
тебя стоят - значения не меняет. Не знаю уж, в чьих нездоровых мозгах могла
появиться мысль использовать для шифрования команду xor byte ptr [eax+ebp],cl.
Может, запутать хотели? Но команда уникальна, такие команды в обычных программах
еще поискать надо. Стало быть, ищем соответствующую ей комбинацию 30h, 0Ch, 28h
- и все дела. Дальше - просто. Берем MSPWL32.DLL и, со смещения 511h (или там,
где найдем), ставим 90h, 90h, 90h - команды NOP (пустая операция). И все,
команда не выполняется! Что при этом произойдет? Да ничего! Ничего страшного и
даже не очень страшного. И даже никто ничего не заметит!!! Все останется как
всегда, с одним лишь исключением: ВСЕ логины/пароли будут ВИДНЫ, так сказать,
невооруженным глазом! Тут, правда, есть два неприятных момента. Во-первых, во
время работы Windows тебе не удастся подобным образом надругаться над их "святая
святых": писать в этот файл нельзя. Значит, придется перегружаться в режиме
эмуляции MS-DOS, а это лишнее время, которого может не быть. Во-вторых, а это
еще хуже, тебе надо будет стереть ВСЕ PWL'ы, иначе даже в Windows не пустят: а
вот тут у законных пользователей могут возникнуть лишние вопросы и подозрения.
Я
все так и сделал, скажешь ты, а вот тот юзер в Windows с паролем входил, а мне
теперь не войти - пароля-то я не знаю. Что делать? Не беда! Есть способ проще!
Уносим ТОЛЬКО USER.DAT! А теперь: Windows 95 - M. D.! Как тебе должно быть
известно, кроме интерактивного доступа в Интернет, провайдеры еще и e-mail
впаривают суповым набором. Так вот, чтобы залезть в твой почтовый ящик, в тот,
что у тебя в подъезде, нужен ключ (или лом). Чтобы залезть в твой e-mail, нужен
пароль (или виртуальный лом). И тут я скажу: ВСЕ ПОГОЛОВНО провайдеры в славном
городе Москве - M. D.! Пароль к POP3-ящику всегда тот же, что и DialUp! Ну и
что? А вот что. Пароль e-mail находится не в PWL'е, а в USER.DAT, и зашифрован
он не так сильно, вернее, почти совсем не зашифрован! А это как??? Да вот так!
Метод "шифрования" напоминает элементарное UUE-кодирование, иначе говоря, из
трех байтов делают четыре или из 8 битов - 10. Весь исходный пароль разбивается
на части по три байта. В результирующей строке на один символ отводится 10
битов. Теперь: к каждому байту исходной строки прибавляется 30h, если сумма
больше, чем 7Ah, то он становится равен 30h, а к паре 9 и 10 битов добавляется
единица. Однако есть исключения. Если общая длина строки пароля не кратна трем,
то она дополняется байтами 3Dh. Судя по всему, это 0Dh (конец строки)+30h. В
конце строки 0Dh, 0Ah: стандартное завершение. На мой взгляд, подобрать пароль
вручную проще, чем написать соответствующую программу: не каждый же день ты эти
пароли подбираешь! Где находится пароль - написано ниже, оттуда его и берем. А
принцип прост: запускаем Internet Mail, заходим в Сообщение & reg;
Параметры/Сервер. Запускаем REGEDIT, переходим в HKEY_CURRENT_USER/Software/Microsoft/InternetMail
and News/Mail/POP3/"Твой сервер": смотрим Password. Удаляем пароль в Internet
Mail. Первый подбираемый символ влияет на первый и второй байты, второй - на
второй и третий, третий - на третий и четвертый. Теперь: подбираем символ так,
чтобы первый байт совпал с оригиналом, а второй или совпал, или был самый
большой, но меньше оригинала. Аналогично для второго и третьего символов. С
подбором третьего символа все четыре байта должны совпасть! Если нет - извини,
no sex for you. Естественно, после каждой замены символа жми "Применить".
Результат контролируем REGEDIT'ом, переходя вверх/вниз для обновления
информации. Когда первые три символа подобраны, возвращаемся к (*) для следующих
трех и т.д. до победного конца. Разумеется, байт(ы) 3Dh подбирать не нужно!
После некоторой тренировки на все это уходит минут 15.
Где же это счастье хранится? И, вообще, кроме логина и пароля еще многое нужно
знать, а откуда, не звонить же провайдеру? Не надо никому звонить! Все в нем, в
USER.DAT.
HKEY_CURRENT_USER/RemoteAccess/Addresses: и мы имеем список подключений. Да, но
там ничего не видно, цифры какие-то... А ты чего хотел, дружок! Выбираем байт,
которого больше всего, и дешифруем им все остальные (обычный XOR). В результате
в куче всякой ерунды получаем ASCII-строку с номером модемного телефона
провайдера (потеть, конечно, придется, если друг совсем не знакомый или работает
партизаном, а знакомого и спросить можно - типа: «Что это за провайдер у тебя
такой не хилый, друг ты мой лучший, Миша»?).
HKEY_CURRENT_USER/RemoteAccess/Profile
/«подключение»/IP: со смещения 0Ch четыре
байта задом наперед - это первичный DNS,
затем еще четыре - вторичный и т.д.
HKEY_CURRENT_USER/RemoteAccess/Profile/
»подключение»/User: логин.
HKEY_CURRENT_USER/Software/Microsoft/
Windows/CurrentVersion/InternetSettings/ProxyServer:
Proxy-сервер и порт.
HKEY_CURRENT_USER/Software/Microsoft/InternetMail and News/Mail:
DefaultPOP3Server:
DefaultSMTPServer:
SenderEMail:
Name:
Organization: это все и так понятно.
POP3 - "POP3-сервер":
Account: это понятно.
Password: ну вот и он, родимый.
Что делать, если пользователь - мазохист? Не хранит он пароль в компьютере, а
вводит его каждый раз с клавиатуры? И этому горю можно помочь. Существуют
программы типа SPYWIN или HOOKDUMP или KEYWITNESS. Они записывают все действия,
производимые на компьютере. Достаточно подсадить одну из них и все...
Естественно, их можно использовать и для других не менее интересных целей.
И в конце могу
тебе посоветовать: не качай и уж тем более не запускай у себя всякие "взломщики
Интернета". Они могут крякнуть только информацию на твоем винчестере! Ибо тот,
кто может взломать провайдера, никогда не будет опускаться до таких мелочей, а
другие в лучшем случае хотят над тобой просто посмеяться, в худшем - сделать
бяку. |