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

Настало время наполнить нашу DLL кодом!

Для начала преобразуем проект Visual Studio под DLL, для этого изменим Makefile:

Заметьте, появились новые флаги:

/DLL – говорит link.exe собирать динамическую библиотеку

/DEF:Version.def – в файле размещаются функции, которые будет экспортировать наша библиотека

Файл Version.def пока не имеет функций, это лишь только заготовка:

main.c

Нажимаем в F7 и наша DLL скомпилирована.

Начинаем новые эксперименты, подкидываем полученную Version.dll к распакованному TeamViewer (в папку tvfiles) и запускаем TeamViewer.exe.

Получаем ошибку при загрузке Version.dll

ver_api

Эти ошибки означают то что загрузчик не смог найти в экспорте Version.dll нужных функций. Удовлетворим потребность Windows загрузчика! Для этого:

  1. Объявляем функцию с таким же названием как в ошибке
  2. В теле функции получаем адрес оригинальной и вызываем её

Код который получает адрес оригинальной функции:

На вход функции GetAPI подается два параметра lib – имя библиотеки, name – имя функции. LoadLibraryA загружает динамическую библиотеку по абсолютному пути, тем самым мы избегаем hijacking.

Рассмотрим этот процесс по шагам:

  1. Запоминаем название функции из сообщения об ошибке (например, GetFileVersionInfoSizeW)
  2. Гуглим “GetFileVersionInfoSizeW msdnlink
  3. Смотрим в каком заголовочном файле (header) объявлена наша функция – Windows.h
  4. Вписываем слово GetFileVersionInfoSizeW в DllMain и нажимаем F12 (Go To Definition), тем самым переходя на ее объявление.
  5. Копируем объявление функции и вставляем в main.c
  6. Добавляем имя функции GetFileVersionInfoSizeW в Version.def
  7. Компилируем по F7, и убеждаемся что нет ошибок.
  8. Повторяем до получения рабочей библиотеки =)

В результате данной работы вы получите следующий код:

main.c

В DllMain я добавил вывод сообщения –  MessageBoxA(0,”I’m Hacker!”,”Hi”,0), которое будет отображаться при успешной загрузке Version.dll

Version.def

Makefile

Компилируем и убеждаемся что у Version.dll появился экспорт. Для этого переходим в Far к Version.dll и нажимаем Alt+F4 -> Enter (hex отображение) -> F8 -> F9 (просмотр экспорта) И увидим в  Hiew:

exp

Забрасываем Version.dll в tvfiles, запускаем TeamViewer.exe и видим сообщение:

hacker

После нажатия OKей, ошибок c экспортом больше нет, TeamViewer запустился. Это означает что мы подменили функции корректно.

Настраиваем отладку

Для удобной разработки кода в Version.dll нужно настроить отладку в Visual Studio, для этого размещаем распакованный tvfiles рядом с каталогом проекта tv, и в настройках студии прописываем путь до файла TeamViewer.exe

debug

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

Теперь мы можем отлаживать код внутри процесса TeamViewer.exe, не правда ли удобно?

dll

В следующем выпуске мы научимся перехватывать API функции, и управлять поведением TeamViewer.exe

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

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