Исследование защиты программы Advanced Biorhythms
Скриншот программы Advanced Biorhythms
Программа Advanced Biorhythms предназначена для расчета персональных биоритмов на месяц, а также тестирования совместимости людей по их биоритмам. Без регистрации работает всего месяц и не дает выводить данные календаря в печатном виде. Ну ничего, если верить программе, сегодня у меня интеллектуальный подъем, попробуем провести время с пользой.
Забираем с офсайта дистрибутив, устанавливаем, запускаем, смотрим. В главном окне программы обнаруживается надпись об оставшемся триальном сроке, а в окне "О программе" стоит статут "UNREGISTERED". При попытке регистрации левыми данными появляется сообщение:
Сообщение о неправильной регистрации
Попытки поискать это сообщение как в ANSI, так и в юникоде, не приводят ни к чему. А вот надпись "Reminder" дает интересный результат поиска:
Строка в файле
Точнее не она сама, а прочие строки в файле. Среди вполне нормальных надписей встречаются какая-то бредятина типа "DERETSIGERNU", ".troppus tcatnoc esaelP" и подобных. Не надо быть мастером ребусов чтобы догадаться, что это просто строки "UNREGISTERED" и "Please contact support.", записанные задом-наперед. Миленький прикол от разработчиков. Если еще полистать файл, то обнаружится, что все строки, так или иначе относящиеся к регистрации, триальности и тому подобному, зашифрованы этим же способом. А вот и интересующая нас строка:
Строка сообщения в файле
Посмотрим в дизассемблере код, где она используется. Вы же не забыли отправить главный исполняемый файл в дизассемблер?
Code (Assembler) : Убрать нумерацию
- .text:0040E1A2 push esi ; lpString
- .text:0040E1A3 lea ecx, [ebp+var_14]
- .text:0040E1A6 mov byte ptr [ebp+var_4], 1
- .text:0040E1AA call sub_42A09B
- .text:0040E1AF push offset a_troppusRofUoy
- ; ".troppus rof uoy knahT"
- .text:0040E1B4 lea ecx, [ebp+lpText]
- .text:0040E1B7 mov byte ptr [ebp+var_4], 2
- .text:0040E1BB call sub_42A09B
- .text:0040E1C0 push offset a_niagaYrtNehtY
- ; ".niaga yrt neht ,yek dna eman ruoy kceh"...
- .text:0040E1C5 lea ecx, [ebp+var_1C]
- .text:0040E1C8 mov byte ptr [ebp+var_4], 3
- .text:0040E1CC call sub_42A09B
- .text:0040E1D1 push offset a_hctamTonOdYek
- ; ".hctam ton od yek dna eman noitartsiger"...
- .text:0040E1D6 lea ecx, [ebp+var_1C]
- .text:0040E1D9 mov byte ptr [ebp+var_4], 4
- .text:0040E1DD call sub_42A3A3
- .text:0040E1E2 push 1
Code (Assembler) : Убрать нумерацию
- .text:0040E31F push 0 ; char **
- .text:0040E321 push eax ; char *
- .text:0040E322 call _strtol
- .text:0040E327 movzx ecx, word ptr [ebp+var_20]
- .text:0040E32B add esp, 0Ch
- .text:0040E32E cmp ecx, eax
- ; Серийник неправильный
- .text:0040E330 jnz loc_40E412
- ; Сохранить регистрационные данные
- .text:0040E336 xor esi, esi
- .text:0040E338 lea ecx, [ebp+var_40] ; this
- .text:0040E33B push esi
- .text:0040E33C push 1001h ; unsigned int
- .text:0040E341 push offset aAb_key ; "ab.key"
- .text:0040E346 call ?Open@CFile@@UAEHPBDIPAVCFileException
Программа принимает серийный номер
Цель кажется достигнутой, но при перезапуске программы получаем очередной прикол от разработчиков:
Сообщение о неправильном ключе
Возвращаемся в дизассемблер, находим код, где эти строки расшифровываются и выводятся на экран:
Code (Assembler) : Убрать нумерацию
- .text:0040491B mov [ebp+var_4], edi
- .text:0040491E call sub_40DF77
- .text:00404923 lea eax, [ebx+74h]
- .text:00404926 mov byte ptr [ebx+5Ch], 1
- .text:0040492A mov dword ptr [ebx+7Ch], 5Fh
- .text:00404931 push eax ; CString *
- .text:00404932 lea ecx, [ebp+var_28]
- .text:00404935 mov byte ptr [ebp+var_4], 2
- .text:00404939 mov dword ptr [ebx+78h], 1Eh
- .text:00404940 call sub_40E7A6
- .text:00404945 mov [ebx+7Ch], eax
- .text:00404948 cmp eax, 0Ah
- .text:0040494B jz loc_404A6A
- .text:00404951 cmp eax, 14h
- .text:00404954 jz loc_4049DA
- .text:0040495A cmp eax, 1Eh
- .text:0040495D jnz loc_404A71
- .text:00404963 push offset a_troppusTcatno
- ; ".troppus tcatnoc esaelP "
- .text:00404968 lea ecx, [ebp+lpNewItem]
- .text:0040496B call sub_42A09B
- .text:00404970 push offset a_dilavRegnolOn
- ; ".dilav regnol on si gnisu era uoy yek n"...
- .text:00404975 lea ecx, [ebp+lpNewItem]
- .text:00404978 mov byte ptr [ebp+var_4], 4
- .text:0040497C call sub_42A3A3
- .text:00404981 lea ecx, [ebp+lpNewItem]
Программа успешно "зарегистрирована"
Никаких предупреждений не выводится, программа запускается и работает без каких-либо ограничений. Цель достигнута. Похожим способом обходятся защиты и на остальных продуктах этого разработчика.
Просмотров: 1325 | Комментариев: 6
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Лестер Глючный
(05.12.2022 в 13:51):
Во времена XP SP2 вполне довольствовались другой, абсолютно бесплатной, «именитой» программы:
http://grishagames.narod.ru/grisha.html (удивительно, сайт до сих пор жив!)
Вот только то ли на висте, то ли на XP SP3 её стало невозможно использовать, т.к. сразу же при запуске постоянно вываливает:
Integer overflow
Локализация зашита намертво, да ещё и в "ANSI 1251"… и его Names.dat и Prikol.dat непонятно как "закодированы"…
Вот так вот, несмотря на свою "бесплатность", разработчик Григорий Добрушкин встроил всё-таки какую-то странную защиту, чтоб использовать её могли только русскоговорящие…
http://grishagames.narod.ru/grisha.html (удивительно, сайт до сих пор жив!)
Вот только то ли на висте, то ли на XP SP3 её стало невозможно использовать, т.к. сразу же при запуске постоянно вываливает:
Integer overflow
Локализация зашита намертво, да ещё и в "ANSI 1251"… и его Names.dat и Prikol.dat непонятно как "закодированы"…
Вот так вот, несмотря на свою "бесплатность", разработчик Григорий Добрушкин встроил всё-таки какую-то странную защиту, чтоб использовать её могли только русскоговорящие…
Vnv
(29.04.2021 в 18:32):
ManHunter, только я не умею так красиво и лаконично описывать процесс нахождения всей инфы для кейгена, все на интуиции, и опыт. "Чукча не писатель, чукча - читатель" (это я о себе). ;)
ManHunter
(29.04.2021 в 10:16):
Vnv, годная годнота, красава :)
Vnv
(29.04.2021 в 08:31):
Vnv
(25.04.2021 в 15:11):
Возможен и кейген, ничего сложного (уровень не для новичков):
Vnvvnv
wRTwR59YW2wY63C6CwHYY
Интересно было бы почитать именно о разборе алгоритма, я люблю поменьше патчить. ;)
Vnvvnv
wRTwR59YW2wY63C6CwHYY
Интересно было бы почитать именно о разборе алгоритма, я люблю поменьше патчить. ;)
Добавить комментарий
Заполните форму для добавления комментария
Когда-то попалась мне программка, ещё для DOS'а
- так та как ни странно показывала адекватные результаты по совместимости людей.
Позже замантулил её реализации для WIN32, GUI и для Андроида.
Рекомендую -
http://old-dos.ru/index.php?pa...show&id=3366