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

Скриншот программы AbstractCurves
AbstractCurves - интересный генератор абстрактных изображений, позволяющий создавать потрясающие обои или фоновые рисунки, а также добавлять к фотографиям различные эффекты. Интерфейс у программы такой, что невольно задумываешься о поллитровке, но это не главный ее недостаток. Без регистрации постоянно будет появляться напоминание о необходимости выложить деньги, а до этого момента вы не сможете сохранить результаты ваших трудов. Только вот двадцатка зелени в хозяйстве совсем не лишняя, лучше потратить ее на что-нибудь другое.
Забираем с сайта дистрибутив, устанавливаем, смотрим. Главный исполняемый файл всего один, он упакован при помощи бесплатного пакера UPX. Никаких сюрпризов тут нет, UPX снимается при помощи самого же себя с ключом upx -d. После этого распакованный файл отправляется прямиком в дизассемблер. Пока он приводит двоичный код в удобочитаемый Ассемблер, запустим саму программу и посмотрим, как у нее проявляются внешние признаки незарегистрированности. Всплывающее окно и ввод серийного номера пока трогать не будем, а вот надпись "(Demo)" в заголовке окна очень интересна. Поищем эту строчку в файле:

Строка найдена
Теперь вернемся к дизассемблированному листингу и посмотрим, где эта строка используется.
Code (Assembler) : Убрать нумерацию
- .text:008CA632 call sub_480ED0
- ; Получить адрес настроек (?)
- .text:008CA637 mov eax, [eax+104h]
- .text:008CA63D cmp eax, ebx
- .text:008CA63F jz short loc_8CA68C
- ; Получить адрес указателя на указатель
- .text:008CA641 mov edx, [eax+0CCh]
- ; Второй указатель пустой?
- .text:008CA647 cmp [edx], ebx
- ; Нет, надпись "Demo" не добавляем
- .text:008CA649 jnz short loc_8CA68C
- ; Добавить в заголовок надпись "Demo"
- .text:008CA64B push ebx
- .text:008CA64C lea eax, [esp+2Ch+var_18]
- .text:008CA650 push offset aDemo ; " (Demo)"
- .text:008CA655 push eax
- .text:008CA656 call sub_8C9F40
- .text:008CA65B add esp, 0Ch
Теперь стоит запустить программу под отладчиком, установить точку останова по адресу 008CA632 и в режиме пошаговой трассировки посмотреть, что там творится. Действительно, в незарегистрированном состоянии второй указатель указывает на нулевое значение. Для подобных случаев я использую следующий метод патча: заворачиваю значение, на которое ссылается указатель, на сам указатель. Формирование главного окна программы в большинстве случаев выполняется раньше всех триальных окон и прочей шароварщины, но позже, чем из реестра или файлов прочитаны регистрационные данные. На этом этапе есть неплохой шанс внушить программе, что все проверки пройдены правильно и дальше надо работать в полную силу.

Патч указателя
Команда CMP [EDX],EBX заменяется на равную ей по размеру MOV [EDX],EDX, а следующий за ней условный переход меняется на безусловный. Сохраняем изменения, проверяем.

Программа успешно "зарегистрирована"
Упоминание Demo в заголовке и прочие внешние проявления незарегистрированной версии исчезли, окно с напоминанием не появляется, пресеты открыты, готовый рисунок можно сохранять. Цель достигнута.
Просмотров: 2461 | Комментариев: 8
Метки: исследование защиты

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
user
(16.12.2017 в 21:27):
На 49FF86 есть еще переход - надпись Demo на первоначальном экране ("Новый файл, Открыть...)

ManHunter
(16.12.2017 в 12:15):
Это уже что-то локально погнулось. Если адреса загрузки действительно не меняются, то все остается в UDD. Для проверки Alt+B в отладчике.

usr
(16.12.2017 в 10:57):
А если отладчик не помнит свои бряки - это зависит от исследуемой проги? Вроде адреса не меняются при запусках, UDD есть...

Exit
(14.12.2017 в 16:31):
Дьявол кроется в деталях )
PageUp'ом листал, к нужному адресу ))
Спасибо за разбор интересной программы!
PageUp'ом листал, к нужному адресу ))
Спасибо за разбор интересной программы!

ManHunter
(14.12.2017 в 16:23):
F5 и .008CA647
Точка означает, что надо переходить по VA, а без точки переход по абсолютному файловому смещению.
Точка означает, что надо переходить по VA, а без точки переход по абсолютному файловому смещению.

Exit
(14.12.2017 в 16:21):
Даааа, пол литра - это мягко сказано )))
Судя по справке, автор много сил вложил в софтину.
Очень интересный подход к генерации графики.
ManHunter, а как в Hiew переходить к нужному адресу?
Жму F5 (Goto), вбиваю 008CA647 а переход происходит не туда...
Пардон, за нубский вопрос ))
Судя по справке, автор много сил вложил в софтину.
Очень интересный подход к генерации графики.
ManHunter, а как в Hiew переходить к нужному адресу?
Жму F5 (Goto), вбиваю 008CA647 а переход происходит не туда...
Пардон, за нубский вопрос ))

ManHunter
(14.12.2017 в 15:46):
Это инсталлятор, зачем его распаковывать??? o_O

nordpoint
(14.12.2017 в 15:35):
upx: ********\Desktop\upx394w\AbstractCurves_Setup.exe: NotPackedExcep
tion: not packed by UPX
7zip распаковал!
tion: not packed by UPX
7zip распаковал!

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