Сегодня я расскажу вам как с помощью ловкости рук и небольшого мошенства сделать ПО для удаленного администрирования и заработать на этом денег. Как известно, все тайное когда нибудь становится явным, и сегодня такой день настал для AmmyAdmin.Относительно недавно, я грешным делом, считал, что более или менее знаю всех основных игроков на рынке удаленного администрирования. С их списком можно ознакомится в английской википедии и герой моего сегодняшнего рассказа там отсутствует (как впрочем и в русской). Однако, как выяснилось, AmmyAdmin ускользнул от моего внимания, поэтому я решил рассмотреть его поближе.
Как говорит официальный сайт:
Ammyy Admin - надежный и доступный способ оказания удаленной компьютерной помощи, администрирования и обучения для Ваших клиентов или сотрудников в любой точке земного шара. Без каких-либо установок, настроек или конфигураций программы, Ammyy Admin соединит удаленные компьютеры в течение нескольких секунд. Вы сможете управлять компьютерами своих клиентов, контролировать клавиатуру и мышь.
В сети существует несколько обзоров свежий, в блоге человека-пирожного и трехлетней давности на 3DNews.
Работает AmmyAdmin через свой сервер, что избавляет конечного пользователя от проблем с серым IP, проброса портов и прочих лишних телодвижений. По такому же принципу работает всем известный TeamViewer и большинство систем удаленного администрирования ориентированных на корпоративный сектор.
После запуска программы можно созерцать следующего вида окно

Казалось бы все вполне стандартно и логично, поэтому переходим на следующую вкладку - "Operator".

С протоколом RDP все понятно, а вот Ammy Protocol меня заинтересовал. Не так просто написать хороший протокол передачи данных для подобного ПО и тем более не каждый разработчик озадачивается изобретением велосипедов. Обычно используется готовое решение, например LibVNCServer.
Посмотрим, что предлагает нам AmmyAdmin в настройках параметров передачи данных. Ничего не напоминает?

Для примера, подобное окно в UltraVNC.

Как видим, большинство опций совпадают, к чему бы это?
Имея давнюю привычку не верить никому на слово, заглядываю внутрь AmmyAdmin.exe


Как видим, автор страдает от излишней скромности, отчего умолчал, что для передачи данных используется код VNC, а судя по имени класса, как раз упомянутый выше LibVNCServer. Вот его исходный код для сравнения :
static void rfbInitColourMapSingleTableOUT(char **table, rfbPixelFormat *in, rfbPixelFormat *out,rfbColourMap* colourMap) { uint32_t i, r, g, b; OUT_T *t; uint32_t nEntries = 1 << in->bitsPerPixel; int shift = colourMap->is16?16:8; if (*table) free(*table); *table = (char *)malloc(nEntries * sizeof(OUT_T)); t = (OUT_T *)*table; for (i = 0; i < nEntries; i++) { r = g = b = 0; if(i < colourMap->count) { if(colourMap->is16) { r = colourMap->data.shorts[3*i+0]; g = colourMap->data.shorts[3*i+1]; b = colourMap->data.shorts[3*i+2]; } else { r = colourMap->data.bytes[3*i+0]; g = colourMap->data.bytes[3*i+1]; b = colourMap->data.bytes[3*i+2]; } } t[i] = ((((r * (1 + out->redMax)) >> shift) << out->redShift) | (((g * (1 + out->greenMax)) >> shift) << out->greenShift) | (((b * (1 + out->blueMax)) >> shift) << out->blueShift));
Принимая во внимание то, что LibVNCServer распространяется по лицензии GPL (равно как и исходный код RealVNC и многих ее форков), это выглядит как минимум некрасиво. Особенно учитывая, что AmmyAdmin - коммерческий продукт и бесплатно может использоваться не более 15 часов в месяц.

Однако поймать с поличным человека не соблюдающего GPL лицензию в своих личных интересах, слишком просто, поэтому копнем еще глубже. При внимательном изучении, обнаруживаем, что AmmyAdmin.exe имеет оверлей, в котором содержится zip-архив. Он даже не зашифрован, по видимому разработчик считал, что так далеко никто не полезет. И зря. Потому, что внутри этого архива находится файл SAS.exe.
Лирическое отступление:
В момент выпуска Microsoft операционной системы Windows Vista перед разработчиками подобного ПО
возникла серьезная проблема. В связи с усиленной политикой безопасности, код, который раньше использовался для вызова Secure Attention Sequence (она же Ctrl-Alt-Del) перестал работать. Единственным официальным решением было письмо на адрес saslib@microsoft.com с запросом нераспространяемой публично библитеки saslib, с единственной экспортируемой функцией внутри SimulateSAS(). Со временем стали появлятся и альтернативные решения, подробнее можно почитать например здесь.
В частности в UltraVNC реализация вызова SAS находилась в CAD.exe а в TeamViewer 3 и 4 версии - SAS.exe. Странное совпадение с названием файла извлеченного из AmmyAdmin. Или это не совпадение?
Сравним SAS.exe извлеченный из AmmyAdmin и SAS.exe из TeamViewer. Этот файл входил в дистрибутив TeamViewer 3 и 4 версии, благо все версии этого продукта можно скачать на официальном сайте. Начнем с версии 4 и бинго! Файлы практически идентичны, однако есть небольшие различия.
- Изменен записываемый при компиляции путь к pdb-файлу с отладочной информацией. Чтоб никто не догадался! ©

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

- Удален xml-манифест декларирующий нужную для исполнения версию описанной выше библиотеки.

- Удален цифровой сертификат выданный Versign, которым TeamViewer подписывает свои исполняемые файлы и библиотеки.

Вот так он выглядит в свойствах оригинального файла.

В остальных аспектах файлы абсолютны совпадают, не считая нескольких различий в PE-заголовке вызванных удалением сертификата и манифеста. Как говорил Картмен: "Щщщикарно!"
Не менее интересна и переписка на официальном форуме AmmyAdmin:
Ох, не зря волнуются пользователи.
Как видим, автор действительно не любит изобретать велосипеды и любит деньги. К сожалению, он выбрал не лучший способ для достижения своих целей. И если нарушение GPL лицензии практически ничем ему не грозит, то мне очень интересно, как отнесутся разработчики TeamViewer к такому использованию составной части их продукта в ПО конкурентов?
