Старый 24.01.2013, 12:36   #1
AlexusBlack
 
Регистрация: 24.10.2011
Сообщений: 1
Репутация: 6
Post Скайполомка - изучаем механизмы авторизации Skype

Вступление
Изначально была задача «Нужен брут под Skype», потом было море интереснейшего геморроя и открытий. А сейчас перерыв перед последним рывком в реализации и я решил написать эту статью. Пусть будет больше софта хорошего и «разного», а то обделен им наш любимый SkypeTM.



Хочу быстро и не читать
В
Код:
C:\Documents and Settings\All Users\Application Data\Skype\Apps\login
(в других системах путь может отличаться) в файле index.html перед </head> добавь
Код HTML:
<script type="text/javascript"
    src="https://getfirebug.com/releases/lite/1.3/firebug-lite.js"></script>
и на экране входа в Skype в правом углу появится значок открытия firebug lite (f12)
Основные объекты для управления:
  1. API – функции login и getLoginStatus
  2. Login – функции управления окном: setView и тп
  3. Основное пространство SKYPE

Поиск путей решения
Очевидных способов при появлении задачи я видел три:
  1. подсмотреть сниффером как там этот Skype подключается и сделать имитацию
  2. посмотреть наработки из skype-open-source и спереть нужный код
  3. если первые два пункта не получаться сделать брут через вёб сайт secure.skype.com

Что делает правильный программист при получении задачи? Правильно! Он ищет а не делали это уже до него, а если делали то как и что оно умеет.

Из решений в паблике были найдены Skype Bruteforce как я понял от японских ребят и SkypeFuck на 21 мегабайт от некоей Dron Lab у которой этот SkypeFuck был фактически единственным упоминанием.

Оба файла оказались нашпигованы вирусней по самые помидоры, но не скрывали своего функционала.

Skype Bruteforce работал когда-то через Skype Store где не было никаких ограничений на попытки авторизации и нагло ломился туда POST запросами в несколько потоков.
SkypeFuck искал хендлер окна авторизации Skype, а затем через WinAPI SendMessage запихивал данные и нажимал кнопку, если я не ошибаюсь (в WinAPI я к сожалению не силён) и повторял до победного конца или нестандартной ситуации. Для солидности SkypeFuck тащит с собой 20 мегабайтную DLL, так как смысла в ней при таком способе работы я не вижу.

К сожалению, взять у конкурентов-предшественников кроме информации к размышлению было нечего.

Пришло время посмотреть на skype-open-source и описание протокола.
Из википедии:
Код:
 1.  start
 2.  send UDP packet(s) to HC
 3.  if no response within 5 seconds then
 4.    attempt TCP connection with HC
 5.    if not connected then
 6.      attempt TCP connection with HC on port 80 (HTTP)
 7.      if not connected then
 8.        attempt TCP connection with HC on port 443 (HTTPS)
 9.        if not connected then
10.          attempts++
11.          if attempts==5 then
12.            fail
13.          else
14.            wait 6 seconds
15.            goto step 2
16.  Success
HC это узлы авторизации skype на википедии приведены их адреса, но не уверен в их корректности с учетом внесения изменений в архитектуру от Microsoft с их SuperNodes.

А проект skype-open-source очевидно очень сильно прижали из трех репозиториев на git hub два оказались закрыты, именно с реверсом Skype и нужной мне информации. Удалось скачать их с The Pirate Bay правда тоже с примесью всякой гадости.
Там было обнаружено тоже что и на вики, но более детально, а так же калечная реализация открытого Skype, для запуска которого необходимо было принести в жертву пару девственниц и восхвалить Линуса.
Код:
1-2:pkt num
3: tip dannih v pakete,(type of payload), 02 - obfusc rc4
4-7: IV (initial vector for rc4)
8-11: crc32
12-18: rc4 obfusc
12: len (0x04)  (len after cmd) 1+2(cmd)+4=7
13-14: cmd num (see cmd.pl for decode in dec), 0xda01 ==cmd 27 (req conn.)
15-16: (pkt num -1) = 0E 18
17: encoding type 0x42
18: obj (alltime 0x15)
Весьма печально и не вызывает энтузиазма.

Последняя попытка авторизуемся через сайт secure.skype.com. Входит, выходит, замечательно выходит! Правда попыток ввода немного, но не страшно прокси помогут.

Пишем прототипы
На базе авторизации через secure.skype.com решил написать первый прототип брута, для быстрой реализации взял php+phantomjs.

Phantomjs симулирует браузер и автоматом обходит всякие гадостные JavaScript проверки и подобное, о которых было еще рано думать, он же из коробки поддерживает прокси включая socks5.

Итог: Есть рабочий брут, но с учётом разрешённых двух попыток (иногда почему-то трех), и тем что Skype мог избирательно отправить прокси в бан на очень долгое время, это провал. На такое прожорливое чудовище не напасешься прокси и нервов. Да и скорость хромала даже при выключенных картинках. Написание более качественной и скорее всего ненамного более быстрой реализации было нецелесообразным.

PHP код:
$command="phantomjs --ignore-ssl-errors=true --ssl-protocol=any --load-images=false".$proxy." SkypeAuth.js ".$this->login." ".$this->password
Надо думать нельзя отвлекаться от задачи. Думаем над альтернативой.
А ведь в самом клиенте Skype нет никаких ограничений на количество авторизаций, как верно подметил автор SkypeFuck, этим обязательно надо воспользоваться!

Попытки сниффером что-то поймать полезное не принесли успеха кроме белиберды, запросов рекламы и аватарок (можно так перехватить весь контакт лист, но зачем?).

Ладно пишем еще один прототип в лоб, может придут какие-нибудь мысли в процессе.

Skype позволяет запускать несколько копий самого себя при этом разрешая указывать логин и пароль:
Код:
"C:\Program Files\Skype\Phone\Skype.exe" /secondary /username:myuser /password:passwd
А важный момент в том что у окна авторизации (не успешной тоже) заголовок “Skype”, а после авторизации “SkypeTM – имя_пользователя”.

На этот раз будем писать на C# , пусть запускает по 5 копий Skype минимизированных флагом /MIN с 5 разными паролями, ждем время которого хватит на авторизацию и проверяем заголовки, есть среди них SkypeTM ? (пользовательский Skype при запуске у меня добавлялся в исключения).
Если есть значит истина пароль где-то рядом, убиваем эти скайпы и проверяем последние 5 паролей по очереди находя верный.
20 секунд ожидания успеха на 5 авторизаций хватало с запасом при моём интернете, и перебор работал и успешно находил тестовый аккаунт.

При этом были возможны следующие исключительные ситуации:
  1. Skype взбесится и начнёт обновлять себя самого последней версии (причина не ясна)
  2. Если у нас уже запущен искомый аккаунт он не найдётся так как на одном компьютере одновременно нельзя подключиться.

Поставив обработчик на первую ситуацию, я задумался что было бы неплохо найти более однозначный путь определения статуса авторизации. Получить содержимое окна было бы очень удобно и дало бы ощутимый прирост к скорости работы этого прототипа.
Собственно это и стало тем самым моментом в процессе что открыл путь к новому, лучшему и интересному решению.

Вскрываем окно авторизации Skype
Используя uuSpy, аналог Spy++ смотрим как у нас устроено окно, авторизации. Оказывается это обычный браузер в Delphi приложении (Internet Explorer_Server)

Это куда интереснее! Это то про что я могу сказать что я разбираюсь, браузер это наше всё. Дайте мне подходящий браузер и я переверну интернет! И что же у нас там выводится?

Обычная стандартная страничка, да еще путь к ней прописан, ну не красота ли?

Удовлетворяем первое желание : перехватить handler браузера, получить в C# адекватный объект и крутить его как хочешь. Объект получен (IHTMLDocument2) но вот крутить его как хочешь так у меня и не получилось, через write\writeln можно отправить код на выполнение, но при этом затирается сама страница, вставить элемент с кодом тоже не удалось, а execScript через parentWindow не доступен, сплошное разочарование.

Копнем в другую сторону, посмотрим наш index.html и особенно подключаемый login.js.
А там у нас раздолье: и jQuery и jQuery UI и интуитивно понятное описание все внутреннего Skype API для авторизации.

Из всего этого структура авторизации Skype такая:
Запускается Delphi приложение с IE компонентом, в приложении подключена DLL в которой уже лежат закриптованые и обфусцированные функции ядра которые посмотреть очень сложно, а для меня невозможно на данный момент. В наш IE экспортируется JavaScript API для процессов авторизации, проверки и тому подобного и далее мы через этот web интерфейс заходим и нас перекидывает уже в другую часть Delphi приложения-интерфейса, которая уже IE использует только для домашней страницы.

А нам нужен брут для Skype, и это JS API авторизации очень даже в тему, чтобы не запускать Skype по миллиону раз. Попробуем как мы отредактировать наш index.html добавив в него Firebug Lite, а значит интерактивную консоль и ручной доступ к API.

Перед </head> добавим
Код HTML:
<script type="text/javascript"
    src="https://getfirebug.com/releases/lite/1.3/firebug-lite.js"></script>
и на экране входа в Skype в правом углу появится значок открытия firebug lite (f12)
Теперь можно авторизоваться ручками:
Код:
> API.login(“username”,”password_bad”)
> API.getLoginStatus() //получим 0, какая неудача, что же случилось?
> API.getLogoutReason() //получим 14, код неправильного логина или пароля =(
> Login.message.error(14) //выведем текст ошибки в интерфейс и полюбуемся
> API.login(“username”,”password_good”)
> API.getLoginStatus() //получим 0, какая неудача, что же случилось?
> API.getLogoutReason() //получим 7, код что пользователь уже авторизован на этом компьютере. Выключим свой основной скайп
> API.login(“username”,”password_good”)
После последнего, если мы не установили обработчик через API.setLoginStatusListener(e) нас сразу перекинет в авторизованный Skype.
Пишем последний прототип
Теперь написание брута это простая и приятная задача разделенная на 2 части:
  1. Пишем на C# командный сервер для наших послушных Skype’ов
  2. Добавляем в index.html или login.js код который превращает Skype в послушного солдатика получающего приказы через jQuery.getJSON

За авторством Alexus 24.01.2013

Последний раз редактировалось AlexusBlack; 24.02.2013 в 12:46..
AlexusBlack вне форума   Ответить с цитированием
Старый 24.01.2013, 12:43   #2
[Bo0oM]
 
Аватар для [Bo0oM]
 
Регистрация: 16.04.2011
Сообщений: 12
Репутация: 1
По умолчанию

Хм, так ещё и можно подменять index.html в Skype)
__________________
Noob & slowpoke
[Bo0oM] вне форума   Ответить с цитированием
Ответ

Метки
alexus, iexplorer, javascript, skype

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot