Исследование защиты программы PictureCode Photo Ninja
Скриншот программы PictureCode Photo Ninja
PictureCode Photo Ninja - профессиональный RAW-конвертер для множества фотокамер, пакетный редактор цифровых изображений с различными эффектами, такими как подавление шумов, исправление экспозиции, повышение четкости, коррекция дисторсии объектива, а также уникальный инструмент восстановления пересвеченных участков изображений. Но за весь этот кайф надо выложить целую кучу бабла. Или не выложить, смотря как подойти к этому вопросу.
Скачиваем дистрибутив, устанавливаем, запускаем. Триального срока нет, но основное ограничение незарегистрированной версии заключается в том, что обработанные изображения невозможно сохранить.
Сообщение незарегистрированной программы
Исполняемый файл ничем не упакован и не защищен, отправляем его в дизассемблер. Когда дизассемблер закончит работу, поищем в файле текст сообщения, которое появляется при отсутствии регистрации.
Текст сообщения об отсутствии регистрации
Мы видим начало фразы, а чуть выше - несколько вариантов ее продолжения. Это отсутствующая или неправильная лицензия, просроченная лицензия и устаревшая лицензия. Примерный фронт работы понятен, переходим к дизассемблеру.
Code (Assembler) : Убрать нумерацию
- .text:00790D5B push edi
- .text:00790D5C xor ebx, ebx
- .text:00790D5E push ebx
- .text:00790D5F mov [esp+28h+var_10], ebx
- .text:00790D63 mov esi, [esp+28h+arg_0]
- .text:00790D67 push offset aPThisOperation
- ; "<p>This operation is unavailable becaus"...
- .text:00790D6C push esi
- .text:00790D6D mov [esp+30h+var_4], ebx
- .text:00790D71 call ds:?tr@QObject@@SA?AVQString@@PBD0@Z
- .text:00790D77 add esp, 0Ch
- .text:00790D7A mov ebp, ds:?free@QString@@CAXPAUData@1@@Z
- .text:00790D80 mov edi, 1
- .text:00790D85 mov [esp+24h+var_4], ebx
- .text:00790D89 mov [esp+24h+var_10], edi
- .text:00790D8D push ebx
- .text:00790D8E cmp byte_A56494, bl
- .text:00790D94 jnz short loc_790DB2
- .text:00790D96 lea eax, [esp+28h+var_14]
- .text:00790D9A push offset aYourLicenseIsI
- ; "your license is invalid.</p>"
- .text:00790D9F push eax
- .text:00790DA0 call ds:?tr@QObject@@SA?AVQString@@PBD0@Z
- .text:00790DA6 add esp, 0Ch
- .text:00790DA9 mov [esp+24h+var_4], edi
- .text:00790DAD jmp loc_790E60
- .text:00790DB2 ; --------------------------------------------------
- .text:00790DB2 loc_790DB2:
- .text:00790DB2 cmp byte_A56495, bl
- .text:00790DB8 jz short loc_790DFF
- .text:00790DBA lea ecx, [esp+28h+var_14]
- .text:00790DBE push offset aYourLicenseKey
- ; "your license key has expired.</p>"
- .text:00790DC3 push ecx
- .text:00790DC4 call ds:?tr@QObject@@SA?AVQString@@PBD0@Z
- .text:00790DCA add esp, 0Ch
- .text:00790DCD mov edi, ds:?append@QString@@QAEAAV1@ABV1@@Z
- .text:00790DD3 push eax
- .text:00790DD4 mov ecx, esi
- .text:00790DD6 mov [esp+28h+var_4], 2
- .text:00790DDE call edi
- .text:00790DE0 mov edx, [esp+24h+var_14]
- .text:00790DE4 mov byte ptr [esp+24h+var_4], bl
- .text:00790DE8 or eax, 0FFFFFFFFh
- .text:00790DEB lock xadd [edx], eax
- .text:00790DEF jnz loc_790E86
- .text:00790DF5 mov ecx, [esp+24h+var_14]
- .text:00790DF9 push ecx
- .text:00790DFA jmp loc_790E81
- .text:00790DFF ; -------------------------------------------------
- .text:00790DFF loc_790DFF:
- .text:00790DFF cmp byte_A56496, bl
- .text:00790E05 jz short loc_790E45
- .text:00790E07 lea edx, [esp+28h+var_14]
- .text:00790E0B push offset aYourLicenseK_0
- ; "your license key is too old for this ve"...
- .text:00790E10 push edx
- .text:00790E11 call ds:?tr@QObject@@SA?AVQString@@PBD0@Z
- .text:00790E17 add esp, 0Ch
- .text:00790E1A mov edi, ds:?append@QString@@QAEAAV1@ABV1@@Z
- .text:00790E20 push eax
- .text:00790E21 mov ecx, esi
- .text:00790E23 mov [esp+28h+var_4], 3
- .text:00790E2B call edi
- .text:00790E2D mov eax, [esp+24h+var_14]
- .text:00790E31 mov byte ptr [esp+24h+var_4], bl
- .text:00790E35 or ecx, 0FFFFFFFFh
- .text:00790E38 lock xadd [eax], ecx
- .text:00790E3C jnz short loc_790E86
- .text:00790E3E mov edx, [esp+24h+var_14]
- .text:00790E42 push edx
- .text:00790E43 jmp short loc_790E81
- .text:00790E45 ; ---------------------------------------------------
- .text:00790E45 loc_790E45:
- .text:00790E45 lea eax, [esp+28h+var_14]
- .text:00790E49 push offset aYouHaveNotInst
- ; "you have not installed a valid license "...
- .text:00790E4E push eax
- .text:00790E4F call ds:?tr@QObject@@SA?AVQString@@PBD0@Z
- .text:00790E55 add esp, 0Ch
- .text:00790E58 mov [esp+24h+var_4], 4
- .text:00790E60
Code (Assembler) : Убрать нумерацию
- ...
- .text:00790D8E cmp byte_A56494, bl
- .text:00790D94 jnz short loc_790DB2
- ...
- .text:00790DB2 cmp byte_A56495, bl
- .text:00790DB8 jz short loc_790DFF
- ...
- .text:00790DFF cmp byte_A56496, bl
- .text:00790E05 jz short loc_790E45
- ...
Code (Assembler) : Убрать нумерацию
- .text:00790CF0 sub_790CF0 proc near
- .text:00790CF0 arg_0 = byte ptr 4
- .text:00790CF0 arg_4 = byte ptr 8
- .text:00790CF0 arg_8 = byte ptr 0Ch
- .text:00790CF0 mov al, [esp+arg_0]
- .text:00790CF4 mov cl, [esp+arg_4]
- .text:00790CF8 mov dl, [esp+arg_8]
- .text:00790CFC mov byte_A56494, al
- .text:00790D01 mov byte_A56495, cl
- .text:00790D07 mov byte_A56496, dl
- .text:00790D0D retn
- .text:00790D0D sub_790CF0 endp
Code (Assembler) : Убрать нумерацию
- .text:004F7531 cmp byte ptr [esi+10h], 0
- .text:004F7535 jz short loc_4F754B
- .text:004F7537 cmp byte ptr [esi+11h], 0
- .text:004F753B jnz short loc_4F754B
- .text:004F753D cmp byte ptr [esi+12h], 0
- .text:004F7541 jnz short loc_4F754B
- .text:004F7543 mov ecx, [ebx+3Ch]
- .text:004F7546 call sub_7552B0
- .text:004F754B loc_4F754B:
- ; Заполнить регистры значениями из ячеек памяти
- .text:004F754B movzx edx, byte ptr [esi+12h]
- .text:004F754F movzx eax, byte ptr [esi+11h]
- .text:004F7553 movzx ecx, byte ptr [esi+10h]
- ; Записать их в стек
- .text:004F7557 push edx
- .text:004F7558 push eax
- .text:004F7559 push ecx
- ; Вызвать функцию инициализации
- .text:004F755A call sub_790CF0
Патчим код
Записываем изменения в исполняемый файл, запускаем программу. Все ограничения пропали, отредактированные изображения можно сохранять. В очередной раз мы сэкономили кучу денег и, возможно, научились чему-нибудь новому.
Просмотров: 6425 | Комментариев: 4
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(02.10.2013 в 11:14):
Потому же, что и десятки единиц другого софта - за нее просили денег :) Из всех функций программы пользуюсь только одной, ниндзя действительно неплохо вытягивает пересвеченные участки изображения. Дисторсия исправляется в DxO ViewPoint, ББ изумительно выправляется в Helicon Filter, резкость повышается в Фотошопе, шумы убираются в Noiseware, кроп и подбор кадров делается в XnView, ну и так далее. Не утверждаю, что это оптимально по скорости, но это дело привычки, а мне их менять уже поздно.
Never
(02.10.2013 в 11:09):
Почему она? Как в сравнении с лайтрумом?
brute
(30.09.2013 в 20:41):
сам бы не справился: пытался патчить непосредственно проверки bl, но что-то не получалось..
п.с. программа топорная, интерфейс неюзабельный - даже под другим именем файл пересохранить нельзя.
п.с. программа топорная, интерфейс неюзабельный - даже под другим именем файл пересохранить нельзя.
Добавить комментарий
Заполните форму для добавления комментария
помогите пожалуйста.