Все изложенное ниже
предназначено только для ознакомления с возможной опасностью и ни в коем
случае не должно быть использовано, если это причинит ущерб каким-либо
физическим или юридическим лицам. Это может повлечь за собой
административную или уголовную ответственность в соответствии с
действующим законодательством.
Вступление:
Во все времена были люди, которые
старались что-либо утаить от других. Но были и другие: те, которые с этим
были не согласны и всячески старались тайны первых узнать. И вот придумали
первые вход в Интернет с паролем, ибо денег сие удовольствие стоит, а
вторые сразу начали этот пароль отыскивать всеми возможными и невозможными
способами.
Когда-то давно пароль пользователь
мог выбирать сам. С одной стороны, это было очень удобно: если сам слово
заветное это придумал, то уж не забудешь никогда (если только пребывал в
этот момент в здравом уме и твердой памяти, но это уже к делу не
относится). Пароль же выбирался не просто так: для указанного индивидуума
он, чаще всего, нес определенную смысловую нагрузку. И было в этом слабое
место данного метода. Теперь только в дешевых фильмах можно увидеть
некоего гражданина, копающегося в мусорной корзине своей жертвы в надежде
узнать имена, фамилии, даты рождения всех родственников таковой вплоть до
десятого колена, а также клички всех их собак, кошек, крыс, хомяков и
тараканов. А как же еще: что тебе, например, первым приходит на ум?
Конечно: имя твоей (а чаще не твоей) подружки или кличка замученного
домашнего животного, ну или слово какое непотребное. Наиболее продвинутые
хакеры начали составлять специальные словари с учетом наиболее часто
встречающихся в паролях слов.
Все это, в конце концов, положило
конец первой стадии и началась вторая: теперь компьютер генерирует
некоторую псевдослучайную последовательность букв, цифр и разных знаков
препинания. Хорошо-то как стало: "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. Они записывают все действия, производимые на
компьютере. Достаточно подсадить одну из них и все... Естественно, их
можно использовать и для других не менее интересных целей.
И в конце могу тебе посоветовать: не
качай и уж тем более не запускай у себя всякие "взломщики Интернета". Они
могут крякнуть только информацию на твоем винчестере! Ибо тот, кто может
взломать провайдера, никогда не будет опускаться до таких мелочей, а
другие в лучшем случае хотят над тобой просто посмеяться, в худшем -
сделать бяку.
ОГЛВЛЕНИЕ
| |