
Исследование защиты программы Icecream Slideshow Maker

Скриншот программы Icecream Slideshow Maker
Программа Icecream Slideshow Maker, как вы догадались из названия, предназначена для создания слайд-шоу. Все делается за несколько кликов, достаточно просто выбрать фотографии, эффекты перехода, длительность отображения кадров, а потом сохранить готовый видеоролик в нужном формате. В незарегистрированной версии есть ограничение по количеству слайдов, а также по разрешению и формату готового видео. Не люблю ограничения.
Забираем дистрибутив с сайта, устанавливаем, смотрим. Помимо самой программы инсталлятор пытается ставить всякие кодеки, библиотеки Qt и прочую муть, но главный исполняемый файл все равно один. Он ничем не накрыт и не упакован, отправляем его на дизассемблирование.

Сообщение незарегистрированной версии

Настройки незарегистрированной версии
Незарегистрированная версия ведет себя как написано, то есть ограничивает количество слайдов при добавлении файлов в проект, предлагает обновиться до полной версии при выборе формата и большого разрешения видеофайла. В настройках есть кнопка активации, но код все равно проверяется на сервере. Что ж, значит будем применять бинарную хирургию.
Если посмотреть на заголовок окна, то там будет надпись "FREE". Логично предположить, что после активации там должно быть что-то вроде "PRO", раз уж такая формулировка встречается в окне с предложением активации.

Строки сообщения в файле
Так и есть, обе строчки легко обнаруживаются в файле. Идем в дизассемблер, не забывая, что имеем дело с Qt. Указатели на указатели на указатели, овощи там, рожь, вот это все.
Code (Assembler) : Убрать нумерацию
- .rdata:0055ABCC aPro db 'PRO',0 ; DATA XREF: .data:off_68B0A0
- .rdata:0055ABD0 aFree db 'FREE',0 ; DATA XREF: .data:off_68B0A4
Code (Assembler) : Убрать нумерацию
- .data:0068B0A0 off_68B0A0 dd offset aPro
- .data:0068B0A0 ; "PRO"
- .data:0068B0A4 off_68B0A4 dd offset aFree
- .data:0068B0A4 ; "FREE"
Code (Assembler) : Убрать нумерацию
- ; Функция проверки зарегистрированности
- .text:0049B7AE call sub_420000
- ; Если она вернула AL=0, то программа не зарегистрирована
- .text:0049B7B3 test al, al
- .text:0049B7B5 jz short loc_49B7EF
- ; "PRO"
- .text:0049B7B7 mov edx, off_68B0A0
- .text:0049B7BD test edx, edx
- .text:0049B7BF jz short loc_49B7D1
- ...
- ...
- ...
- .text:0049B7EF loc_49B7EF:
- ; "FREE"
- .text:0049B7EF mov edx, off_68B0A4
- .text:0049B7F5 test edx, edx
- .text:0049B7F7 jz short loc_49B80B
- .text:0049B7F9 mov ecx, edx
- .text:0049B7FB lea esi, [ecx+1]
- .text:0049B7FE mov edi, edi
Code (Assembler) : Убрать нумерацию
- .text:00420000 sub_420000
- .text:00420000 mov al, [ecx+10h]
- .text:00420003 retn
- .text:00420003 sub_420000 endp

Сообщение о поврежденном файле
Ага, исходный файл с цифровой подписью, мы его пропатчили, значит контрольная сумма изменилась и подпись стала невалидная. Программа проверяет цифровые подписи и в случае изменения своих компонентов перестает запускаться.

Строка сообщения в файле
Строка также легко обнаруживается в файле. Осталось найти место в коде, где и как выполняется проверка целостности.
Code (Assembler) : Убрать нумерацию
- .text:004AEC53 mov esi, eax
- .text:004AEC55 push 1Ch
- .text:004AEC57 push offset aTheFile1IsNotS
- ; "The file '%1' is not signed."
- .text:004AEC5C mov byte ptr [esp+168h+var_4], 1

Программа успешно "зарегистрирована"
В заголовке окна появилась надпись "PRO", в настройках пропала кнопка активации, при добавлении файлов больше нет ограничений, а при выборе формата видео никаких сообщений не появляется. Готовый видеоролик создается также без проблем. Цель достигнута.
Просмотров: 1574 | Комментариев: 9
Метки: исследование защиты, мультимедиа

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(19.08.2019 в 13:41):
master-ufa, https://i89.fastpic.ru/big/201...8fd89796.png

master-ufa
(18.08.2019 в 05:44):
Дилетанский вопрос.
«Патчим начало функции проверки командами MOV AL,1 и RET»
заменяем адреса 004AEC53
.text:004AEC53 mov esi, eax
На:
.text:004AEC53 mov AL, 1
.text:004AEC54 RET
Ниже добавляем новый адрес?
Можно добавить скрин с внесенными изменениями?
«Патчим начало функции проверки командами MOV AL,1 и RET»
заменяем адреса 004AEC53
.text:004AEC53 mov esi, eax
На:
.text:004AEC53 mov AL, 1
.text:004AEC54 RET
Ниже добавляем новый адрес?
Можно добавить скрин с внесенными изменениями?

ManHunter
(15.08.2019 в 10:55):
MNV, по поводу запросов в правилах сайта все предельно ясно написано.

MNV
(10.08.2019 в 13:30):
Прочитал почти все Ваши статьи по исследованию защит разнообразных программ. Как было некоторыми замечено, для препарирования брались программы с довольно простой конструкцией. Строки лежат в открытом виде, многие "защиты" обходились патчем условного перехода. Конечно, Ваш опыт очевиден, плюс Вы ещё и материал излагаете лаконично и без лишней воды. Разбираете даже сам алгоритм генерация ключа или его проверки. Это очень важная информация для становления крекера здорового человека. Кейген - высший пилотаж, без сомнений.
Разбирал программу, ScreenCam называется, без упаковщика, без протектора, но код внутри довольно хитрый. Получилось обойти проверку рег данных, но изменения в файл вносить нельзя, где-то зарыта проверка то ли на CRC, то ли на что-то ещё. Сделал лоадер, запускаю через него, но рег данные каждый раз нужно вносить снова, хоть и любые, но напрягает, что решение получилось костылём.
Может у Вас будет возможность и интерес разобрать не совсем стандартный код? Было бы интересно прочитать Ваш разбор такой программы. Если будет интересно, скачать можно тут [del]
Разбирал программу, ScreenCam называется, без упаковщика, без протектора, но код внутри довольно хитрый. Получилось обойти проверку рег данных, но изменения в файл вносить нельзя, где-то зарыта проверка то ли на CRC, то ли на что-то ещё. Сделал лоадер, запускаю через него, но рег данные каждый раз нужно вносить снова, хоть и любые, но напрягает, что решение получилось костылём.
Может у Вас будет возможность и интерес разобрать не совсем стандартный код? Было бы интересно прочитать Ваш разбор такой программы. Если будет интересно, скачать можно тут [del]

xussr
(07.08.2019 в 22:57):
За спасибо разобрался да за одно на других продуктах этой фирмы потренировался правда не во всех они проверку подписи делали ))))

ManHunter
(07.08.2019 в 14:34):
Тогда место для патча в этом случае 002FE7D0

xussr
(07.08.2019 в 14:30):
CPU Disasm
Address Hex dump Command Comments
002FE7CE CC INT3
002FE7CF CC INT3
002FE7D0 /$ 6A FF PUSH -1 ; SlideshowMaker.002FE7D0(guessed Arg1)
002FE7D2 68 30163800 PUSH 00381630 ; Entry point
002FE7D7 |. 64:A1 0000000 MOV EAX,DWORD PTR FS:[0]
002FE7DD 50 PUSH EAX
002FE7DE 81EC 40010000 SUB ESP,140
002FE7E4 |. A1 68B64D00 MOV EAX,DWORD PTR DS:[4DB668]
002FE7E9 |. 33C4 XOR EAX,ESP
002FE7EB |. 898424 3C0100 MOV DWORD PTR SS:[LOCAL.3],EAX
002FE7F2 |. 56 PUSH ESI
002FE7F3 |. 57 PUSH EDI
002FE7F4 |. A1 68B64D00 MOV EAX,DWORD PTR DS:[4DB668]
002FE7F9 |. 33C4 XOR EAX,ESP
002FE7FB |. 50 PUSH EAX
002FE7FC |. 8D8424 4C0100 LEA EAX,[LOCAL.2]
002FE803 |. 64:A3 0000000 MOV DWORD PTR FS:[0],EAX
002FE809 |. 8BB424 5C0100 MOV ESI,DWORD PTR SS:[ARG.1]
002FE810 |. 0F57C0 XORPS XMM0,XMM0
002FE813 |. F30F7F4424 40 MOVDQU XMMWORD PTR SS:[LOCAL.69],XMM0
002FE819 |. C74424 40 100 MOV DWORD PTR SS:[LOCAL.69],10
002FE821 |. 837E 14 08 CMP DWORD PTR DS:[ESI+14],8
002FE825 |. 72 04 JB SHORT 002FE82B
002FE827 |. 8B06 MOV EAX,DWORD PTR DS:[ESI]
002FE829 |. EB 02 JMP SHORT 002FE82D
002FE82B |> 8BC6 MOV EAX,ESI
дошел до этого куска и в стопоре...в начало пачe приложение крошится?
Я все в ольге, пардон ...
Address Hex dump Command Comments
002FE7CE CC INT3
002FE7CF CC INT3
002FE7D0 /$ 6A FF PUSH -1 ; SlideshowMaker.002FE7D0(guessed Arg1)
002FE7D2 68 30163800 PUSH 00381630 ; Entry point
002FE7D7 |. 64:A1 0000000 MOV EAX,DWORD PTR FS:[0]
002FE7DD 50 PUSH EAX
002FE7DE 81EC 40010000 SUB ESP,140
002FE7E4 |. A1 68B64D00 MOV EAX,DWORD PTR DS:[4DB668]
002FE7E9 |. 33C4 XOR EAX,ESP
002FE7EB |. 898424 3C0100 MOV DWORD PTR SS:[LOCAL.3],EAX
002FE7F2 |. 56 PUSH ESI
002FE7F3 |. 57 PUSH EDI
002FE7F4 |. A1 68B64D00 MOV EAX,DWORD PTR DS:[4DB668]
002FE7F9 |. 33C4 XOR EAX,ESP
002FE7FB |. 50 PUSH EAX
002FE7FC |. 8D8424 4C0100 LEA EAX,[LOCAL.2]
002FE803 |. 64:A3 0000000 MOV DWORD PTR FS:[0],EAX
002FE809 |. 8BB424 5C0100 MOV ESI,DWORD PTR SS:[ARG.1]
002FE810 |. 0F57C0 XORPS XMM0,XMM0
002FE813 |. F30F7F4424 40 MOVDQU XMMWORD PTR SS:[LOCAL.69],XMM0
002FE819 |. C74424 40 100 MOV DWORD PTR SS:[LOCAL.69],10
002FE821 |. 837E 14 08 CMP DWORD PTR DS:[ESI+14],8
002FE825 |. 72 04 JB SHORT 002FE82B
002FE827 |. 8B06 MOV EAX,DWORD PTR DS:[ESI]
002FE829 |. EB 02 JMP SHORT 002FE82D
002FE82B |> 8BC6 MOV EAX,ESI
дошел до этого куска и в стопоре...в начало пачe приложение крошится?
Я все в ольге, пардон ...

ManHunter
(07.08.2019 в 14:28):
В IDA два экрана вверх крутанул и вот оно начало функции, его ни с чем не перепутать.

xussr
(07.08.2019 в 14:25):
А начало процедуры можно частично показать

Добавить комментарий
Заполните форму для добавления комментария
