Исследование защиты программы Dream MKV to AVI Converter
Скриншот программы Dream MKV to AVI Converter
Понадобилось мне тут сконвертировать пару файлов из формата MKV в обычный AVI, но, как ни странно, подходящего инструментария под рукой не нашлось. Есть куча видеоконвертеров, но поддержки MKV в них не было. Гуглояндексы любезно подсказали мне первой же ссылкой программу Dream MKV to AVI Converter. Все бы ничего, но вдруг оказалось, что она требует денег. Пришлось в срочном порядке исправлять это досадное недоразумение.
Итак, скачиваем дистрибутив, устанавливаем, запускаем. В заголовке программы видим строчку "Unregistered". А на ввод неправильных регистрационных данных программа реагирует вот таким сообщением:
Сообщение о неправильной регистрации
Исходные данные собраны. Убеждаемся, что главный исполняемый файл ничем не защищен и не упакован, после чего отправляем его в дизассемблер. Параллельно поищем в файле строку сообщения о неправильной регистрации. Увы, ни поиск в юникоде, ни поиск обычным текстом, результатов не дал. Здесь могут быть два варианта: строки зашифрованы или хранятся где-то в другом месте. Плохой вариант оставим на потом, начнем с глобального поиска строки по всем файлам в папке с установленной программой. Искомая строка обнаруживается в файле Lang.dll. Ну логично, чо. Открываем файл на просмотр и внезапно видим, что это никакая не DLL, а самый обычный текстовый файл в XML-формате.
Строка сообщения в языковом файле
Интересно, что же все-таки побуждает разработчиков запихивать какие-то свои данные в файлы с именами системных библиотек? Если ради спортивного интереса пробежаться по другим dll-файлам в папке с программой, то найдется еще пара-тройка таких же переименованных файлов, не имеющих никакого отношения к PE-формату. Мудачество AS IS. Но сейчас нас интересует строка "Register_Failed", которой соответствует текст сообщения. Очевидно, что она используется для запроса соответствующих данных из XML-файла, и вот эта строка легко обнаруживается в главном исполняемом файле:
Строка в файле
Переходим к дизассемблеру, чтобы посмотреть, где и каким образом эта строка используется.
Code (Assembler) : Убрать нумерацию
- .text:007A2028 call sub_4E82C4
- .text:007A202D mov eax, [ebp+var_40]
- .text:007A2030 lea edx, [ebp+var_3C]
- .text:007A2033 call sub_416A34
- ; Указатель на первую строку
- .text:007A2038 mov edx, [ebp+var_3C]
- ; Указатель на вторую строку
- .text:007A203B mov eax, [ebp+var_C]
- ; Вызвать функцию сравнения двух строк
- .text:007A203E call sub_408A0C
- ; Если строки не равны, то вывести сообщение о неправильной регистрации
- .text:007A2043 jnz short loc_7A209A
- .text:007A2045 lea eax, [ebp+var_44]
- .text:007A2048 push eax
- .text:007A2049 lea edx, [ebp+var_50]
- .text:007A204C mov eax, [ebp+var_10]
- .text:007A204F mov eax, [eax+39Ch]
- .text:007A2055 call sub_4E82C4
- .text:007A205A mov eax, [ebp+var_50]
- .text:007A205D mov [ebp+var_4C], eax
- .text:007A2060 mov [ebp+var_48], 11h
- .text:007A2064 lea eax, [ebp+var_4C]
- .text:007A2067 push eax
- .text:007A2068 lea edx, [ebp+var_54]
- .text:007A206B mov eax, offset off_7A2200
- .text:007A2070 call sub_5F71E0
- .text:007A2075 mov eax, [ebp+var_54]
- .text:007A2078 xor ecx, ecx
- .text:007A207A pop edx
- .text:007A207B call sub_418BAC
- .text:007A2080 mov eax, [ebp+var_44]
- .text:007A2083 mov edx, [ebp+var_10]
- .text:007A2086 call sub_64B0FC
- .text:007A208B mov eax, [ebp+var_10]
- .text:007A208E mov dword ptr [eax+2B8h], 1
- .text:007A2098 jmp short loc_7A20B2
- .text:007A209A ; --------------------------------------
- .text:007A209A loc_7A209A:
- .text:007A209A lea edx, [ebp+var_58]
- ; Вывести сообщение о неправильной регистрации
- .text:007A209D mov eax, offset aRegister_faile
- ; "Register_Failed"
- .text:007A20A2 call sub_5F71E0
- .text:007A20A7 mov eax, [ebp+var_58]
- .text:007A20AA mov edx, [ebp+var_10]
- .text:007A20AD call sub_64B0FC
Указатели на строки в регистрах
Это не что иное, как введенный неправильный серийник и строка, с которой он сравнивается, то есть тоже серийник, только правильный. Копируем правильный серийник, снимаем программу с останова и тут же повторяем регистрацию, но уже с найденной строкой. Повторно стопаримся на точке останова, убеждаемся, что теперь оба регистра ссылаются на одинаковые строки, и получаем полностью зарегистрированную программу:
Программа успешно зарегистрирована
Я реально не могу понять разработчиков, использующих какие-то навороченные алгоритмы преобразований, супер-стойкую криптографию, километровые серийники и тому подобные спецэффекты, если в конечном итоге все сводится к банальному сравнению правильного серийника и введенного.
Программа успешно зарегистрирована
Осталось проверить программу в работе. Никаких водяных знаков на видео не накладывается, ограничений по обработке видео тоже нет, значит цель достигнута. Сама программа, конечно, далека до идеала, с кучей ошибок, но худо-бедно с поставленной задачей справилась. Нужные мне файлы были успешно отконвертированы.
Просмотров: 3224 | Комментариев: 11
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
KaktusTV
(12.10.2015 в 11:12):
Логично, однако таких разработчиков, на мой взгляд, надо всячески холить, лелеять и поддерживать! Их так мало осталось... Все так и норовят какой-нибудь VMProt навесить, гады...
voffka
(12.10.2015 в 09:09):
brute, OllyCopy 0.3 от iLovro
ManHunter
(08.10.2015 в 10:38):
Правый мыш на регистре -> Follow in Dump.
Правый мыш на дампе, в меню можно выбрать режим отображения данных. А потом прямо там скопировать серийник и вставить в блокнотик.
Как-то так.
Правый мыш на дампе, в меню можно выбрать режим отображения данных. А потом прямо там скопировать серийник и вставить в блокнотик.
Как-то так.
brute
(08.10.2015 в 09:39):
ManHunter, самое сложное в этой проге - скопировать значение дампа (на который указывает eax) с правильной строкой - чтобы в ручную не набирать. Как скопировал? Я юзал "ScreenshotReader". Может, в Оле есть такие плагины/вкладки?
Медведь-хохотун
(06.10.2015 в 14:19):
Avidemux - отличная вещь
ManHunter
(06.10.2015 в 14:04):
DRON, спасибо за строчку с параметрами, пригодится. Задача не ежедневная, но мало ли, вдруг опять понадобится.
DRON
(06.10.2015 в 13:30):
Я раньше тоже использовал кучу всяких "Ужа_в_Ежа Converter", но потом разобрался с ffmpeg. Там конечно надо курить полутораметровый мануал, но зато все настройки в виде ком-строки и их можно использовать повторно.
В любом случае, у половины этих "конвертеров" под капотом всё тот же ffmpeg и добавлять к нему GUI-багодром смысла не вижу.
Что-угодно в AVI делается как-то так:
ffmpeg -i "file.mkv" -c:v libxvid -vtag xvid -qscale:v 3 -c:a libmp3lame -qscale:a 9 "file.avi"
В любом случае, у половины этих "конвертеров" под капотом всё тот же ffmpeg и добавлять к нему GUI-багодром смысла не вижу.
Что-угодно в AVI делается как-то так:
ffmpeg -i "file.mkv" -c:v libxvid -vtag xvid -qscale:v 3 -c:a libmp3lame -qscale:a 9 "file.avi"
Muhh -Fly
(06.10.2015 в 11:49):
Беда, что зачастую "хочу много денег" программы кривее фришных.
Но при отсутствии времени и тем более специфических знаний проще найти заломанный продукт, коих мягко говоря много.
Например запустил 5 сек. поиск в Гугле:
Bigasoft MKV Converter 3.7.50.5067 [Multi/Ru] - с кряком
http://nnm-club.me/forum/viewt...php?t=726931
и или подобное.
Приятно читать заметки адекватного программиста, продолжай!
Но при отсутствии времени и тем более специфических знаний проще найти заломанный продукт, коих мягко говоря много.
Например запустил 5 сек. поиск в Гугле:
Bigasoft MKV Converter 3.7.50.5067 [Multi/Ru] - с кряком
http://nnm-club.me/forum/viewt...php?t=726931
и или подобное.
Приятно читать заметки адекватного программиста, продолжай!
ManHunter
(06.10.2015 в 08:25):
Может быть и хорошие, только мне надо было не создавать MKV, а из матрешки сделать нормальный человеческий AVI.
brute
(06.10.2015 в 07:08):
хорошие проги:
mkvtoolnix, AVI MP4 Converter, Aiseesoft Total Media Converter.
mkvtoolnix, AVI MP4 Converter, Aiseesoft Total Media Converter.
Добавить комментарий
Заполните форму для добавления комментария
Для твоей задачи, вполне может подойти и бесплатная. Это скорее оболочка над кучей opensource-программ, но практически все программы такие. Может обрезать, настраивать битрейт и прочее, а если еще залезть глубже - то и менять тонкие настройки в кодеках.
Либо FormatFactory посмотри.