Исследование защиты программы DVD Audio Extractor
Скриншот программы DVD Audio Extractor
DVD Audio Extractor - полезная программа для извлечения аудиодорожек из DVD-дисков. DVD Audio Extractor пригождается, например, когда хочется сделать бутлегерский альбом в формате OGG, MP3, Wave или FLAC из концертного DVD любимой группы. Программа имеет очень простой и удобный интерфейс, работает быстро и качественно. Так что все хорошо за исключением того, что для полноценной работы требуется расстаться с некоторой суммой вечнозеленых денег.
Качаем с офсайта дистрибутив, устанавливаем, запускаем. Сразу получаем окно регистрации с напоминанием о 30-дневном сроке и предложением ввести серийный номер.
Окно регистрации программы
На ввод левых данных программа реагирует сообщением "The registration code you inputed is invalid". Замечательно, поищем строчку в исполняемом файле. Файл ничем не упакован, строка находится без проблем. Небольшая тонкость, что строка записана в юникоде, впрочем как и все остальные текстовые строки внутри файла.
Нехорошая строка найдена
Отправляем файл в дизассемблер и идем наливать себе кружку кофе. Когда дизассемблер закончит работу, посмотрим код, который ссылается на сообщение о неправильной регистрации и попробуем выяснить условия его появления.
Code (Assembler) : Убрать нумерацию
- ...
- .text:0041DF50 push ecx
- .text:0041DF51 mov ecx, offset unk_7BC968
- .text:0041DF56 mov byte ptr [esp+0DCh+var_4], 3
- ; Вызвать процедуру проверки регистрации
- .text:0041DF5E call sub_5F0310
- .text:0041DF63 test al, al
- ; Если она вернула AL=0, то перейти к триальной ветке алгоритма
- .text:0041DF65 jz loc_41E0CC
- ; Регистрация прошла успешно
- .text:0041DF6B lea edx, [esp+0D4h+var_7C]
- .text:0041DF6F push edx
- .text:0041DF70 mov ecx, offset unk_7BC968
- .text:0041DF75 call sub_5EFCE0
- ...
Code (Assembler) : Убрать нумерацию
- ...
- .text:005F0616 push eax
- .text:005F0617 lea ecx, [esp+0ECh+var_7C]
- .text:005F061B call sub_540CF0
- ; Положить на стек адрес строки для проверки
- .text:005F0620 push offset aDa1x ; "DA1X"
- ; Указатель на 4 первых символа введенного серийника
- .text:005F0625 push eax
- .text:005F0626 mov byte ptr [esp+0ECh+var_4], 5
- .text:005F062E call sub_472E60
- .text:005F0633 mov ecx, [esp+0ECh+var_B4]
- ...
Code (Assembler) : Убрать нумерацию
- ...
- .text:005F029B loc_5F029B:
- .text:005F029B mov edx, [esp+3Ch+var_24]
- ; Получить следующий символ из строки в юникоде
- .text:005F029F movsx eax, [esp+3Ch+var_25]
- .text:005F02A4 lea edi, [esi+edx*2]
- .text:005F02A7 cdq
- .text:005F02A8 mov ecx, 19h
- .text:005F02AD idiv ecx
- .text:005F02AF mov esi, edx
- ; В регистре ESI содержится преобразованный символ
- .text:005F02B1 add esi, 41h
- ...
- ; Записать в память младший WORD (юникод) из регистра ESI
- .text:005F02DF mov eax, [esp+3Ch+var_24]
- .text:005F02E3 mov ecx, [esp+3Ch+var_1C]
- .text:005F02E7 inc eax
- .text:005F02E8 mov [edi], si
- ...
Code (Assembler) : Убрать нумерацию
- ...
- ; Указатель на последние 4 символа серийника
- .text:005F073E push eax
- ; Указатель на преобразованную строку
- .text:005F073F lea ecx, [esp+0E8h+var_7C]
- ; Вызвать функцию сравнения строк
- .text:005F0743 call sub_53E7D0
- .text:005F0748 test eax, eax
- ; Установить флаг, в зависимости от результатов сравнения
- .text:005F074A setz bl
- ...
Программа успешно зарегистрирована
Подведем итоги. Длина серийного номера 12 символов. Первые 4 символа номера обязательно должны быть "DA1X", следующие 4 символа произвольные буквы и цифры, а последние 4 символа получаются из предыдущих по формуле: код символа делится на 19h, к остатку прибавляется 41h, это и будет нужный код символа. Имя при регистрации нигде не учитывается и может быть любым, но не менее 4 символов. После ввода найденного серийного номера DVD Audio Extractor благодарит за регистрацию и переходит в нормальный режим работы. Лицензия сохраняется в файл dvdae.lic, который расположен в папке с установленной программой, и после регистрации DVD Audio Extractor становится портативным. Ну а рабочий кейген теперь вы можете написать самостоятельно.
Просмотров: 5326 | Комментариев: 13
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
brute
(22.11.2015 в 23:41):
старая версия 5.2.1(неожиданно!) легко пропатчилась по адресу 0002C9C4 je на jmp, а новая - 7.2.0 (с сайта http://www.dvdae.com/download) ещё легче по адресу 0040CC68 je на jmp. В первом случае понажимал: F4/F7 на call'ы и нашёл переход, которые вызывает наг, а во втором - в иде всё строки открыты. По строке:"30 days trial period passed.." поднялся выше и (с первой же попытки) заменил переход..
ManHunter
(25.03.2012 в 09:25):
там сейчас онлайн-активация, а вот на счет остального не смотрел, может и добавили чего
brute
(25.03.2012 в 06:42):
Версия программы изменилась, и не только в этом дело... "Легкий путь - пропатчить функцию по адресу 005F0310" - не патчится нифига! Программа защищается от изменений и от отладки: пропатченная(особенно в местах критических переходов и функций) не запускается, "чистая" олька палится как отладчик, и бряки на переходы и вызовы не ставятся. Можно отлаживать в OllySND_portable или в отладчике IDA_5.0 с целью разгадать принцип генерации ключа, но "просто пропатчить" здесь не пойдёт.
mrX
(07.08.2010 в 20:35):
Мне кажется, что данный тип статей, для человека хорошо разбирающегося в инструменте реверса данная статья не нужна, а вот тем кто плохо знаком с инструментарием статья, таки тоже мало чем поможет - затруднения "куда жать то".
По смыслу: я знаю куда жать в программе "взлома" = мне уже и так понятна и знакома техника из статьи. Если не знаю, то у меня проблема, с пониманием статьи. Возможно лучше чтобы в статье были указанны комбинации клавиш инструментария взлома, так сказать горячие клавиши.
По смыслу: я знаю куда жать в программе "взлома" = мне уже и так понятна и знакома техника из статьи. Если не знаю, то у меня проблема, с пониманием статьи. Возможно лучше чтобы в статье были указанны комбинации клавиш инструментария взлома, так сказать горячие клавиши.
ManHunter
(05.08.2010 в 11:10):
Isaev, в статье я пишу КАК это делается, и ЧТО надо искать. И если программу каждый раз не переписывают с нуля, то найти те же самые адреса в новой версии не составит большого труда.
Isaev
(05.08.2010 в 02:25):
Дело то не в ключике
ты бы о чём пишешь складывал куда-нибудь, т.к. старую версию попробуй найди потом...
т.к. поменялись все адреса, если человек не шарит он просто в тупике будет, а если шарит ему статья не нужна...
ты бы о чём пишешь складывал куда-нибудь, т.к. старую версию попробуй найди потом...
т.к. поменялись все адреса, если человек не шарит он просто в тупике будет, а если шарит ему статья не нужна...
ManHunter
(04.08.2010 в 08:35):
Isaev, это я статью долго писал, версия успела поменяться :) А ключик подходит.
Isaev
(04.08.2010 в 03:56):
"чтобы в подобного рода статьях отражалась линия мышления хакинга(крекинга)."
mrX, так статья так и построена... По моему всё вполне обосновано!
mrX, так статья так и построена... По моему всё вполне обосновано!
Isaev
(04.08.2010 в 03:27):
За 2 дня уже версию сменили... Палят тебя? )))
Isaev
(03.08.2010 в 23:31):
Вот! Наконец ))) Ты понял о чём я ;)
mrX
(03.08.2010 в 20:43):
Спасибо, за очередную инфу. Но хотелось бы, чтобы в подобного рода статьях отражалась линия мышления хакинга(крекинга). Ведь польза от таких статьей в том, чтобы научить интересующихся понимать суть процесса, углубить их в творчество. А учить клацать кнопки, это не метод. Пусть каждый получить удочку и будет добывать рыбу сам, а давать готовое - плохой пример. Ждём обещанных статей про создание лоадров и патчеров.
Это лишь моё мнение, удачи.
Это лишь моё мнение, удачи.
semiono
(03.08.2010 в 04:36):
Большое спасибо! Всегда эту прогу держу при себе.
Теперь можно ещё и внутри исследовать с пользой!
Теперь можно ещё и внутри исследовать с пользой!
Аноним
(01.08.2010 в 00:36):
Как всегда всё ясно и лаконично. =))
з.ы. HyperSnap доделали?
з.ы. HyperSnap доделали?
Добавить комментарий
Заполните форму для добавления комментария