• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Реверс-инжиниринг для начинающих [Часть 8 \ -EXE-]

-EXE-

RAID-массив
Пользователь
Регистрация
07.08.2022
Сообщения
55
Реакции
349

ST8Logo.png


Продолжаю цикл статей по реверс-инжиниринг для начинающих. Если предыдущие мои статьи для Вам понравились то гарантирую что эта будет не менее
интересная
. Хотел еще отметить и тот факт что я стараюсь и подобрать, различные, алгоритмы защиты программ. В основном сложные и не сложные механизмы защиты. Почему именно так идет отбор ?. Просматривая внутренности кода (в отладчике), разбирая алгоритм защиты, изначально может показаться что вот все, вот именно тут сейчас сделаем поправочку и готово. А на самом деле все так завязано, что изменив код в одном месте, не анализируя всю логику - получите тучу исключений в другом. А на выходе, при сохранении уже вашего пропатченного файла, полноценно софт работать не будет. Поэтому, к каждой статье я подхожу индивидуально - детально показываю, разжевываю, пытаюсь натолкнуть на мысль.

Ну и сегодня, мы снова, будет сражаться с различными алгоритмами защиты, практикуя как патчинг так и написания KeyGen (генератора лицензионных ключей).
Согласитесь что создать свой генератор ключей намного приятней смотрится, нежели просто крякнуть программу. Там где это возможно, конечно же, мы будем
делать, а там где нет - будем думать и делать изменения. Главное что бы все действия были осмысленные, не наугад.

Ну и сегодняшние наш пациент подтвердит мои слова, сказанные выше. А статью мы поделим на пункты, так как дойдя до определенного участка кода, исследуя алгоритм защиты, у нас появится возможность выбора. А именно что лучше, в этом случае,, конечно же мы рассмотрим два варианта. Но для удобства чтения, структура сегодняшней статьи будет разделена на Вариант 1 и Вариант 2.

А анализировать мы будем программу TSR Watermark Image (Официальный сайт: https://www.watermark-image.com/download.aspx). Ну и предназначение программы заключается в нанесении различных водяных знаков на изображения. Присутствую разные плюшки в виде нанесения 3D текста и различных эффектов. Ну а более подробную информацию можно почитать на официальном сайте программы. Основное представление о программе есть, ну и теперь давайте приступим к анализу защиты программы.

Для начала давайте перейдем на официальный сайт программы и посмотрим что нам говорит разработчик о ограничениях бесплатной версии. Ну и попытаемся узнать информацию о активации программы, это нам даст первую зацепку. Если конечно же разработчик предоставляет такую информацию в полной мере, в некоторых случаях бывают и исключения.

Tsr-1.jpg

В нашем же случае, в бесплатной, тестовой версии на каждую картинку накладывается водяной знак в котором говорится что программа не зарегистрирована. А также нет загрузки изображений в wordpress и по ftp ну и сами видим что много чего нет, кто бы сомневался :D . То есть, в зависимости от типа лицензии, следуют и соответствующие ограничения. Отлично, визуально ознакомились с информацией и давайте копать далее.

Скачаем, установим программу и пропустим её через утилиту Exeinfo PE. Это утилита для получения информации с исполняемого файла для тех кто не в курсе и не читал предыдущие статьи.
  • Пункт№1 - Собственно имя исполняемого файла программы.
  • Пункт№2 - Нам показано что это 64 разрядное (64-битное) приложение Windows.
  • Пункт№3 - Обнаружен обфускатор на программе, язык программирования С#.
  • Пункт№4 - Для распаковки, деобфускации нам предлагают использовать de4dot v3.1.
Tsr-2.jpg

Ну первое что нам нужно сделать, как минимум, это снять обфускатор с программы. Для этого используем стандартный de4dot v3.1. Нужно перетащить исполняемый файл программы на файл de4dot-x64.exe. Выглядеть все это дело будет вот так, в итоге вы получите более менее читаемый код в исполняемом файле.

Tsr-3.jpg

Теперь, для удобства, удаляем, оригинальный, исполняемый файл программы. А распакованный, после деобфускации, оставляем и переименовываем. То есть делаем имя такое же как и у оригинала. В итоге у нас должно получится вот так вот:

Tsr-4.jpg

Ну а теперь давайте запустим программу и по факту посмотрим на принцип активации. И выходя из полученной информации будем действовать. А по факту, у нас, программа запускается и в левом, нижнем, углу отображается информация о лицензии (по стандарту незарегистрированная версия). А если перейти в меню Справка - Регистрация то мы увидим и форму активации программы. Для активации софта нам предлагают ввести данные активации Имя, Почту и Регистрационный ключ. Уже, как минимум, мы понимаем в какую сторону нам двигаться.

Tsr-5.jpg

Отлично, еще одна зацепка есть и теперь давайте закинем программу в отладчик DnSpy x64 (так как мы выяснили что программа 64 битное приложение). Уже понятно что программа имеет разные типы лицензии, ну и логично будет поискать функции, методы связанные с лицензированием. К примеру давйте в основной поиск введем слово license и что нам покажет отладчик, увидим список функций, проще говоря. B итоге, становится интуитивно понятно что getInstalledLicenseVersion используется в главной форме программы. Ну и то что 99% там что то связано с лицензированием.

Tsr-6.jpg


Давайте перейдем внутрь и посмотрим. А тут у нас интересный участок кода, в котором идет проверка установленной лицензии. В строковую переменную string text передаются какие то данные (пока мы не знаем что) и по факту уже проверяются. Причем используется функция .Substring(0, 2) - что считывает данные от нуля (начала строки) и до второго символа, включительно. Осмелюсь предположить что это проверка ключа активации (лицензии) при запуске программы. Но это еще нужно будет проверить, предполагать можно, но проверять всегда нужно!.

Tsr-7.jpg

Давайте перейдем в method_35 и посмотрим его код и попробуем посмотреть на его код. Становится интересно что же там за события происходят. А в нем идет получение и сравнение переменных. Пока что логика нам приблизительно понятна, так как мы только на начальном этапе анализа.

Tsr-8.jpg

Ну хорошо, чего там думать да мудрить, давайте поставим точки останова в начало функций method_35 и getInstalledLicenseVersion и посмотрим под отладчиком их взаимозависимость. Выглядеть это все будет вот так. Как видим нас любезно перебросило в Method_36, что собственно и не удивительно.

Анимация-Gif-1
Обязательно посмотреть:
https://mega.nz/file/kPNQiYzY#3siDGHbRFXQJpXB1ut-jb-kklqjgVTOXC9kwpEBpgrc

И у нас вырисовывается очень интересная картина. Как заметно, на анимации GIF-1, программа при запуске проверяет ключ активации и далее нас изmethod_35 переадресовывает в method_36. И код самой функции очень громадный, если быть точным то это 478 строк. Громадный он не просто так, читаем статью дальше и поймете почему.

Tsr-8.jpg

А вот что интересно что и в method_36, также, идет проверка первых двух символов ключа активации программы. А после этого идет проверка типов лицензии по первым двум символам ключа активации. В нашем случае это "6F", "3A", "9A", "E3".

Tsr-9.jpg


А чуть ниже идет проверка ключей активации, своего рода серый список ключей :cool:. Что это такое, бывает такое что разработчики практикуют написания такого кода, для
блокировки ключей попавших в публичный доступ. То есть слитые в интренет, не самый лучший способ защиты. Но что есть то есть, продолжаем дальше.

Tsr-10.jpg


А еще чуть ниже, в этой же громадной функции, идет проверка ключа активации через интернет. То есть вызывается функция checkKeyOnline, в которой программа делает запрос на сайт разработчика, проверяя ключ активации.

Tsr-11.jpg


Ну и собственно сам код функции проверки через интернет. То есть там также идет проверка ключа длина которого = 66 знаков. Такой вывод мы можем сделать только потому что уже увидели список ключей. Анализируем дальше.

Tsr-12.jpg


Ну и на этом этапе, пути крякинга у нас расходятся :D. Что я имею в виду ?, все просто, как я говорил в начале статьи, мы рассмотрим несколько вариантов.

Вариант номер 1. С внесением изменений в исполняемый файл программы.

План действий:
  1. Напишем KeyGen (генератор лицензий \ К файлам к статье я, конечно же, его прикреплю).
  2. Изменим алгоритм активационных ключей.
  3. Заставим программу принимать ключи активации с авторством и рекламой форума xss.pro.
  4. Уберем онлайн проверку ключа.

Как это все будет происходить я продемонстрирую дальше. Приступим к выполнению задуманного, мы выяснили что ключ состоит из 66 символов а в начале ключа проверяются первые два символа "6F", "3A", "9A", "E3" (Типы лицензии).


Основа уже у нас есть, давайте напишем сначала генератор лицензий и после уже будем вносить изменения в сам код программы. Ну и генерируемые ключи активации сделаем красивые, с рекламой форума xss.pro.

Вот так будет выглядеть генератор лицензия и сейчас я прокомментирую его код.

Tsr-13.jpg


TSRKeyGen.gif - пример генерации ключей активации.

TSRKeyGen.gif

Ну и теперь прокомментирую код генератора. Особо ничего сложного нет, но это только основа, а далее еще нужно сделать так что бы программа принимала ключи такого типа.

Tsr-14.jpg

  1. Наш словарь что состоит из заглавных букв и цифр.
  2. Настройка длины нашего сгенерированного ключа.
  3. Из словаря берем данные и генерируем в строковой переменной S.
  4. Ну и тут у нас типы лицензии, с авторством и рекламмой форума xss.pro. Что бы ключ активации красиво выглядел.
  5. А вот в 5 пункте , кусочек кода, что отвечает за выделения участка текста. То есть при нажатии на кнопку "Генерировать ключ" будет выделен текст, в ключе, а именно xss.pro. Смотрится красиво.
Все это делается за того что бы красиво смотрелся ключ активации. Мелочи но приятно :). То есть:

Tsr-15.jpg

Ну что, генератор ключей у нас готов, а теперь возвращаемся к коду программы и там нужно внести правки. А именно заставить программу принимать такие ключи.
А также отрезать проверку ключа через интернет, сайт, автора, программы.

Еще один нюанс, на что нужно обратить внимание: как мы выяснили, что в программе, проверка ключа, первые два символа "6F", "3A", "9A", "E3" встречается не в одном месте. Поэтому и изменения нужно будет вносить аналогично. Ну а теперь приступаем, возвращаемся к нашему коду, на чем остановились, до написания KeyGen.

Вносим правки в трех разных участках кода.

Tsr-16.jpg


То есть воспользуемся поиском по коду и заменим в трех местах (в разных функциях), значения

  1. "6F" заменить на "-EXE-xss.pro-1"
  2. "3A" заменить на "-EXE-xss.pro-2"
  3. "9A" заменить на "-EXE-xss.pro-3"
  4. "E3" заменить на "-EXE-xss.pro-4"
  5. А еще проверку первых двух символов .Substring(0, 2) на .Substring(0, 13)

ВидеоTSR (Советую ознакомится): https://mega.nz/file/5bNgAAzI#LHO7s9tfvq-EuHj6h-MGNe9g4tbCyQTAFXbFjGfbEYk
Ну и теперь сохраняем наши изменения в исполняемый файл, запускаем KeyGen и пробуем зарегистрировать программу, сгенерированным колючем активации. Для примера активируем Профессиональную лицензию. Как видим программа приняла ключ активации без каких либо вопросов. И самое главное мы добились того что ключ программа будет принимать именно авторский, с рекламой форума, в нашем случае: -EXE-xss.pro- и в зависимости от типа лицензии добавляет + [1,2,3,4]. А остальная часть кода генерируются рандомные символы с цифр и букв.

Tsr-17.jpg

Закрываем программу и пробуем запустить снова, загружаем любую картинку для теста. И вот после этого, на картинку, накладывается все равно водяной знак в котором говорится что программа не зарегистрирована. Почему так происходит ?, ведь мы же сгенерировали ключ, программа приняла его, что за дела ? :D Значит где тое еще идет проверка ключа, что логично.

Tsr-18.jpg

Все очень просто, при анализе выше, мы выяснили что еще идет проверка ключа через интернет, функция checkKeyOnline. То есть мы все правильно сделали, но нам мешает проверка через интернет. Давайте проверим это и в этом нам поможет программа HTTP Analyzer. Что предназначена для мониторинга http / https трафика в режиме реального времени.

Запускаем HTTP Analyzer, нажимаем на кнопку start, после этого запускаем нашу программу и снова активируем ключом. Видим что как при запуске происходит запрос на сайт автора с проверкой ключа. Точнее два запроса, один при запуске и если ключ не верный то не смотря на лицензию в программе срабатывают ограничения и на картинку накладывается неприятный водяной знак, в котором указано что программа не зарегистрирована. И второй запрос происходит когда вы активируете лицензию через форму активации.

Tsr-19.jpg

Анализируя функцию, могу сразу сказать что тут можно исправить её по разному. Как видим если происходит исключение то функция даже никак не отреагирует. То есть
я имею в виду если не будет доступа к сайту разработчика. Ну а тогда вообще можно сделать проще некуда . Берем и просто вырезаем ссылку из кода, вот так вот.

Tsr-20.jpg

Сохраняем изменения и теперь снова запускаем программу и активируем (обязательно), так как при запросе на сайт (проверке ключа) активация слетает. После перезапускам программу сколько угодно раз и никаких водяных знаков, с надписью что программа не зарегистрирована, не появляется. То есть активация у нас не слетает, проверка через интернет также не работает и программа активируется и принимает ключи активации с нашего генератора лицензий (KeyGen).

Tsr-21.jpg

А теперь покажу вам вариант номер 2. Что подтвердит мои слова о том что, в данном случае, проверку онлайн можно так банально, без последствий поломать.

Вариант номер 2: Никаких вмешательств в исполняемый файл программы.

Суть которого в следующем. Мы знаем что ключ у нас состоит из 66 символов, первые два символа в ключе проверяются. То есть "6F", "3A", "9A", "E3" это типы лицензий программы. Ну и ключ проверяется через интернет, если верный то программа активируется, если нет то понятно что :cool:.

Tsr-22.jpg


Так вот, что бы программа приняла ключ активации, нужно запретить ей доступ в интернет. Но так как, по условияю Варианта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).

Вот так будет выглядеть код кнопки что добавляет запись в этот файл и тем самым блокирует доступ программе к сайту.

Tsr-23.jpg

После чего, код кнопки что генерирует ключ активации будет вот таким.

Tsr-24.jpg

То есть принцип действия таков:
1. Сначала нажимаете кнопку Patch, после этого вносятся изменения в файл hosts (блокируя программе доступ к сайту).
2. После этого запускаете программу и генерируете ключ.
3. Активируете этим колючем.
4. Программа скушает ключ и активируется без вопросов.

Если хотите эту запись убрать из файла Hosts, то вот написал вариант кода, можете сами потренироваться (Сделал для тех кому такие мелочи интересны). Код кнопки удаления записи из файла, будет выглядеть вот так:

Tsr-25.jpg


Проверяем какой результат у нас получился. Как видим все успешно активировалось и никаких нюансов не возникло. Можете сами в этом убедится, ну и конечно же я показал всю схему на скриншоте. А именно принцип действия:

Tsr-26.jpg

Подведем итоги. В этой статье, я показал вам два варианта взлома программы.
  • Первый вариант - более красивый с точки зрения генерации ключей активации, где можно вставить ссылку на форум, сайт. То есть только такой формат ключа будет принимать программа.
  • Второй вариант - способ генерации ключей активации что не требует вмешательства в исполняемый файл программы, то есть не изменяя сам файл можно сгенерировать ключ активации.
  • Какой из вариантов для вас удобней, решать вам.
На этом у меня все. Надеюсь понравилась статья. ;)

В архиве, скриншот:
Tsr-27.jpg


Инструменты:
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

Файлы к статье:
Скрытый контент для зарегистрированных пользователей.
 
Очень важно, чтобы ваши труды не канули в Лету. Сам работаю в другой специфике, но читать вас одно удовольствие, а тем более применять на практике. Админы, присмотритесь и сохраните статьи -EXE-. На просторах нашего взаимодействия нет ничего подобного. Автор - Спасибо!
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Я попробовал эти два метода в статье, но после загрузки изображения оно по-прежнему отображается незарегистрированным. Очень странный!--------( Решена) Проблема с изображением
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх