Все изложенное ниже предназначено только для ознакомления с возможной опасностью и ни в коем случае не должно быть использовано, если это причинит ущерб каким-либо физическим или юридическим лицам. Это может повлечь за собой административную или уголовную ответственность в соответствии с действующим законодательством.
Вступление
Во все времена были люди, которые старались что-либо утаить от других. Но были и другие: те, которые с этим были не согласны и всячески старались тайны первых узнать. И вот придумали первые вход в Интернет с паролем, ибо денег сие удовольствие стоит, а вторые сразу начали этот пароль отыскивать всеми возможными и невозможными способами.
Когда-то давно пароль пользователь мог выбирать сам. С одной стороны, это было очень удобно: если сам слово заветное это придумал, то уж не забудешь никогда (если только пребывал в этот момент в здравом уме и твердой памяти, но это уже к делу не относится). Пароль же выбирался не просто так: для указанного индивидуума он, чаще всего, нес определенную смысловую нагрузку. И было в этом слабое место данного метода. Теперь только в дешевых фильмах можно увидеть некоего гражданина, копающегося в мусорной корзине своей жертвы в надежде узнать имена, фамилии, даты рождения всех родственников таковой вплоть до десятого колена, а также клички всех их собак, кошек, крыс, хомяков и тараканов. А как же еще: что тебе, например, первым приходит на ум? Конечно: имя твоей (а чаще не твоей) подружки или кличка замученного домашнего животного, ну или слово какое непотребное. Наиболее продвинутые хакеры начали составлять специальные словари с учетом наиболее часто встречающихся в паролях слов.
Все это, в конце концов, положило конец первой стадии и началась вторая: теперь компьютер генерирует некоторую псевдослучайную последовательность букв, цифр и разных знаков препинания. Хорошо-то как стало: "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. Ты, наверное, думаешь, что пароли расшифровываются только тогда, когда это надо, а затем удаляются из памяти? Ну вот еще... Открытые пароли ПОСТОЯННО хранятся в системе - с момента ВХОДА пользователя в Windows и до момента его ВЫХОДА! Во какая безопасность. Но и этого мало: они доступны ЛЮБЫМ приложениям через Windows'совский API. И вот результат: появляется программа PWLVIEW, которая спокойненько тебе показывает "все самое интимное" твоей (или не твоей) машины. В том числе и Dial Up, и сетевые пароли. Формат выдаваемой информации таков:
*Rna\1-е соединение\1-й логин 1-й пароль
*Rna\2-е соединение\2-й логин 2-й пароль
и так далее. Это все очень круто, но она работает в окне DOS, это же... унизительно: мелкий шрифт, белым по черному... А нет ли еще чего-нибудь, ближе и роднее «настоящему» хакеру? Конечно, есть. Есть еще одна штука, PEEPER называется. Эта идет еще дальше. Пароль, как ты можешь заметить, не показывается, вместо него звездочки. Так вот: запускаем PEEPER, открываем соединение, наводим мышь на звездочки и в окне PEEPER видим... открытый пароль. «У меня нет ни времени, ни возможности ковыряться в чужой машине. Нельзя ли скопировать у другана этот самый PWL, а потом, дома, разобрать?» - законно спросишь ты. Можно, только это тебе, дружище, ничего не даст: не будет он у тебя работать, хоть ты тресни. Вернее, он ОДИН не будет. Нужно еще и USER.DAT утащить. После чего дома "создать" User'а с именем из PWL, заменить свой USER.DAT на свежестянутый и еще добавить в Windows стянутый PWL. После чего войти в Windows под соответствующим именем и... Дальше в игру вступает PWLVIEW.
Я все так и сделал, скажешь ты, а вот тот юзер в 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. Они записывают все действия, производимые на компьютере. Достаточно подсадить одну из них и все... Естественно, их можно использовать и для других не менее интересных целей.
И в конце могу тебе посоветовать: не качай и уж тем более не запускай у себя всякие "взломщики Интернета". Они могут крякнуть только информацию на твоем винчестере! Ибо тот, кто может взломать провайдера, никогда не будет опускаться до таких мелочей, а другие в лучшем случае хотят над тобой просто посмеяться, в худшем - сделать бяку.
|