Blog. Just Blog

Исследование защиты программы Direct MP3 Joiner

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы Direct MP3 Joiner
Скриншот программы Direct MP3 Joiner

Программа Direct MP3 Joiner позволяет соединять несколько MP3-файлов в единый файл, предварительно отсортировав их в нужном порядке. При этом битрейт отдельных треков может быть разный. Полезный инструмент, например, для слияния аудиокниг в один файл. Но выкладывать двадцатку баксов за очередную надстройку над бесплатными библиотеками BASS и LAME лично мне как-то не хочется.

Начинаем с загрузки дистрибутива. После установки смотрим на основной исполняемый файл. Он явно чем-то упакован. Попробуем его запустить.

Триальное окно навесной защиты
Триальное окно навесной защиты

Сперва открывается маленькое окно "Loading...", а затем большое окно с триальным напоминанием. Если вы имеете опыт в разборе защит, то легко опознаете в этом "загрузчике" стандартное окно навесной защиты Armadillo. Если сомневаетесь, то любой анализатор файлов вам в этом поможет.

Файл успешно распакован
Файл успешно распакован

Если триальный срок еще не истек, то ArmaGeddon поможет избавиться от навесной защиты. После этого можете отрезать от распакованного файла ненужные секции при помощи CFF Explorer. Пробуем запустить распакованный файл.

Сообщение о поврежденном файле
Сообщение о поврежденном файле

Здрасьте-приехали. Но это сообщение точно не относится к навесной защите, это уже что-то внутри распакованной программы. Но прежде чем открывать отладчики и дизассемблеры, задействуем логику. Если программа проверяет целостность файла, и при этом на ней навесной протектор, который гарантированно меняет контрольную сумму исходного файла, то контрольная сумма должна храниться где-то в самом файле. Например, в стандартном поле заголовка PE-файла. Открыв заголовок в любой программе для работы с PE-форматом, видим, что поле контрольной суммы имеет ненулевое значение. Похоже, что догадка верна.

Исправляем контрольную сумму файла
Исправляем контрольную сумму файла

Осталось исправить контрольную сумму. У меня под рукой для этих целей всегда есть плагин для PEiD под названием FixCRC. Исправляем значение на новое, сохраняем изменения. Запускаем программу. На этот раз все нормально. Все триальные ограничения и регистрация были выполнены средствами навесной защиты, после ее снятия и дополнительной корректировки исполняемого файла, вы можете пользоваться программой без каких-либо ограничений. Цель достигнута.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 889 | Комментариев: 7

Комментарии

Отзывы посетителей сайта о статье
Arttomov (02.05.2017 в 18:33):
Интересный номер:)
ManHunter (24.04.2017 в 13:09):
Насколько я помню историю этого поля заголовка, для обычных файлов логика была следующая: если поле нулевое, то не проверять вообще, если не нулевое, то проверить целостность файла и предпринять какие-то действия в случае несовпадения. Что-то вроде зародыша современной цифровой подписи, наверное. MSDN, кстати, весьма интересно пишет по этому поводу:
https://msdn.microsoft.com/en-...=vs.85).aspx

ЦитатаCheckSum

    The image file checksum. The following files are validated at load time: all drivers, any DLL loaded at boot time, and any DLL loaded into a critical system process.

А тут сама компонента юзает это поле для проверки.
addhaloka (24.04.2017 в 12:18):
ManHunter, видимо что-то древнее (помнится, читал статью мыщъха где-то лет 15 - 13 назад, емнип, для фикса вроде достаточно просто обнулить checksum и всё?) или осталось, как рудимент?
В любом случае непонятно, нафига сейчас эту "защиту" юзают - если что-то есть на эту тему, то обычно похитрей реализовано и простым фиксом crc не обойтись.
kaktustv (24.04.2017 в 10:16):
Я просто сравнивал сумму саму с собой. Старую, новую... не помню.
ManHunter (24.04.2017 в 00:42):
addhaloka, там юзается какая-то готовая компонента, обеспечивающая эту "защиту".
addhaloka (24.04.2017 в 00:39):
Защита по контрольной сумме - это сильно. Наверно, потому редко встречается.)))
Ради интереса попробовал сделать фикс на асме - оказалось элементарно, на основе функции PatchFile (из snr_patchengine от diablo2oo2), которую пришлось совсем немного изменить. Другое дело, что в большинстве патчей это нафиг не нужно.
...
invoke GetProcAddress,eax,szCheckSumMappedFile ; CheckSumMappedFile из imagehlp.dll
test eax,eax
je  @F
mov  edi,eax
lea  ebx,[local_oldSum]
lea  ecx,[local_newSum]
stdcall edi,[local_hViewOfFile],[local_filesize],ebx,ecx
test eax,eax
je  @F
mov  edx,[local_newSum]
cmp  [local_oldSum],edx
je  @F
; [eax+58h] = [eax].IMAGE_NT_HEADERS.OptionalHeader.CheckSum на масм32, на фасм лень правильно оформлять, хотя конечно надо бы
mov  [eax+58h],edx
@@:
invoke FreeLibrary,[local_hMod]
.close_local_hViewOfFile:
invoke UnmapViewOfFile,[local_hViewOfFile]
...
pawel97 (17.04.2017 в 17:35):
Мало того, что работает засчёт bass и lame, так ещё и защита не своя. Программист, чо :)

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.05 сек. / MySQL: 2 (0.0032 сек.) / Память: 4.5 Mb
Наверх