В Mpeg2DecFilter.cpp присутствует следующий код:
#include "detours.h"
DETOUR_TRAMPOLINE(BOOL WINAPI Real_IsDebuggerPresent(), IsDebuggerPresent);
BOOL WINAPI Mine_IsDebuggerPresent()
{
TRACE(_T("Oops, somebody was trying to be naughty! (called IsDebuggerPresent)\n"));
return FALSE;
}
...snip...
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (!fDetourInited)
{
DetourFunctionWithTrampoline((PBYTE)Real_IsDebuggerPresent, (PBYTE)Mine_IsDebuggerPresent);
...snip...
fDetourInited = true;
}
return DllEntryPoint((HINSTANCE)hModule, ul_reason_for_call, 0); // "DllMain" of the dshow baseclasses;
}
Я не могу понять, почему Gplmpgdec переопределяет IsDebuggerPresent, чтобы всегда возвращать FALSE. Какая возможная польза от этого?
Дело в том, что для меня это вызывает проблемы из-за того, что сообщения отладчика не отображаются и (иногда) происходит сбой приложения, если сообщение трассировки записывается при выгрузке Gplmpgdec DLL.
Чтобы решить, как решить эту проблему, я думаю, мне действительно нужно знать, почему Gplmpgdec это делает. Также приветствуются любые предложения относительно решения. Я бы предпочел не поддерживать свою собственную библиотеку Gplmpgdec; я бы предпочел избежать такой головной боли любой ценой. Есть ли способ отключить объезд?
Это стандартный способ предотвращения реверс-инжиниринга кода, к которому прилагаются драконовские условия лицензии. Для кодеков MPEG нет ничего необычного в том, что они должны платить лицензионный сбор в патентный пул MPEG-LA. Видеть, как такой код перемещается в домен с открытым исходным кодом, потому что никто не хотел с этим мириться, тоже стандартно. У Detours есть такие же условия, кстати, бесплатно для личного использования, но для коммерческого использования требуется уплата роялти.
Это открывает еще одну банку с червями. Меня беспокоит не недавно истекший срок действия патентов MPEG, а часть программного обеспечения, претендующая на лицензию GPL, статически связанная с Detours ... Каковы последствия использования библиотеки DLL или исходного кода? Должен ли я сообщить SourceForge? Будут ли они действовать?
Да, и для ясности, вы говорите, что этот код унаследован от того, что было до того, как он стал GPL? Если да, то как переопределение IsDebuggerPresent предотвращает обратное проектирование? Разве обратный инженер не мог бы просто использовать свой отладчик, чтобы перехватить вызов и сделать вид, что он вернул все, что ему заблагорассудится?
Ханс Пассан, очевидно, Detours больше не требует каких-либо условий: Microsoft опубликовала его по лицензии MIT. github.com/Microsoft/Detours/blob/master/LICENSE.md В качестве альтернативы, я рассматриваю возможность перехода на LAVFilters, поскольку он, похоже, ничего не зацепляет и, следовательно, не создает практических проблем, с которыми я столкнулся. Однако у меня еще не было времени проверить это.





Некоторые фильтры DirectShow на самом деле не работают (специально) при наличии отладчика.
Я не уверен, что это обходной путь для Gplmpgdec или это связано с другой перехваченной функцией; ChangeDisplaySettingsEx. Вы можете ясно видеть ссылки на Macrovision в коде, который они, вероятно, пытаются отключить.
Media Player Classic / MPC-HC использует тот же тип кода, и он имеет больше смысла в .exe, чем в библиотеке декодера.
Учитывая, что Gplmpgdec сам по себе является декодером, я не могу себе представить это объяснение. Если автор пытался повлиять на поведение фильтров Другие DirectShow, почему он не добавил к этому эффекту комментарий?
Я не исследовал объездные пути ChangeDisplaySettingsEx. Опять же, комментарий мог быть там полезен.
Я также был удивлен, увидев этот код в проекте с открытым исходным кодом.
Думаю, это просто шутка разработчика. Если вы посмотрите сообщение
Oops, somebody was trying to be naughty!
для меня это вторая степень, и, возможно, разработчик только что открыл для себя IsDebuggerPresent и нашел забавным его использовать ...
Я также помню, что во время создания этого кодека некоторые видеокодеки препятствовали отладке приложения DirectShow (с использованием графа фильтров). Может, этот разработчик из одной из этих компаний ...
чтобы справиться с этой проблемой, вам просто нужно прокомментировать этот код и перекомпилировать его.
Связанный: blogs.msdn.microsoft.com/oldnewthing/20180604-00/?p=98905