- Больше не энигма. Ломаем защиту приложений Enigma x64 актуальных версий
- Содержание статьи
- Эксперимент
- Не работает enigma protector
- Триальный конь. Как сломать trial, защищенный Enigma Protector
- warning
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
- Взлом программы защищенной протектором Enigma
Больше не энигма. Ломаем защиту приложений Enigma x64 актуальных версий
Содержание статьи
Бытует распространенное мнение, что к категории крутых, хороших годных защит относятся VMProtect и Themida. В них, мол, и криптование, и виртуальные машины, и антиотладка. Все остальное — так, для лохов и младших школьников. Например, для какой‑нибудь «Энигмы» в сети можно найти кучу туториалов и видосов с инструкциями по взлому, воспользовавшись которыми, любой нуб может почувствовать себя кулхакером.
Отчасти утверждение справедливо: туторов, включая видео, в интернете действительно полно, а при желании можно найти и однокликовые тулзы для взлома приложений. Некоторые из них даже работают. С небольшой оговоркой — это касается старых версий защиты, которая была, мягко говоря, не очень. В последних версиях Enigma создатели постарались как можно сильнее осложнить жизнь хакерам.
Большинство решений они позаимствовали у «взрослых» защит (ниже читатель сможет в этом убедиться). Однако, как известно, в этом мире нет ничего нового, и использование известных решений не делает взлом защиты более простым и приятным. Скорее наоборот. Давай убедимся в этом, хорошенько пощупав Enigma собственными руками.
Эксперимент
Ради эксперимента скачаем какую‑нибудь программу (для простоты — дотнетовскую) и натравим на нее, например, Exeinfo. Предположим, анализатор опознал упаковщик как Enigma Protector x64 [v.5.0 — 7.0]. Вот и отлично, мысленно выдыхаем мы: не VMProtect и не Themida, а по Enigma точно что‑то можно найти на YouTube. Лезем в гугл — и правда, видосов полно, однако максимальная ломаемая версия — 4, а по x64 нет вообще ничего.
Ну что ж, думаем мы, не боги горшки обжигают: не могли же они придумать что‑то принципиально новое? Попробуем действовать по образу и подобию, авось получится. И вот тут нас поджидает неприятный сюрприз.
Практически все «кулхакерские» мануалы начинаются с одной и той же неизменной фразы: «загрузите программу в отладчик» или «создайте дамп приложения». Именно на этом шаге исследователя подстерегает первый коварный облом. В любимый всеми x64dbg программа не грузится вообще, дамперы запущенную софтину тоже не желают дампить, а если это и удается, то на выходе получается совершенно неработоспособный (и уж и близко не дотнетовский) кусок памяти. Даже в работающем приложении .NET не распознается от слова «совсем», dnSpy ее родной не признает и аттачить не хочет. Приаттачить программу удается разве что в x64dbg, но при малейшей попытке сдвинуться с точки останова процесс мгновенно закрывается. В общем, налицо все признаки взрослой защиты — шифрование кода, защита от дампа и отладчика.
Придется браться за дело основательно. Для начала установим плагины ScyllaHide и Scylla, чтобы хоть как‑то заработала отладка. Благодаря первой тулзе программа наконец‑то позволяет загрузить себя в отладчик. Однако радость оказывается преждевременной: после прерывания в процессе никакие настройки ScyllaHide не позволяют нам продвинуться дальше, программа захлопывается с завидным упорством. Scylla придет на помощь чуть позже, пока же попробуем извлечь всю выгоду из маленькой победы, которую мы только что одержали.
Итак, программа загружена в отладчик и пошагово трассируется. Потихоньку двигаемся, минуя несколько саморасшифровывающихся участков кода, и обнаруживаем, что они — всего лишь обвязка для огромной упакованной и зашифрованной секции, стартовая точка которой выглядит так:
Источник
Не работает enigma protector
Для защиты нашего программного обеспечения в основном мы используем Enigma Protector.
А значит Keygen так же будут от этого коммерческого протектора.
В использовании Keygen максимально просты и понятны и всё же, есть некоторые тонкости о которых вам стоит знать.
После покупки Keygen вы получите два файла, а именно:
Для предоставления безлимитного доступа к программе, вам нужно:
Registration name — Ввести имя клиента, обычно лучше использовать почту для уникальной идентификации клиента, что позволяет более эффективно решать спорные вопросы, если таковые возникнут в будущем.
Hardware ID — Поставить галочку и ввести ID ранее полученный от клиента, иногда клиенты пытаются получить ID из свойств своего ПК такой ID не подходит. Нужен именно тот, который клиент получит при запуске программного обеспечения.
Select sections for descryption — В данном пункте всегда ставьте галочку напротив Section 1 и больше нигде
И нажимаете Generate
Появится Registration key , который в комплексе с Registration name и нужно выслать клиенту
Если же вам нужно предоставить разовый доступ, для этого вам понадобится пункт Executions , поставьте галочку и введите нужно число запусков, данное число будет отображено в созданном Registration key
Не рекомендуется создавать ключи привязанные к датам и времени, так как существует большое количество утилит для заморозки или изменения системного времени, что позволит получить доступ к вашему программному обеспечению бесплатно.
Иногда Keygen может быть защищен не Enigma Protector, а тем же Themida protector порядок действий для данного протектора отличается от Enigma Protector
Для создания ключа вам нужно:
- Запустить Keygen
- Выбрать Lisence Manager
- Add Lisence (в левом верхнем углу) — Заполняете два параметра — Customer (вводите имя или почту клиента) — Hardware ID (вводите ID клиента, который он получит при запуске Adjust)
- Далее вверху кликаете на Create Lisence Key после чего в папке Keygen появится папка с именем клиента из которой вам нужно выслать клиенту файл название модели.key
Источник
Триальный конь. Как сломать trial, защищенный Enigma Protector
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Постоянным читателям «Хакера», знакомым с моей предыдущей статьей, могло показаться, что взлом защиты Enigma представляет собой какое‑то архисложное действие, доступное лишь избранным специалистам, обладающими навыками работы с отладчиками и вооруженными специальными инструментами. Правильно показалось, именно такого эффекта я и собирался добиться. Однако я недаром делал оговорку о наличии слабых мест, которыми пользуются многочисленные сетевые авторы обучающих видео и «однокликовых утилит». Сегодня мы рассмотрим одно из таких слабых мест защиты Enigma — триальный режим.
Защищенные с помощью Enigma приложения можно дизассемблировать — об этом подробно рассказывалось в статье «Больше не энигма. Ломаем защиту приложений Enigma x64 актуальных версий».
Очень часто перед покупкой разработчики дают пользователю возможность поиграть с программой ограниченное время или определенное число запусков, чтобы он оценил все возможности софтины. И конечно же, защита Enigma имеет в своем джентльменском наборе такую фичу. Ленивые разработчики могут создавать триальные версии своих программ фактически нажатием одной кнопки. Однако такое доверие Enigma Protector может оказаться неоправданным, и сейчас я расскажу почему.
Для понимания процесса скачаем с официального сайта последнюю демоверсию защиты, благо они ее свободно раздают. Запустив программу, мы увидим в меню Settings вкладку Trial Control. Здесь находятся нужные нам разделы: Limitation by Executions Count (ограничение на количество запусков), Limitation by Days Count (ограничение на количество дней), Limitation of Execution Time (ограничение на количество программного времени) и Time Control (проверка мухлежа с переводом времени).
Особенности этих режимов заключаются в том, что при первом запуске программа «привязывается» к текущему моменту и ведет отсчет своей работы именно от него. Технология сброса подобного триала заключается в том, чтобы вернуть систему в состояние, предшествующее запуску, после чего программа будет стартовать как будто в первый раз после установки. Например, с режимом Limitation from Date till Date (ограничение на запуск в конкретный временной отрезок) такой номер не пройдет, поскольку приложение уже не привязано к моменту первого запуска. Защита проверяет лишь текущее системное время, независимо от того, запускалась программа до этого на данном компьютере или нет. Хотя, конечно, можно обмануть и этот метод защиты, сбросив триал (чтобы исключить запоминание текущего времени с целью обмануть Time Control, если этот режим также включен) и переведя часы на нужный временной интервал.
Однако хватит лирических отступлений, пора браться за дело! Давай защитим любое приложение, ограничив количество его запусков, а потом сбросим эту защиту. По счастью, разработчики Enigma и здесь пошли нам навстречу, бесплатно предоставив такую возможность в демоверсии своего протектора. Для этого открываем вкладку Limitation by Executions Count, устанавливаем верхний чекбокс и в окошке Maximal count of executions указываем нужное количество запусков (скажем, три).
Теперь соберем защищенную версию программы, которая при каждом старте будет показывать пятисекундное окошко рекламы Enigma (что поделать, за халяву приходится платить) и считать запуски. Через три запуска вместо программы ты увидишь сообщение о превышении лимита, означающее, что халява закончилась.
Для начала попробуем пойти самым тернистым путем — попытаемся снять защиту совсем. Как я уже писал в предыдущей статье, программа, защищенная Enigma версии старше 4, просто не дампится. Вернее, дампится, но на выходе получается только слепок кода реализации защиты, который нам не сильно нужен. Попробуем разобраться, как сдампить программу руками, благо незащищенная версия у нас есть. Открыв исходную программу, мы увидим в ней 12 секций:
Name VirtSize RVA PhysSize Offset Flag
.text 00E8CEBC 00001000 00E8D000 00001000 60D00060
.data 000103F8 00E8E000 00010400 00E8E000 C0700040
.rdata 003C0A80 00E9F000 003C0C00 00E9E400 40600040
.qtmetad 00000620 01260000 00000800 0125F000 40600040
.eh_fram 002B5648 01261000 002B5800 0125F800 40300040
.bss 00003AC0 01517000 00000000 00000000 C0600080
.edata 00000E04 0151B000 00001000 01515000 40300040
.idata 000055C4 0151C000 00005600 01516000 C0300040
.CRT 00000038 01522000 00000200 0151B600 C0300040
.tls 00000008 01523000 00000200 0151B800 C0300040
.rsrc 000428B0 01524000 000428B0 0151BA00 C0300040
.reloc 00062CFC 01567000 00062E00 0155E400 42300040
В защищенной программе эти секции тоже присутствуют, правда без названий, флагов и в зашифрованном виде:
1 00E8D000 00001000 0061CC00 00000600 E0000040
2 00011000 00E8E000 00001A00 0061D200 E0000040
3 003C1000 00E9F000 001E8E00 0061EC00 E0000040
4 00001000 01260000 00000200 00807A00 E0000040
5 002B6000 01261000 000BFA00 00807C00 E0000040
6 00004000 01517000 00000000 00000000 C0600080
7 00001000 0151B000 00000000 008C7600 E0000040
8 00006000 0151C000 00000800 008C7600 E0000040
9 00001000 01522000 00000200 008C7E00 E0000040
10 00001000 01523000 00000000 008C8000 E0000040
11 00043000 01524000 00000000 008C8000 E0000040
12 00063000 01567000 00000000 008C8000 E0000040
То, что они зашифрованы, — еще полбеды, поскольку по мере загрузки секции расшифровываются: в этом мы можем убедиться, «всплыв» отладчиком во время работы уже загруженной программы. Однако здесь нас ожидает неприятный сюрприз — жизненно необходимые нам секции импорта и экспорта (в нашем примере . edata и . idаta ) заполнены нулями. Зловредная Enigma очищает их после загрузки приложения в память, чтобы осложнить нам жизнь. В принципе, таблица экспорта у нас есть, но импорт, оригинальные названия и флаги секций отсутствуют, не говоря уже о точке входа в приложение.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник
Взлом программы защищенной протектором Enigma
Популярный среди разработчиков софта протектор Enigma предлагает несколько вариантов защиты приложений. Один из них — установить пробный режим с ограничением на количество запусков, дней использования или рабочего времени. Кажется, преодолеть такую защиту непросто. Оказывается, очень просто!
Может показаться, что взлом защиты Enigma представляет собой какое‑то архисложное действие, доступное лишь избранным специалистам, обладающими навыками работы с отладчиками и вооруженными специальными инструментами. Правильно показалось, но есть слабые места, которыми пользуются многочисленные сетевые авторы обучающих видео и «однокликовых утилит». Сегодня мы рассмотрим одно из таких слабых мест защиты Enigma — триальный режим.
Очень часто перед покупкой разработчики дают пользователю возможность поиграть с программой ограниченное время или определенное число запусков, чтобы он оценил все возможности софтины. И конечно же, защита Enigma имеет в своем джентльменском наборе такую фичу. Ленивые разработчики могут создавать триальные версии своих программ фактически нажатием одной кнопки. Однако такое доверие Enigma Protector может оказаться неоправданным, и сейчас я расскажу почему.
Для понимания процесса скачаем с официального сайта последнюю демоверсию защиты, благо они ее свободно раздают. Запустив программу, мы увидим в меню Settings вкладку Trial Control. Здесь находятся нужные нам разделы:
- Limitation by Executions Count (ограничение на количество запусков)
- Limitation by Days Count (ограничение на количество дней)
- Limitation of Execution Time (ограничение на количество программного времени)
- Time Control (проверка мухлежа с переводом времени)
Особенности этих режимов заключаются в том, что при первом запуске программа «привязывается» к текущему моменту и ведет отсчет своей работы именно от него. Технология сброса подобного триала заключается в том, чтобы вернуть систему в состояние, предшествующее запуску, после чего программа будет стартовать как будто в первый раз после установки. Например, с режимом 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) и тупо запустив, с ходу спотыкаемся о первую попытку исключения на одной из двух рогаток:
Игнорируем их: они нам не мешают, даже наоборот. Ибо, провалившись в следующий за ними вызов, в паре шагов мы обнаруживаем знакомую нам по предыдущей статье связку
Мы нашли адрес 32-битного интерпретатора шитого кода 32-битной виртуальной машины, аналогичной той, что я описал в предыдущей статье. Здесь он выглядит вот так:
Далее, с использованием уже знакомого нам способа, ставим на него условную точку останова с печатью в лог < RAX> <[ RSP] >. Нам предстоит анализировать логи и искать развилки в виртуальном коде на предмет экспирации триала или наличия уже расшифрованной, но еще не обнуленной секции импорта.
Процесс непростой, и осложняется он еще и тем, что актуальная Enigma, как и любая взрослая виртуализированная защита, вдобавок профилирует время работы отдельных участков виртуального кода. То есть нельзя просто так взять и включить логирование с самого начала первого запуска виртуальной машины и получить полный листинг ее вызовов до загрузки приложения.
В этом случае в определенный момент защита обнаружит наличие точки останова и выкинет ошибку Internal Protection Error, please contact to author! . Поэтому надо отслеживать в виртуальном коде критические точки таких проверок и аккуратно обходить их. Возможно, я когда‑нибудь расскажу и об этом. Но в начале статьи я, кажется, обещал раскрыть простой способ?
Вы будете смеяться, но, чтобы заставить программу заработать вновь, нам не понадобится даже отладчик. Что нам потребуется, так это Process Monitor (ProcMon можно бесплатно скачать с сайта Microsoft) и встроенный редактор реестра RegEdit.
Чтобы отследить, куда Enigma прячет свои данные, запускаем ProcMon в момент старта защищенной программы на компьютере. Если мы предусмотрительные, то делаем это при первом запуске, если нет и мы проморгали этот трогательный момент — тоже не беда. ProcMon, по своему обыкновению, вываливает огромнейший список всевозможных системных вызовов, непрерывно удлиняющийся с каждой секундой, и, кажется, разобраться в нем нет никакой возможности. Не спасает даже то, что, притормозив программу, мы ставим фильтр на обращения к реестру и файловой системе исключительно от нашего приложения.
Но если мы выполним в этом списке поиск по слову Enigma, произойдет чудо! Пошуршав несколько секунд байтами, Process Monitor находит ближе к середине списка обращение к ветке реестра:
Причем при первом запуске нашей программы ветка создается, а при повторных — читается. Не веря своим глазам (неужели все так просто?), открываем редактор реестра и аккуратно выпиливаем данную ветку (в каталоге Enigma Protector может оказаться много подобных веток для других программ, тоже защищенных «Энигмой», их мы не трогаем).
Перезапускаем программу, и тут нас подстерегает облом — снова сообщение о истекшем количестве запусков. Лезем в реестр: убитая ветка опять на своем месте. Что ж, снова убиваем, ее запускаем ProcMon и программу — ага, пытается обратиться к убитой ветке, обламывается, и сразу вслед за этим происходит обращение к файлу C:\ Users\ Username\ AppData\ Local\ Temp\ 80EB2F5C . Странный файл, расположенный во временном каталоге, размер 14 байт.
Пробуем удалить его вместе с веткой, и — бинго! Триал‑версия софтины, как ни в чем не бывало, запускается и прекрасно работает. Поэкспериментировав с разными триалами на разных программах, мы видим, что, несмотря на свою дубовость, способ получился универсальным. Хотя названия ветки реестра и файла Enigma генерирует все время новые, для каждой программы они одни и те же. То есть достаточно первый раз их определить, и можно смело в пакетном режиме убивать их перед запуском защищенной программы. Трудно поверить, но надо признаться, что все довольно просто.
Выводы из всего описанного здесь напрашиваются элементарные: даже очень популярный и навороченный инструмент защиты исполняемых файлов может использовать довольно примитивные методы работы. Которые запросто можно сломать при помощи лома и кувалды парочки бесплатных утилит и природной смекалки.
Источник