Исследование защиты программы GiMeSpace Cam Control Pro
Скриншот программы GiMeSpace Cam Control Pro
GiMeSpace Cam Control Pro предназначена для управления компьютером при помощи жестов руками перед камерой. Можно листать страницы, эмулировать действия курсора, управлять рабочим столом. Наверное, в некоторых случаях имеет место быть, если бы не ограничение по времени работы.
Скачиваем с офсайта дистрибутив, устанавливаем, смотрим. По характерным названиям и количеству секций можно определить, что использован навесной протектор Armadillo. Любой специализированный анализатор исполняемых файлов эту догадку подтверждает. При старте появляется уведомление о количестве оставшихся дней:
Сообщение триальной версии
Снимаем навесной протектор при помощи утилиты ArmaGeddon. Распаковка проходит успешно, все опции защиты успешно нейтрализуются, импорт также восстанавливается без проблем в автоматическом режиме.
Распаковываем файл
Но при попытке запуска распакованного файла он падает с ошибкой:
Сообщение об ошибке
Грустить по этому поводу не будем, пока займемся очисткой распакованного файла от ненужных данных. Для этого воспользуемся программой CFF Explorer. Удаляем секции не только из заголовка файла, но и само их содержимое.
Удаляем ненужные секции
Под удаление попадают секции протектора .text1, .adata, .data1, .reloc1 и .pdata. После этого файл "худеет" практически в половину. Ошибка запуска остается. Ну ничего, стабильность в этом случае подтверждает, что удаление секций никак не повлияло на (не)работоспособность. Переходим к следующему инструменту - Armadillo Environment Variables Finder.
Результат анализа файла
По результатам проверки выясняем, что в файле используется стандартная переменная окружения DAYSINSTALLED протектора Armadillo. Логично предположить, что триал реализован средствами навесного протектора, текст сообщения ошибки тоже намекает, что программа пытается получить какое-то значение, а оно возвращается не в виде числа. Очень похоже, что это как раз связано с попыткой запросить количество оставшихся дней из данных протектора. Берем следующий инструмент - Armadillo Environment Variables Injector, чтобы эмулировать эту переменную.
Патчим переменную окружения
Патчим переменную DAYSINSTALLED каким-нибудь небольшим значением. Проверяем работоспособность файла, теперь появляется триальное окно с числом за вычетом пропатченного значения, а программа запускается в пробном режиме. Ошибка при запуске пропала, догадка оказалась верной. Отправляем распакованный файл в дизассемблер. Несмотря на то, что триал реализован с помощью навесного протектора, сама обработка триала выполняется средствами самой программы. Вот тут выводится сообщение со счетчиком дней:
Code (Assembler) : Убрать нумерацию
- .text:00487350 sub_487350 proc near
- .text:00487350 push ebp
- .text:00487351 mov ebp, esp
- .text:00487353 push 0
- .text:00487355 push 0
- .text:00487357 push 0
- .text:00487359 push ebx
- .text:0048735A xor eax, eax
- .text:0048735C push ebp
- .text:0048735D push offset loc_4873EC
- .text:00487362 push dword ptr fs:[eax]
- .text:00487365 mov fs:[eax], esp
- .text:00487368 lea edx, [ebp+var_4]
- .text:0048736B mov eax, offset aDaysinstalled
- ; "DAYSINSTALLED"
- .text:00487370 call sub_40E3CC
- .text:00487375 mov eax, [ebp+var_4]
- .text:00487378 call sub_408E38
- .text:0048737D mov ebx, eax
- .text:0048737F cmp ebx, 1
- .text:00487382 mov eax, off_48B498
- .text:00487387 setnle byte ptr [eax]
- .text:0048738A call sub_482394
- .text:0048738F cmp ebx, eax
- .text:00487391 jge short loc_487395
- .text:00487393 mov ebx, eax
- .text:00487395 loc_487395:
- .text:00487395 cmp ebx, 1Eh
- .text:00487398 jle short loc_48739F
- .text:0048739A mov ebx, 1Eh
- .text:0048739F loc_48739F:
- .text:0048739F lea edx, [ebp+var_C]
- .text:004873A2 mov eax, 1Eh
- .text:004873A7 sub eax, ebx
- .text:004873A9 call sub_408CFC
- .text:004873AE mov ecx, [ebp+var_C]
- .text:004873B1 lea eax, [ebp+var_8]
- .text:004873B4 mov edx, offset aFreeTrialDaysL
- ; "Free trial days left: "
- .text:004873B9 call sub_404C20
- .text:004873BE mov eax, [ebp+var_8]
- .text:004873C1 call sub_437F6C
- .text:004873C6 cmp ebx, 1Eh
- .text:004873C9 jl short loc_4873CF
Code (Assembler) : Убрать нумерацию
- ; Вызвать функцию проверки регистрации
- .itext:00488906 call sub_483340
- .itext:0048890B mov edx, off_48B54C
- ; Сохранить ее результат
- .itext:00488911 mov [edx], al
- .itext:00488913 mov eax, off_48B54C
- ; Проверить сохраненный результат
- .itext:00488918 cmp byte ptr [eax], 0
- .itext:0048891B jnz short loc_48896C
- ; Вывести сообщение со счетчиком
- .itext:0048891D call sub_487350
- .itext:00488922 test al, al
- .itext:00488924 jz short loc_488952
- .itext:00488926 call sub_482E60
- .itext:0048892B test al, al
- .itext:0048892D jnz short loc_488938
- .itext:0048892F push 0 ; nExitCode
Программа успешно "зарегистрирована"
Триальное окно исчезло, вкладка "Help and Registration" превратилась в "Help", перевод часов на программу не влияет. Цель достигнута, можно осваивать новый инструмент. Заодно освежили в памяти как работать с инструментарием против Armadillo.
Просмотров: 994 | Комментариев: 2
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
0101
(02.04.2022 в 20:20):
Что-то x32dbg и hiew32 не видят ссылки на 00487350, хотя адрес указан явно..
voffka
(02.04.2022 в 20:04):
Занопать
00483685 JNZ 0048369A
или
004836A2 JNZ 004836B7
и готово
00483685 JNZ 0048369A
или
004836A2 JNZ 004836B7
и готово
Добавить комментарий
Заполните форму для добавления комментария