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

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

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

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

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

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

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Arttomov
(02.05.2017 в 18:33):
Интересный номер:)

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

addhaloka
(24.04.2017 в 12:18):
ManHunter, видимо что-то древнее (помнится, читал статью мыщъха где-то лет 15 - 13 назад, емнип, для фикса вроде достаточно просто обнулить checksum и всё?) или осталось, как рудимент?
В любом случае непонятно, нафига сейчас эту "защиту" юзают - если что-то есть на эту тему, то обычно похитрей реализовано и простым фиксом crc не обойтись.
В любом случае непонятно, нафига сейчас эту "защиту" юзают - если что-то есть на эту тему, то обычно похитрей реализовано и простым фиксом 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]
...
Ради интереса попробовал сделать фикс на асме - оказалось элементарно, на основе функции 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, так ещё и защита не своя. Программист, чо :)

Добавить комментарий
Заполните форму для добавления комментария
