Продолжаю цикл статей по реверс-инжиниринг для начинающих. Если предыдущие мои статьи для Вам понравились то гарантирую что эта будет не менее
интересная. Хотел еще отметить и тот факт что я стараюсь и подобрать, различные, алгоритмы защиты программ. В основном сложные и не сложные механизмы защиты. Почему именно так идет отбор ?. Просматривая внутренности кода (в отладчике), разбирая алгоритм защиты, изначально может показаться что вот все, вот именно тут сейчас сделаем поправочку и готово. А на самом деле все так завязано, что изменив код в одном месте, не анализируя всю логику - получите тучу исключений в другом. А на выходе, при сохранении уже вашего пропатченного файла, полноценно софт работать не будет. Поэтому, к каждой статье я подхожу индивидуально - детально показываю, разжевываю, пытаюсь натолкнуть на мысль.
Ну и сегодня, мы снова, будет сражаться с различными алгоритмами защиты, практикуя как патчинг так и написания KeyGen (генератора лицензионных ключей).
Согласитесь что создать свой генератор ключей намного приятней смотрится, нежели просто крякнуть программу. Там где это возможно, конечно же, мы будем
делать, а там где нет - будем думать и делать изменения. Главное что бы все действия были осмысленные, не наугад.
Ну и сегодняшние наш пациент подтвердит мои слова, сказанные выше. А статью мы поделим на пункты, так как дойдя до определенного участка кода, исследуя алгоритм защиты, у нас появится возможность выбора. А именно что лучше, в этом случае,, конечно же мы рассмотрим два варианта. Но для удобства чтения, структура сегодняшней статьи будет разделена на Вариант 1 и Вариант 2.
А анализировать мы будем программу TSR Watermark Image (Официальный сайт: https://www.watermark-image.com/download.aspx). Ну и предназначение программы заключается в нанесении различных водяных знаков на изображения. Присутствую разные плюшки в виде нанесения 3D текста и различных эффектов. Ну а более подробную информацию можно почитать на официальном сайте программы. Основное представление о программе есть, ну и теперь давайте приступим к анализу защиты программы.
Для начала давайте перейдем на официальный сайт программы и посмотрим что нам говорит разработчик о ограничениях бесплатной версии. Ну и попытаемся узнать информацию о активации программы, это нам даст первую зацепку. Если конечно же разработчик предоставляет такую информацию в полной мере, в некоторых случаях бывают и исключения.
Скачаем, установим программу и пропустим её через утилиту Exeinfo PE. Это утилита для получения информации с исполняемого файла для тех кто не в курсе и не читал предыдущие статьи.
- Пункт№1 - Собственно имя исполняемого файла программы.
- Пункт№2 - Нам показано что это 64 разрядное (64-битное) приложение Windows.
- Пункт№3 - Обнаружен обфускатор на программе, язык программирования С#.
- Пункт№4 - Для распаковки, деобфускации нам предлагают использовать de4dot v3.1.
Давайте перейдем внутрь и посмотрим. А тут у нас интересный участок кода, в котором идет проверка установленной лицензии. В строковую переменную string text передаются какие то данные (пока мы не знаем что) и по факту уже проверяются. Причем используется функция .Substring(0, 2) - что считывает данные от нуля (начала строки) и до второго символа, включительно. Осмелюсь предположить что это проверка ключа активации (лицензии) при запуске программы. Но это еще нужно будет проверить, предполагать можно, но проверять всегда нужно!.
Давайте перейдем в method_35 и посмотрим его код и попробуем посмотреть на его код. Становится интересно что же там за события происходят. А в нем идет получение и сравнение переменных. Пока что логика нам приблизительно понятна, так как мы только на начальном этапе анализа.
Анимация-Gif-1
Обязательно посмотреть: https://mega.nz/file/kPNQiYzY#3siDGHbRFXQJpXB1ut-jb-kklqjgVTOXC9kwpEBpgrc
Обязательно посмотреть: https://mega.nz/file/kPNQiYzY#3siDGHbRFXQJpXB1ut-jb-kklqjgVTOXC9kwpEBpgrc
И у нас вырисовывается очень интересная картина. Как заметно, на анимации GIF-1, программа при запуске проверяет ключ активации и далее нас изmethod_35 переадресовывает в method_36. И код самой функции очень громадный, если быть точным то это 478 строк. Громадный он не просто так, читаем статью дальше и поймете почему.
А вот что интересно что и в method_36, также, идет проверка первых двух символов ключа активации программы. А после этого идет проверка типов лицензии по первым двум символам ключа активации. В нашем случае это "6F", "3A", "9A", "E3".
А чуть ниже идет проверка ключей активации, своего рода серый список ключей
блокировки ключей попавших в публичный доступ. То есть слитые в интренет, не самый лучший способ защиты. Но что есть то есть, продолжаем дальше.
А еще чуть ниже, в этой же громадной функции, идет проверка ключа активации через интернет. То есть вызывается функция checkKeyOnline, в которой программа делает запрос на сайт разработчика, проверяя ключ активации.
Ну и собственно сам код функции проверки через интернет. То есть там также идет проверка ключа длина которого = 66 знаков. Такой вывод мы можем сделать только потому что уже увидели список ключей. Анализируем дальше.
Ну и на этом этапе, пути крякинга у нас расходятся
Вариант номер 1. С внесением изменений в исполняемый файл программы.
План действий:
- Напишем KeyGen (генератор лицензий \ К файлам к статье я, конечно же, его прикреплю).
- Изменим алгоритм активационных ключей.
- Заставим программу принимать ключи активации с авторством и рекламой форума xss.pro.
- Уберем онлайн проверку ключа.
Как это все будет происходить я продемонстрирую дальше. Приступим к выполнению задуманного, мы выяснили что ключ состоит из 66 символов а в начале ключа проверяются первые два символа "6F", "3A", "9A", "E3" (Типы лицензии).
Основа уже у нас есть, давайте напишем сначала генератор лицензий и после уже будем вносить изменения в сам код программы. Ну и генерируемые ключи активации сделаем красивые, с рекламой форума xss.pro.
Вот так будет выглядеть генератор лицензия и сейчас я прокомментирую его код.
TSRKeyGen.gif - пример генерации ключей активации.
- Наш словарь что состоит из заглавных букв и цифр.
- Настройка длины нашего сгенерированного ключа.
- Из словаря берем данные и генерируем в строковой переменной S.
- Ну и тут у нас типы лицензии, с авторством и рекламмой форума xss.pro. Что бы ключ активации красиво выглядел.
- А вот в 5 пункте , кусочек кода, что отвечает за выделения участка текста. То есть при нажатии на кнопку "Генерировать ключ" будет выделен текст, в ключе, а именно xss.pro. Смотрится красиво.
Все это делается за того что бы красиво смотрелся ключ активации. Мелочи но приятно
. То есть:
Ну что, генератор ключей у нас готов, а теперь возвращаемся к коду программы и там нужно внести правки. А именно заставить программу принимать такие ключи.
А также отрезать проверку ключа через интернет, сайт, автора, программы.
Еще один нюанс, на что нужно обратить внимание: как мы выяснили, что в программе, проверка ключа, первые два символа "6F", "3A", "9A", "E3" встречается не в одном месте. Поэтому и изменения нужно будет вносить аналогично. Ну а теперь приступаем, возвращаемся к нашему коду, на чем остановились, до написания KeyGen.
Вносим правки в трех разных участках кода.
То есть воспользуемся поиском по коду и заменим в трех местах (в разных функциях), значения
- "6F" заменить на "-EXE-xss.pro-1"
- "3A" заменить на "-EXE-xss.pro-2"
- "9A" заменить на "-EXE-xss.pro-3"
- "E3" заменить на "-EXE-xss.pro-4"
- А еще проверку первых двух символов .Substring(0, 2) на .Substring(0, 13)
ВидеоTSR (Советую ознакомится): https://mega.nz/file/5bNgAAzI#LHO7s9tfvq-EuHj6h-MGNe9g4tbCyQTAFXbFjGfbEYk
Запускаем HTTP Analyzer, нажимаем на кнопку start, после этого запускаем нашу программу и снова активируем ключом. Видим что как при запуске происходит запрос на сайт автора с проверкой ключа. Точнее два запроса, один при запуске и если ключ не верный то не смотря на лицензию в программе срабатывают ограничения и на картинку накладывается неприятный водяной знак, в котором указано что программа не зарегистрирована. И второй запрос происходит когда вы активируете лицензию через форму активации.
я имею в виду если не будет доступа к сайту разработчика. Ну а тогда вообще можно сделать проще некуда . Берем и просто вырезаем ссылку из кода, вот так вот.
Сохраняем изменения и теперь снова запускаем программу и активируем (обязательно), так как при запросе на сайт (проверке ключа) активация слетает. После перезапускам программу сколько угодно раз и никаких водяных знаков, с надписью что программа не зарегистрирована, не появляется. То есть активация у нас не слетает, проверка через интернет также не работает и программа активируется и принимает ключи активации с нашего генератора лицензий (KeyGen).
Вариант номер 2: Никаких вмешательств в исполняемый файл программы.
Суть которого в следующем. Мы знаем что ключ у нас состоит из 66 символов, первые два символа в ключе проверяются. То есть "6F", "3A", "9A", "E3" это типы лицензий программы. Ну и ключ проверяется через интернет, если верный то программа активируется, если нет то понятно что
Так вот, что бы программа приняла ключ активации, нужно запретить ей доступ в интернет. Но так как, по условияю Варианта2, мы не можем патчить исполняемый
файл, то как выйти из ситуации ?. Все просто, добавить блокировку сайта, в файл Host (C:\Windows\System32\drivers\etc). Но в ручную, это делать, имея KeyGen на руках как то не очень
Что в итоге, после вышесказанного, делаем. Немного модифицируем генератор ключей. А именно:
Для того чтобы ограничить программе доступ в интернет, запрограммируем кнопку на добавления записи (127.0.0.1 reg.tsr-soft.com) в файла (host) Windows. Что расположен по адресу (C:\Windows\System32\drivers\etc). Файл Host, для тех кто не в курсе, это текстовый файл, в котором расположен список ip и доменных имен. Настраивая этот файла можно управлять маршрутизацией трафика и разрешением для ip адресов (dns).
Вот так будет выглядеть код кнопки что добавляет запись в этот файл и тем самым блокирует доступ программе к сайту.
1. Сначала нажимаете кнопку Patch, после этого вносятся изменения в файл hosts (блокируя программе доступ к сайту).
2. После этого запускаете программу и генерируете ключ.
3. Активируете этим колючем.
4. Программа скушает ключ и активируется без вопросов.
Если хотите эту запись убрать из файла Hosts, то вот написал вариант кода, можете сами потренироваться (Сделал для тех кому такие мелочи интересны). Код кнопки удаления записи из файла, будет выглядеть вот так:
Проверяем какой результат у нас получился. Как видим все успешно активировалось и никаких нюансов не возникло. Можете сами в этом убедится, ну и конечно же я показал всю схему на скриншоте. А именно принцип действия:
Подведем итоги. В этой статье, я показал вам два варианта взлома программы. - Первый вариант - более красивый с точки зрения генерации ключей активации, где можно вставить ссылку на форум, сайт. То есть только такой формат ключа будет принимать программа.
- Второй вариант - способ генерации ключей активации что не требует вмешательства в исполняемый файл программы, то есть не изменяя сам файл можно сгенерировать ключ активации.
- Какой из вариантов для вас удобней, решать вам.
На этом у меня все. Надеюсь понравилась статья. 
В архиве, скриншот:
Инструменты:
dnSpy x32 / virustotal:
dnSpy x64 / virustotal:
ExeinfoPe / virustotal: https://www.virustotal.com/gui/file/32e6df44a529d3bd543aae01365852990c0e7f3b4f84b5a7f9d7dfc18d6a46fd
de4dot x32 / virustotal: https://www.virustotal.com/gui/file/1ef4d880b16efb49271463e1b9c0de68e637320c1be40f1e7f1603538f3e289d
de4dot x64 / virustotal: https://www.virustotal.com/gui/file/89582c764c5cdeb58656a60f8419fdcd8c5eb6caa2e5f332d2658e89555693cb
HttpAnalyzer / virustotal: https://www.virustotal.com/gui/file/f25541dee8f859b62c642d2e6e835c247900b5bc94a00cdbc4d894bab83796dd
KeyGeN (Исполняемые файлы, Исходники прикрепил к файлам статьи):
Вариант 1 / virustotal (Project1.exe): https://www.virustotal.com/gui/file/8c764d8db3492aeab68c7daef06b1ac5b4acda08812f7913d44e50ebc4cda138
Вариант 2 / virustotal (Project1.exe): https://www.virustotal.com/gui/file/183b983e535a12f2525dd7478806d0ab41e5d173fd79a29a84e24f547bedb852
Файлы к статье:
В архиве, скриншот:
Инструменты:
dnSpy x32 / virustotal:
de4dot x32 / virustotal: https://www.virustotal.com/gui/file/1ef4d880b16efb49271463e1b9c0de68e637320c1be40f1e7f1603538f3e289d
de4dot x64 / virustotal: https://www.virustotal.com/gui/file/89582c764c5cdeb58656a60f8419fdcd8c5eb6caa2e5f332d2658e89555693cb
HttpAnalyzer / virustotal: https://www.virustotal.com/gui/file/f25541dee8f859b62c642d2e6e835c247900b5bc94a00cdbc4d894bab83796dd
KeyGeN (Исполняемые файлы, Исходники прикрепил к файлам статьи):
Вариант 1 / virustotal (Project1.exe): https://www.virustotal.com/gui/file/8c764d8db3492aeab68c7daef06b1ac5b4acda08812f7913d44e50ebc4cda138
Вариант 2 / virustotal (Project1.exe): https://www.virustotal.com/gui/file/183b983e535a12f2525dd7478806d0ab41e5d173fd79a29a84e24f547bedb852
Файлы к статье:
Скрытый контент для зарегистрированных пользователей.