Плагин накрыт протектором VMPROTECT:
darkspawn.dll packed by VMPROTECT
Файл запакован и просто так ничего не видно. Впрочем сдампить его труда не составляет.
В дампе уже обнаруживаются намеки на его деятельность, например такие строки:
Host: darkspawn.net
HTTP/1.1
GET /ts_guard.php?k=
Гугление показало, что остальные строки по большей части принадлежат примеру плагина из дистрибутива тимспика, а также библиотеке cryptopp.
Очевидно, что плагин авторизуется на серваке даркспавна через http, отсылая какой-то идентификатор, по видимому для допуска в тс. Делается это в функции ts3plugin_init.
К счастью большая часть кода оказалась не затронутой вмпротектом, что давало надежду найти что-то интересное.
Поскольку плагин сделан из примера с общедоступными исходниками при этом практически не измененного, найти секреты можно просто сравнив код дллки и плагина.
Большая часть функций 1 в 1 соответствовали примеру. Автор даже не потрудился выпилить всякие тестовые меню с ничего не делающими функциями. Разве что "Test Plugin" заменил на "Darkspawn".
Внимание привлекла функция ts3plugin_onEditPlaybackVoiceDataEvent.
Судя по названию и аргументам (см.пример плагина) она используется для обработки звука.
Чтоб разобратся, что же она делает, я написал свою версию тимспика :troll: :
typedef void ts3plugin_onEditPlaybackVoiceDataEvent(unsigned __int64 serverConnectionHandlerID, int clientID, short* samples, int sampleCount, int channels);
HANDLE hdll=LoadLibrary("darkspawn.dll");
ts3plugin_onEditPlaybackVoiceDataEvent * ts3plugin_onEditPlaybackVoiceDataEventPtr=(ts3plugin_onEditPlaybackVoiceDataEvent *)GetProcAddress(hdll,"ts3plugin_onEditPlaybackVoiceDataEvent");
WORD * IdPtr=(WORD *)((DWORD)hdll+0x2A3F0);
short buf[20000];
for (int i=0;i<10000;i++)buf[i]=10000;
for (int i=10000;i<20000;i++)buf[i]=-10000;
*IdPtr=1;//это передаваемый Id
ts3plugin_onEditPlaybackVoiceDataEventPtr(0,0,buf,20000,0);
for (int i=0;i<20000;i++)printf("%d\n",buf[i]);
Всякие инклуды и прочее стандартное проскипано.
Запуск выявил, что инициализированный константой массив оказался модулирован синусом.
Поигравшись со значением Id, удалось определить принцип кодирования - 16битное число кодируется по 1 полупериоду на бит, при этом частота у 0 в 2 раза выше чем у 1, передается старшим битом вперед.
Вот графики сигнала для значений Id 0, 1, 2, 4, 8:
Само же Id по видимому отдает сервер, плагин получает его функцией ts3client_getClientVariableAsInt(...,32,...) при инициализации.
Больше пока что ничего подозрительного не обнаружилось, впрочем это не означает что больше ничего нет. Библиотека cryptopp по видимому используется для авторизации на сервере.
Таким образом цель плагина - подмешивать некие идентификаторы в звук, по видимому для разоблачения шпионов по выложенным записям ТСа.
При логине плагин авторизуется на сервере даркспавнов, получает ид юзера и доступы. Полученное ид периодически подмешивается в принимаемый звук. На сервере очевидно хранится таблица Id <-> user.
Качество исполнения плагина оставляет желать лучшего - в тестовом примере перебиты только копирайты и выше указанные функции. Куча тестовых хвостов, которые не потрудились даже вычистить. Как работает протектор тоже не разобрались, что позволило легко провести анализ. Короче кодеры у даркспавнов не лучше пвпшников, так что врятли там еще что-то скрыто, хотя вероятность остается.
Приведенный выше код позволяет любому желающему с опытом программирования уровня hello world проверить предоставленную инфу. Ингейм ник указан верно.
Сообщение отредактировал Darth Fett: 06 August 2014 - 18:51