Создаём скрытый 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”

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

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

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