Исследование защиты программы Axialis IconWorkshop
Скриншот программы Axialis IconWorkshop
Axialis IconWorkshop - мощный графический редактор от известной компании-производителя коммерческих иконок. Предназначен для создания иконок и их редактирования. Множество эффектов, настроек, многооконный режим работы, поддержка библиотек иконок и другие возможности делают этот редактор настоящим профессиональным инструментом для дизайнеров. Всю радость портит только шароварность программы, то есть необходимость выкладывать за нее деньги.
Забираем с офсайта дистрибутив последней версии, устанавливаем, смотрим. Главный исполняемый файл ничем не упакован, сразу отправляем его на разбор в дизассемблер. Запускаем программу, смотрим на внешние проявления триальности. При старте сразу появляется предупреждение, что после 30 дней карета превратится в тыкву, а вотпрямщаз было бы неплохо метнутся в кассу и оплатить требуемую сумму. Но 70 евро точно не лишние, перебьются. Соглашаемся на пробный период без активации, открываем окно "О программе".
Окно "О программе"
Тут нас просят не делать незаконных копий программы, иначе грозятся грандиозной вздрючкой по всей строгости закона. А еще тут есть очень приметная строка о триальном статусе. Хорошая зацепка для разбора, давайте поищем ее в файле.
Строка в ресурсах
Строка быстро обнаруживается в ресурсах, ее числовой индекс получается 906 или 38Ah, если в шестнадцатеричной системе. Теперь поищем в листинге место, где такой индекс используется.
Code (Assembler) : Убрать нумерацию
- .text:0041285D call sub_8387A0
- .text:00412862 add esp, 0Ch
- .text:00412865 lea ecx, [esp+89Ch+var_890]
- .text:00412869 call sub_44FB30
- .text:0041286E mov [esp+89Ch+var_4], 0
- ; Проверить значение переменной в памяти
- .text:00412879 cmp dword_A7E63C, 0
- ; Если оно нулевое, то вывести строку триального статуса
- .text:00412880 jz loc_412970
- .text:00412886 push 0
- .text:00412888 push offset Default
- .text:0041288D lea ecx, [esp+8A4h+var_488]
- .text:00412894 call loc_41A020
- .text:00412899 mov eax, dword_A842F8
- .text:0041289E lea ecx, [esp+89Ch+var_488]
- ...
- ...
- ...
- .text:00412970 loc_412970:
- ; Загрузить из ресурсов строку с индексом 38Ah
- .text:00412970 push 38Ah
- .text:00412975 call sub_705F6E
- .text:0041297A test eax, eax
- .text:0041297C jz short loc_412990
- .text:0041297E push 38Ah
- .text:00412983 push eax
- .text:00412984 lea ecx, [esp+8A4h+var_488]
- .text:0041298B call loc_419E80
Code (Assembler) : Убрать нумерацию
- .text:0040C36A mov ecx, edi
- .text:0040C36C push 0
- .text:0040C36E push offset aDontremindregi
- ; "DontRemindRegistration"
- .text:0040C373 push offset aRegistration
- ; "registration"
- .text:0040C378 call dword ptr [eax+7Ch]
- .text:0040C37B mov dword_A7E630, eax
- .text:0040C380 mov edx, offset aSoftwareClasse
- ; "Software\\Classes\\IcoFile\\DefaultIcon"
- .text:0040C385 xor eax, eax
- .text:0040C387 mov ecx, 80000001h ; hKey
- .text:0040C38C mov word ptr [ebp+Data], ax
- .text:0040C393 lea eax, [ebp+Data]
- .text:0040C399 push eax ; lpData
- .text:0040C39A push offset aPictureindex ; "PictureIndex"
- .text:0040C39F call sub_439FE0
- .text:0040C3A4 mov ax, word ptr [ebp+Data]
- .text:0040C3AB add esp, 8
- .text:0040C3AE cmp ax, 32h
- .text:0040C3B2 jnz short loc_40C3BB
- .text:0040C3B4 mov esi, 2
- .text:0040C3B9 jmp short loc_40C3FF
- .text:0040C3BB ; ---------------------------------------
- .text:0040C3BB loc_40C3BB:
- .text:0040C3BB cmp ax, 33h
- .text:0040C3BF jnz short loc_40C3DC
- .text:0040C3C1 mov esi, 3
- .text:0040C3C6 mov dword_A7E63C, 1
- .text:0040C3D0 mov dword_A7E638, 0
- .text:0040C3DA jmp short loc_40C3FF
- .text:0040C3DC ; ---------------------------------------
- .text:0040C3DC loc_40C3DC:
- .text:0040C3DC cmp ax, 34h
- .text:0040C3E0 jnz short loc_40C3FD
- .text:0040C3E2 mov esi, 4
- .text:0040C3E7 mov dword_A7E63C, 1
- .text:0040C3F1 mov dword_A7E638, 1
- .text:0040C3FB jmp short loc_40C3FF
- .text:0040C3FD ; ---------------------------------------
- .text:0040C3FD loc_40C3FD:
- .text:0040C3FD xor esi, esi
- .text:0040C3FF loc_40C3FF:
- .text:0040C3FF mov eax, dword_A7E380
- .text:0040C404 xor bl, bl
- .text:0040C406 test eax, eax
Программа успешно "зарегистрирована"
Окно с предложением ввести серийник при старте программы пропало, в окне "О программе" исчезли все нехорошие надписи, перевод системного времени на работоспособность редактора никак не влияет. Цель достигнута.
Просмотров: 2500 | Комментариев: 10
Метки: исследование защиты, иконки
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(27.10.2020 в 19:52):
На скринах видно название всех инструментов. Если не нашлось в одной программе, то ищу в другой. А через какое меню или хоткей искать - это все должно быть в справке по этим программам.
Игорь
(27.10.2020 в 19:47):
Сможете написать сводную статью для новичков (сейчас это слово звучит по-новому)) ) о поиске строк? Какими инструментами и приемами пользуетесь. И потом как этими результатами поисков пользоваться в отладчике или дизассемблере. Как именно в листинге ищутся смещения, строки и т.п. нужные вещи.
voffka
(22.10.2020 в 15:37):
Для любителей серийников:
В каждом блоке серийного номера, пример которого есть в окне ввода, проверяется только последний символ. Чтоб подобрать "правильный" номер, нужно в отладчике поставить бряк на 0059680D CMP EDI,ECX, где в ECX введенный последний символ блока, в EDI правильный.
Не пускаем программу в интернет.
В каждом блоке серийного номера, пример которого есть в окне ввода, проверяется только последний символ. Чтоб подобрать "правильный" номер, нужно в отладчике поставить бряк на 0059680D CMP EDI,ECX, где в ECX введенный последний символ блока, в EDI правильный.
Не пускаем программу в интернет.
1
(22.10.2020 в 11:26):
Просто таки напичкана иконками ха!
ManHunter
(21.10.2020 в 16:50):
А там файл справки на 8 мегов и куча иконок. Для работы достаточно одного файла IconWorkshop.exe.
user
(21.10.2020 в 16:46):
Что-то слишком много получается - инсталляшка 38 мегабайт
ManHunter
(20.10.2020 в 19:22):
Можно и так. Чаще всего вариантов бывает больше одного, поэтому кому как нравится.
А под XP оно действительно не работает, на офсайте:
Platform: Windows Vista / 7 / 8 / 10 - x32 & x64 versions
А под XP оно действительно не работает, на офсайте:
Platform: Windows Vista / 7 / 8 / 10 - x32 & x64 versions
X-Wing Top Ace
(20.10.2020 в 17:10):
А если так?
.40C3AE
xor eax, eax
inc eax
mov d,[0A7E63C], eax
mov d,[0A7E638], eax
mov esi, 4
jmps .40C3FF
Или так:
.40C399
xor eax, eax
mov al, 34h
; Добавить NOP'ы до адреса 40С3AB
Ассемблер HIEW'ный, посмотрел уже в нем на экзюк.
Под XPенью прога не хотит запускаться, но по логике должно работать (хотя, возможно, jmps нужен на 40С3FD, проверить не могу - не запускается же, понижение полей версии ОС и подсистемы до 5 не сработало). И материться в коде не придется. А поскольку дальше по адресу 40C3FF EAX инитится другим значением, пушить его и восстанавливать тоже не нужно.
.40C3AE
xor eax, eax
inc eax
mov d,[0A7E63C], eax
mov d,[0A7E638], eax
mov esi, 4
jmps .40C3FF
Или так:
.40C399
xor eax, eax
mov al, 34h
; Добавить NOP'ы до адреса 40С3AB
Ассемблер HIEW'ный, посмотрел уже в нем на экзюк.
Под XPенью прога не хотит запускаться, но по логике должно работать (хотя, возможно, jmps нужен на 40С3FD, проверить не могу - не запускается же, понижение полей версии ОС и подсистемы до 5 не сработало). И материться в коде не придется. А поскольку дальше по адресу 40C3FF EAX инитится другим значением, пушить его и восстанавливать тоже не нужно.
ManHunter
(18.10.2020 в 12:14):
Это до первого выхода в интернет и проверки регистрации на сервере, потом все слетает нафиг. А так получается один портативный файл, который можно таскать на флешке.
Vnv
(18.10.2020 в 08:41):
Достаточно внести в реестр это:
[HKEY_CURRENT_USER\SOFTWARE\Classes\IcoFile\DefaultIcon]
"PictureIndex"=dword:00000034
И не просит денежку!!!
[HKEY_CURRENT_USER\SOFTWARE\Classes\IcoFile\DefaultIcon]
"PictureIndex"=dword:00000034
И не просит денежку!!!
Добавить комментарий
Заполните форму для добавления комментария