Пишем HVNC 2.0

Пишем HVNC 2.0

Paypal

!!! ТОЛЬКО ДЛЯ ОЗНАКОМЛЕНИЯ !!!


Доброго времени суток форумчане, давно не виделись :)

 

В данной статье будет описана найденный мной интересный вектор эксплуатации MDI.


N-ное время назад я решил реализовать собственную версию HVNC (скрытое управление рабочим столом).


Но код от Zeus и его производных конечно же оставлял желать лучшего.

Банально ничего не работало.

 

Коротко о том, как работает HVNC.

1. Создается виртуальный рабочий стол через WinAPI: CreateDesktop() / OpenDesktop().

  Quote
Заметка:
Получить Handle текущего рабочего стола можно вот так:
GetThreadDesktop(GetCurrentThreadId())
Чтобы использовать его в будущем.
 


2. Получается HDC рабочего стола.

3. С помощью WinAPI: bitblt() мы можем делать скриншот виртуального рабочего стола.

Весьма изящный и довольно простой механизм.

Но есть минус - каждая антивирусная компания знает о нем и довольно легко детектят.


Минус #2 связан с механизмом отрисовки объектов в Windows:

  Quote
 
Если у нас есть приложение, форма или часть формы которого находятся за пределами
отображаемой части рабочего стола, т.е. например на фоновом, созданном нами, рабочем столе, то
она не отрисовывается и в памяти не обновляется.
т.е. bitblt может не отработать, как нужно.

 

  Quote

Это фиксится вызовом WinAPI: PrintWindow() из dll - user32,
этим методом мы вызовем отрисовку графического объекта в WINGDI Bitmap буфер (по Handle Bitmap'a).
 

 

После реализации HVNC по стандартному механизму работы, я, будучи энтузиастом, на этом не остановился.

Тогда было принято решение в поиске иного пути реализации HVNC, т.к. этот был уж сильно заезжан.

 

Рассмотрим любопытную вещь, которую я заметил.

1. В ОС Windows существует механизм хендлов (Handle == 32-x разрядное число без знака).

1. Handle имеется практически у каждого объекта, в т.ч. у форм, кнопок, полей ввода и т.п.

2. По Handle можно обратиться к определенному объекту, например через SendMessage() / PostMessage().

4. Объекты могут быть выстроены в определенную иерархию объект родитель -> дочерний объект, например форма -> кнопки на ней.

3. (Самое важное) У графических и не только объектов, у которых есть Handle (т.е. у WinForms) есть одно

просто замечательнейшее свойство - их можно "удочерять" через WinAPI метод SetParent()

SetParent(Handle целевого объекта, Handle "родителя").


Причем строгий механизм контроля "удочерения" для этого API метода в Windows отсутствует!


Т.е. мы можем создать форму через WinAPI, которая будет находиться за пределами видимой части рабочего стола...

А затем запустить нужное нам приложение (например Chrome) и удочерить его формы в нашу.

P.S. Процесс скрытого запуска приложений и форм далее не рассматривается - это все можно нагуглить самим.

  Quote
 
Может так получиться, что у целевого приложения будет 2-3 и более форм.
Самый простой вариант перехватить их Handle - это скомбинировать API: EnumWindows(), и GetWindowThreadProcessId(),
pid нового процесса можно получить при его создании.
Забавное примечание:
PrintWindow() вызывает отрисовку графического объекта и всех его дочерних графических объектов.
 

 

Итого, что мы имеем:

1. Можем запустить процесс в фоне, без вызова CreateDesktop() !

2. Чтобы сделать скриншот нашего скрытого рабочего стола - нам нужно отрисовать в Bitmap буфер только нашу форму, используя PrintWindow() !

3. Можем легко взаимодействовать с его графическими элементами через SendMessage() / PostMessage(),

посылать клики/движения мыши и нажатия клавиш !

4. Данный способ довольно не просто задетектить, т.к. механизм MDI используется в огромном перечне белого софта,

 

Протестировано на Win XP, 7, 8, 8.1, 10 (последний билд), Server 2007.

а это значит, что данная технология может спокойно отодвинуть HVNC на второй план.

К посту прикрепляю скрины технологии в действии, тесты проводились на ботах (Некоторая информация замазана. Мы ведь не ей делимся :) ).

И видео - демонстрацию, как это все работает в realtime. 

Показать содержимое

Видео:

https://radikal.ru/video/HE7v4l4nmhk

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

В более поздних версиях используется технология, производная от описанной в данной статье.

Автор: wdosx

Report Page