ВЗЛОМ
WARNING
INFO
Особенности этих режимов заключаются в том, что при первом запуске программа «при-
вязывается» к текущему моменту и ведет отсчет своей работы именно от него. Технология
сброса подобного триала заключается в том, чтобы вернуть систему в состояние, предшес-
твующее запуску, после чего программа будет стартовать как будто в первый раз после уста-
новки. Например, с режимом Limitation from Date till Date (ограничение на запуск в конкрет-
ный временной отрезок) такой номер не пройдет, поскольку приложение уже не привязано
к моменту первого запуска. Защита проверяет лишь текущее системное время, независимо
от того, запускалась программа до этого на данном компьютере или нет. Хотя, конечно, мож-
но обмануть и этот метод защиты, сбросив триал (чтобы исключить запоминание текущего
времени с целью обмануть Time Control, если этот режим также включен) и переведя часы
на нужный временной интервал.
Однако хватит лирических отступлений, пора браться за дело! Давай защитим любое при-
ложение, ограничив количество его запусков, а потом сбросим эту защиту. По счастью, раз-
работчики Enigma и здесь пошли нам навстречу, бесплатно предоставив такую возможность
в демоверсии своего протектора. Для этого открываем вкладку Limitation by Executions
Count, устанавливаем верхний чекбокс и в окошке Maximum count of executions указываем
нужное количество запусков (скажем, три).
Теперь соберем защищенную версию программы, которая при каждом старте будет показы-
вать пятисекундное окошко рекламы Enigma (что поделать, за халяву приходится платить)
и считать запуски. Через три запуска вместо программы ты увидишь сообщение о превыше-
нии лимита, означающее, что халява закончилась.
Для начала попробуем пойти самым тернистым путем — попытаемся снять защиту совсем.
Как я уже писал в предыдущей статье, программа, защищенная Enigma версии старше 4,
просто не дампится. Вернее, дампится, но на выходе получается только слепок кода реали-
зации защиты, который нам не сильно нужен. Попробуем разобраться, как сдампить прог-
←
Ранее рамму руками, благо незащищенная версия у нас есть. Открыв исходную программу, мы уви-
< дим в ней 12 секций:
В защищенной программе эти секции тоже присутствуют, правда без названий, флагов и в
зашифрованном виде:
То, что они зашифрованы, — еще полбеды, поскольку по мере загрузки секции расшифро-
вываются: в этом мы можем убедиться, «всплыв» отладчиком во время работы уже заг-
руженной программы. Однако здесь нас ожидает неприятный сюрприз — жизненно необ-
ходимые нам секции импорта и экспорта (в нашем примере .edata и .idаta) заполнены
нулями. Зловредная Enigma очищает их после загрузки приложения в память, чтобы
осложнить нам жизнь. В принципе, таблица экспорта у нас есть, но импорт, оригинальные
названия и флаги секций отсутствуют, не говоря уже о точке входа в приложение.
Как ни крути, а придется лезть в виртуальную машину. Заодно посмотрим, как она выглядит
в 32-битной версии (в прошлой статье была описана 64-битная реализация). Уже при попыт-
ке сдампить приложение мы с огорчением обнаружим, что при данном способе защиты
из нее уже не торчат уши интерпретатора в виде экспортируемых символов, — интерпре-
татор придется искать самим. Загрузив программу в отладчик (не забываем о ScyllaHide)
и тупо запустив, с ходу спотыкаемся о первую попытку исключения на одной из двух
рогаток:
Игнорируем их: они нам не мешают, даже наоборот. Ибо, провалившись в следующий
за ними вызов, в паре шагов мы обнаруживаем знакомую нам по предыдущей статье связку
push 7E7D14B3
jmp.1B91420
pushad
pushfd
mov dl,1
mov esi,0
lea edi,dword ptr ds:[esi+1B937E4]
lea edi,dword ptr ds:[edi]
mov ecx,1
xor eax,eax
lock cmpxchg dword ptr ds:[edi],ecx
je 1B9144D
cmp dl,byte ptr ds:[1B937E0]
je 1B91422
inc dl
add esi,64
jmp 1B91429
lea eax,dword ptr ds:[esi+1B937E4]
lea eax,dword ptr ds:[eax+10]
mov ecx,dword ptr ss:[esp]
...
Далее, с использованием уже знакомого нам способа, ставим на него условную точку оста-
нова с печатью в лог {RAX} {[RSP]}. Нам предстоит анализировать логи и искать развилки
в виртуальном коде на предмет экспирации триала или наличия уже расшифрованной,
но еще не обнуленной секции импорта.
Процесс непростой, и осложняется он еще и тем, что актуальная Enigma, как и любая взрос-
лая виртуализированная защита, вдобавок профилирует время работы отдельных участков
виртуального кода. То есть нельзя просто так взять и включить логирование с самого
начала первого запуска виртуальной машины и получить полный листинг ее вызовов до заг-
рузки приложения. В этом случае в определенный момент защита обнаружит наличие точки
останова и выкинет ошибку Internal Protection Error, please contact to author!.
Поэтому надо отслеживать в виртуальном коде критические точки таких проверок и аккурат-
но обходить их. Возможно, я когда‑нибудь расскажу и об этом. Но в начале статьи я, кажет-
ся, обещал раскрыть простой способ?
Ты будешь смеяться, но, чтобы заставить программу заработать вновь, нам не понадобится
даже отладчик. Что нам потребуется, так это Process Monitor (ProcMon можно бесплатно ска-
чать с сайта Microsoft) и встроенный редактор реестра RegEdit.
Чтобы отследить, куда Enigma прячет свои данные, запускаем ProcMon в момент старта
защищенной программы на компьютере. Если мы предусмотрительные, то делаем это при
первом запуске, если нет и мы проморгали этот трогательный момент — тоже не беда.
ProcMon, по своему обыкновению, вываливает огромнейший список всевозможных сис-
темных вызовов, непрерывно удлиняющийся с каждой секундой, и, кажется, разобраться
в нем нет никакой возможности. Не спасает даже то, что, притормозив программу, мы ста-
вим фильтр на обращения к реестру и файловой системе исключительно от нашего приложе-
ния.
Но если мы выполним в этом списке поиск по слову Enigma, произойдет чудо! Пошуршав
несколько секунд байтами, Process Monitor находит ближе к середине списка обращение
к ветке реестра:
HKCU\Software\Enigma Protector\29AEB4A0365755F6-B862CAE984EA4D0E\02F01F553A112DCE-
Причем при первом запуске нашей программы ветка создается, а при повторных — читается.
Не веря своим глазам (неужели все так просто?), открываем редактор реестра и аккуратно
выпиливаем данную ветку (в каталоге Enigma Protector может оказаться много подобных
веток для других программ, тоже защищенных «Энигмой», их мы не трогаем).
Пробуем удалить его вместе с веткой, и — бинго! Триал‑версия софтины, как ни в чем
не бывало, запускается и прекрасно работает. Поэкспериментировав с разными триалами
на разных программах, мы видим, что, несмотря на свою дубовость, способ получился уни-
версальным. Хотя названия ветки реестра и файла Enigma генерирует все время новые,
для каждой программы они одни и те же. То есть достаточно первый раз их определить,
и можно смело в пакетном режиме убивать их перед запуском защищенной программы.
Трудно поверить, но надо признаться, что все довольно просто.
Оцени статью:
!!!!!
МВК
Оставить мнение
Комментарий
ОТПРАВИТЬ
Погружение в недра. Разбираем Нам нужно больше бэкапов! Делаем 10 min назад
kernel exploitation, чтобы добраться машину для резервного копирования Более 700 мошеннических ресурсов имитировали
до рута на виртуалке c Hack The Box за 10 баксов сайт Viber
3 day назад 4 week назад
3 day назад
Близкие контакты. Как хакеры Особые инструменты. Утилиты Linux, Функцией Chrome Sync можно злоупотреблять для
крадут деньги с банковских карт которые мы используем, не зная о хищения данных и передачи команд
4 day назад них
3 day назад
30.12.2020
Все чаще шифровальщики по ошибке уничтожают
Энтропия. Как хаос помогает искать Nextcloud. Настраиваем данные пользователей
вирусы персональное облако и смотрим, 3 day назад
1 week назад стоит ли возня свеч Системы с Plex Media Server используются для
18.12.2020 амплификации DDoS-атак
работают системы безопасности устройство для прослушки В новой версии Chrome исправили уязвимость
кредитных карт 09.11.2020 нулевого дня
2 week назад