Создаём скрытый TeamViewer #4

У нас уже есть DLL, подгружаемая TeamViewer’ом, теперь мы можем получить ID и пароль который им генерируется, а так же сможем скрыть его окно. Что бы решить поставленную задачу нужно перехватить некоторые Api отвечающие за отображение данных и отрисовку окон!

Для перехвата будем использовать исходный код libsplice, спасибо vol4ok. Компилируем статическую библиотеку, для этого создаем каталог libsplice в проекте бота и копируем туда все содержимое из libsplice/src/libsplice_um, а в Makefile записываем следующее:

компилируем nmake blibsplice, в результате будет создана статическая библиотека libsplice.lib которую можно прилинковать к проекту бота.

В результате Makefile примет вид:

прототип функции выглядит так:

proc — адрес функции которую будем перехватывать

new_proc — адрес функции которая примет управление

old_proc — адрес оригинальной функции

Итак у нас все готово для перехвата функций, покажу на примере получение ID и пароля. Так как эти данные отрисовываются в окне, то можно предположить что за их отрисовку ответственна SetWindowTextW/A. Для перехвата этой функции приведу фрагмент из кода

Длина ID равна 11 символов (3 и 7 ой пробелы пароль же 4 символа). Используем это в фильтрации, иначе функция будет выводить разный текст который написан в окнах TV.

Для контроля работы функции запускаем программу в студии под отладкой. И устанавливаем точку останова в функции hSetWindowTextW, так как функция вызывается множество раз, то удобнее выводить результат в окно отладкии студии (OutputDebugStringW) или смотреть результат через DbgView. Прототип функции смотрим в MSDN SetWindowTextW или в заголовочных файлах студии.

Определение ключевых функций

Для определения того какие функции нужно перехватить используем apimonitor

Можно выделить следующие функции для перехвата:

  • SetWindowTextW — ID и пароль
  • RegCreateKeyExW — TV активно пишет данные в реест и создает файлы, мы же не хотим оставлять следов), возвращаем ошибку кода TV пишет в ветку реестра TeamViewer
  • CreateMutexW — мы хотим что бы наш скрытый TV мог работать одновременно с каким нибудь другим паралельно установленным, поэтому меняем имя мютекса
  • CreateFileW — запрещаем создавать .log, .txt, .tmp
  • CreateDirectoryW — запрещаем создание каталога TeamViewer
  • SystemParametersInfoW — TV при подключении меняет обои стола на черный фон, запрещаем ему это делать
  • MessageBoxW — зампещаем все сообщения
  • IsWindowVisible — говорим всегда окна видимые
  • ShowWindow — устанавливаем окна скрытыми
  • CreateWindowExW — делаем окно скрытым (после создания просто вызываю ShowWindow)
  • SetWindowPos — во время установленного соединения появляется окно с классом TV_ControlWin, которое я просто перемещаю за пределы экрана
  • Shell_NotifyIconW — блокируем создание иконки в трее
  • ShellExecuteExW — блокируем запуск программ с флагом «—dre»

Советую проделать все перехваты самостоятельно, тем самым вы получите богатый опыт в написании кода и исследовании программ.

12 thoughts on “Создаём скрытый TeamViewer #4

  1. Посоветуйте пожалуйста литературы по реверсингу, анализу, программированию. Хотим услыхать рекомендации от black hat 🙂

  2. Как бы на Win 10 запустить, невидит прооцееса
    splice + Api Monitor невидит процесс как на Windows 7
    GetFileVersionInfoSizeW этого нет поэтому hook не получается

  3. Na Windows 10 zapuskaetsea no nelovit hooki, ne skrivaet okna,
    u menya polu4ilosi sbilditi pod Windows 7 64bit — dll, vsio rabotaet krome samogo rdp visnet ekran, no fail menadjer dostupen, kameru ne proveryal bral poslednii TeamViewer.exe

    1. Понятия не имею в чём причина, нужно смотреть в дебагере.
      Это образовательный материал, а не готовый софт с поддержкой.

  4. Добрый день! подскажите пожалуйста, вроде все делаю по мане, но возник такой вопрос.
    В 13 версии тимки на 10 винде подбрасывая version.dll к TeamViewer.exe вылетает такая же ошибка (но при этом, одновременно с ошибкой запускается и сам TeamViewer)
    Иду дальше, добиваюсь того, чтобы одновременно с tv запускалась dll (Hi i’m hacker)
    Является ли это таки признаком, что уязвимость все еще открыта? или там может быть всё не так просто.
    В чем суть, я закидываю version.dll наобум, т.е. procmon вообще не видит обращения к ней, как бы я не менял фильтры.
    И еще один вопрос, дальше просто решил скомпилить ваши исходники, окно не скрывается, софт, как выходит, не работает. Это у меня руки кривые?)
    Если что жаба: ganzen@xmpp.jp

Добавить комментарий