Исследование защиты программы Ultra Audio Ripper
Скриншот программы Ultra Audio Ripper
Программа Ultra Audio Ripper предназначена для извлечения звуковых дорожек из видеофайлов различных форматов. Иногда бывает полезно когда, например, надо сделать MP3-альбом из концертного DVD, или что-то подобное. Без регистрации имеются ограничения, будем с ними бороться.
Забираем с офсайта дистрибутив, устанавливаем, запускаем, смотрим. На ввод произвольных регистрационных данных программа реагирует следующим сообщением:
Сообщение о неправильной регистрации
Главный исполняемый файл ничем не защищен, отправим его в дизассемблер и попутно поищем строчку сообщения. Найдется одна юникодная строка:
Строка сообщения в файле
По перекрестным ссылкам в дизассемблере выходим на код, где эта строка используется:
Code (Assembler) : Убрать нумерацию
- CODE:005385BE mov eax, ebx
- ; Вызвать функцию проверки регистрации
- CODE:005385C0 call sub_53877C
- CODE:005385C5 test eax, eax
- CODE:005385C7 jz short loc_5385E2
- CODE:005385C9 mov edx, offset aThankYouForReg
- ; "Thank you for registration! All limitat"...
- CODE:005385CE mov eax, [ebx+35Ch]
- CODE:005385D4 call sub_4CC888
- CODE:005385D9 mov eax, ebx ; this
- CODE:005385DB call sub_538964
- CODE:005385E0 jmp short loc_538600
- CODE:005385E2 ; ---------------------------------------------------
- CODE:005385E2 loc_5385E2:
- CODE:005385E2 mov edx, offset aInvalidRegistr
- ; "Invalid registration code!"
- CODE:005385E7 mov eax, [ebx+35Ch]
- CODE:005385ED call sub_4CC888
- CODE:005385F2 mov eax, [ebx+33Ch]
- CODE:005385F8 mov edx, [eax]
Первый и самый простой вариант решения проблемы с шароварностью - патч функции проверки. Достаточно записать пару команд MOV EAX,1 и RET в ее начало, чтобы любой серийный номер принимался как правильный.
Программа успешно "зарегистрирована"
Хорошо и быстро, даже сгодится для домашнего использования. Но в качестве полноценного релиза не так красиво, как некоторым хотелось бы. Поэтому попробуем обратить функцию проверки регистрации, чтобы выяснить алгоритм генерации правильных серийный номеров. Запускаем программу под отладчиком, ставим точку останова на начало функции проверки и повторяем процесс регистрации.
Code (Assembler) : Убрать нумерацию
- CODE:005387BD mov eax, [ebp+var_8]
- ; Посчитать длину серийного номера
- CODE:005387C0 call unknown_libname_90
- ; Если она не равна 16h (22 dec), то вернуть ошибку
- CODE:005387C5 cmp eax, 16h
- CODE:005387C8 jnz loc_53892B
- CODE:005387CE lea ecx, [ebp+var_14]
- CODE:005387D1 mov edx, 3
- CODE:005387D6 mov eax, [ebx+42Ch]
- ; Взять первые три символа серийного номера
- CODE:005387DC call unknown_libname_648
- CODE:005387E1 mov eax, [ebp+var_14]
- CODE:005387E4 mov edx, offset _str_UAR.Text
- ; Сравнить их со строкой "UAR"
- CODE:005387E9 call @System@@LStrCmp$qqrv
- ; Если не равно, то вернуть ошибку
- CODE:005387EE jnz loc_53892B
- CODE:005387F4 lea ecx, [ebp+var_8]
Code (Assembler) : Убрать нумерацию
- CODE:0053881D loc_53881D:
- CODE:0053881D mov eax, [ebp+var_8]
- CODE:00538820 mov bl, [eax+esi]
- CODE:00538823 cmp bl, 2Dh
- CODE:00538826 jz short loc_53883D
- CODE:00538828 lea eax, [ebp+var_18]
- CODE:0053882B mov edx, ebx
- CODE:0053882D call unknown_libname_85
- CODE:00538832 mov edx, [ebp+var_18]
- CODE:00538835 lea eax, [ebp+var_C]
- CODE:00538838 call @System@@LStrCat$qqrv
- CODE:0053883D loc_53883D:
- CODE:0053883D inc esi
- CODE:0053883E cmp esi, 13h
- CODE:00538841 jnz short loc_53881D
- CODE:00538843 lea eax, [ebp+var_8]
- CODE:00538846 mov edx, [ebp+var_C]
- CODE:00538849 call @System@@LStrLAsg$qqrpvpxv
- CODE:0053884E lea eax, [ebp+var_C]
- CODE:00538851 call @System@@LStrClr$qqrpv
- CODE:00538856 mov eax, [ebp+var_8]
- CODE:00538859 call unknown_libname_90
- CODE:0053885E cmp eax, 10h
- CODE:00538861 jnz loc_53892B
- CODE:00538867 xor esi, esi
Code (Assembler) : Убрать нумерацию
- CODE:00538869 loc_538869:
- CODE:00538869 mov eax, esi
- CODE:0053886B and eax, 80000001h
- CODE:00538870 jns short loc_538877
- CODE:00538872 dec eax
- CODE:00538873 or eax, 0FFFFFFFEh
- CODE:00538876 inc eax
- CODE:00538877 loc_538877:
- CODE:00538877 test eax, eax
- CODE:00538879 jnz short loc_538896
- CODE:0053887B lea eax, [ebp+var_1C]
- CODE:0053887E mov edx, [ebp+var_8]
- CODE:00538881 mov dl, [edx+esi]
- CODE:00538884 call unknown_libname_85
- CODE:00538889 mov edx, [ebp+var_1C]
- CODE:0053888C lea eax, [ebp+var_10]
- CODE:0053888F call @System@@LStrCat$qqrv
- CODE:00538894 jmp short loc_5388AF
- CODE:00538896 ; ----------------------------------
- CODE:00538896 loc_538896:
- CODE:00538896 lea eax, [ebp+var_20]
- CODE:00538899 mov edx, [ebp+var_8]
- CODE:0053889C mov dl, [edx+esi]
- CODE:0053889F call unknown_libname_85
- CODE:005388A4 mov edx, [ebp+var_20]
- CODE:005388A7 lea eax, [ebp+var_C]
- CODE:005388AA call @System@@LStrCat$qqrv
- CODE:005388AF loc_5388AF:
- CODE:005388AF inc esi
- CODE:005388B0 cmp esi, 10h
- CODE:005388B3 jnz short loc_538869
- CODE:005388B5 lea eax, [ebp+var_4]
- CODE:005388B8 call @System@@LStrClr$qqrpv
- CODE:005388BD xor esi, esi
Code (Assembler) : Убрать нумерацию
- CODE:005388E6 lea edx, [ebp+var_28]
- ; Указатель на строку с нечетными символами
- CODE:005388E9 mov eax, [ebp+var_10]
- ; Посчитать MD5 от строки
- CODE:005388EC call sub_52BC64
- CODE:005388F1 mov edx, [ebp+var_28]
- CODE:005388F4 lea eax, [ebp+var_10]
Code (Assembler) : Убрать нумерацию
- CODE:005388F7 call @System@@LStrLAsg$qqrpvpxv
- CODE:005388FC lea ecx, [ebp+var_2C]
- CODE:005388FF mov edx, 8
- CODE:00538904 mov eax, [ebp+var_10]
- CODE:00538907 call sub_439BC0
- CODE:0053890C mov edx, [ebp+var_2C]
- CODE:0053890F lea eax, [ebp+var_10]
- CODE:00538912 call @System@@LStrLAsg$qqrpvpxv
- CODE:00538917 mov eax, [ebp+var_4]
- CODE:0053891A mov edx, [ebp+var_10]
- CODE:0053891D call @System@@LStrCmp$qqrv
- CODE:00538922 jnz short loc_538929
- CODE:00538924 or edi, 0FFFFFFFFh
- CODE:00538927 jmp short loc_53892B
Программа успешно зарегистрирована
Таким образом, корректный серийник будет, например, "UAR02-0F060-E0A03-0109". После разбора алгоритма вы можете теперь написать кейген самостоятельно.
Просмотров: 1966 | Комментариев: 6
Метки: исследование защиты, мультимедиа
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
xuser
(18.11.2017 в 12:43):
Нечего туткейгенет ноп с переходом и все....
wet
(18.11.2017 в 11:40):
Вот не могу я понять все эти изуверства с придумыванием таких "супер алгоритмов" для генерирования серийного номера. Особо бессмысленно выглядит это занятие, если программа ни чем не защищена. Для любого честного человека более чем достаточно просто скажем проверять хеш вводимого серийника, полученный любым стандартным способом. Для "нечестного" пытливого ума нет смысла выдумывать такой мозговыверт, если всё можно решить простой подменой результата с 0 на 1 или типа того.
ManHunter
(08.11.2017 в 23:45):
Лишаешь радости аффтора, освоившего движок скинов :)
Vladimir
(08.11.2017 в 20:26):
Я за такие интерфейсы, как у этой софтины, руки рвал бы! Кругленькое всё, синенькое... А как цветовая схема чуть изменена, так и ползёт вся эта красивость.
ManHunter
(08.11.2017 в 14:16):
Так это же подопытный кролик, а не рекомендованная для использования софтина. DVD Audio Extractor рулит.
pawel97
(08.11.2017 в 14:09):
Насколько понял, в отличие от DVD Audio Extractor, не умеет делить на главы (актуально для dvd с сотней клипов) и сохранять без перекодирования в оригинальном aac формате. Для остального сгодится любой нормальный аудиоредактор (тот же GoldWave).
Добавить комментарий
Заполните форму для добавления комментария