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

-EXE-

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

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

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

Логика моего подхода, при написании статей, очень проста - показать и разобрать все тонкости того или иного алгоритма. А далее уже все зависит от человека что
черпает информацию
. Если вникать в это дело с интересом то рано или поздно вы приобретете, личный, незабываемый опыт. И то, что казалось невозможным, станет
доступным, не вызывающим никаких сложностей при анализе.

Как я и говорил ранее что практика это хорошо, но хорошо когда мы знаем что мы делаем. Если же происходит обратное, нелогичные действия наугад, то при таком подходе, добиться 100% результата будет не просто. Особенно, если защита исполняемого файла, на первый взгляд, кажется простой, не вызывающей никакого подозрения.

И вот бывает что вы уверены что сейчас внесете пару изменений (в логику алгоритма защиты) и все. А нет :D , бывают исключения, которые могут испортить настроение, в особых случаях, начинающему реверс инженеру.

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

Сегодняшняя статья будет разделена на отдельные пункты, так как софт у нас не один. Так удобней воспринимать информацию.
Ну и теперь приступим к обзору наших программ.​

Обзор защиты программы Auto Mail Sender: Версия скачана с сайта разработчика и на момент публикации этой статьи является актуальной.
Разработчик \ Ссылка на официальный сайт: https://www.automailsender.com/auto-mail-sender-standard-edition.htm
Версия программы: 18.4 (Сборка 109)
Предназначение программы: Программа для массовой рассылки электронных писем. Поддерживает различные макросы, списки аккаунтов smtp, много-поточности и отчетов. Ну и удобно то что в программе имеется русская локализация.
Принцип активации, защита: Активация программы через интернет, для активации используется ключ.

Mss-1.jpg

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

Mss-2.jpg
Так и делаем, идем на официальный сайт, и смотрим что там говорится о ограничениях (Бесплатной версии). Нам предлагают три типа лицензии. Персональная с ограничением 300 электронных писем в месяц, Бизнес (ограничения 900 писем \ Месяц) и Корпоративная (без ограничений). Можно сказать, абсурдные типы лицензий, с такими ограничениями для софта по рассылке. А вот если запустить бесплатную версию и открыть меню Лицензия то мы видим что нам доступно всего 16 сообщений в месяц, для рассылки. От такой бесплатности толку маловато, так что ставим себе цель разблокировать программу до Корпоративной (Enterprise) лицензии.

Mss-3.jpg

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

Mss-4.jpg

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

Для этого будем использовать программу HTTP Analyzer что поможет нам отследить активность (обращение) софта в интернет. По сути то дела это обычный, но полезный,
анализатор http \ https трафика в режиме реального времени. Как и обычно, запускаем сначала анализатор и активируем его нажатием кнопки Start. После чего запускаем программу и смотрим результат. То есть идет обращение от софта к сайту (серверу) разработчика или нет. В итоге, чего и следовало ожидать, выходя из наблюдений выше, софт обращается к сайту разработчика.

Mss-5.jpg

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

Я ввел ключ рекламного характера -EXE-xss.pro, понятно что он не рабочий, так как мы еще никаких изменений в программу не вносили ;) . И в итоге получил сообщение что ключ неверный. И интересно то что: в ответе от сервера никаких данных нет, типа False или True или что то в этом роде, как обычно бывает в некоторых защитах.

Mss-6.jpg


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

Ну как обычно, давайте посмотрим не защищен ли код программы пакером или обфускатором. В этом нам поможет, как обычно, утилита ExeinfoPe (Анализатор исполняемых файлов, не только). Перетаскиваем исполняемый файл на форму утилиты и получаем результат.

Mss-7.jpg


1. Имя нашего, анализируемого, исполняемого файла: Auto Mail Sender Standard Edition.exe
2. Разрядность (x32 или x64): Не определена (иногда бывает такое), но отладчик автоматически определил что версия x64.
3. На чем написан софт \ обфускатор или пакер есть ли ?: Visual C# \ Нет, не обнаружено.
4. Советы по использованию отладчика: но мы будем использовать, как обычно, DnSpy.

Можно начинать копаться в коде. Но, перед тем как начнем, скажу что: не смотря на то что на программе нет пакера, пациент нам попался не простой. Дальше вы сами в этом убедитесь. Закидываем программу в отладчик DnSpy и сразу же переходим к точке входа как обычно делали, ранее.

Mss-8.jpg

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

Mss-9.jpg


Что я предлагаю: К примеру, если мы вводим неверный ключ активации в программу то она нам говорит (выводит сообщение) что ?, ввести правильный ключ лицензии. Можем воспользоваться поиском и начать искать, пытаясь найти зацепку, по ключевым словам. К примеру я ввел "ключ лицензии" и наивно начал искать по всей структуре кода :D. Это показываю вам, специально, пример.

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

Mss-10.jpg

И теперь внимание, особое внимание:
Можно подумать, что за бред, если сообщение о неправильном ключе есть то оно же от куда то вызывается. Так как, программа, поддерживает многоязычный интерфейс, то ради интереса, давайте посмотрим из чего состоит структура папок где расположена программа. Переходим по пути, куда установили программу, видим что возле программы расположена папка langs. Открыв папку, мы увидим список файлов, то есть языковых нстроек, под программу. Вот так это все выглядит:

Mss-11.jpg
Так как я использую , в программе, русский язык то соответственно откроем файл ru.xml в текстовом редакторе и посмотрим что там. Открыв файл, становится понятно вот что: эти настройки загружаются в программу при запуске. И сообщения, которые отвечают за исключения, то есть: ввод неверного ключа, ошибки формата ключа, активации лицензии, берутся с этого файла. Но как же они загружаются туда ?. Все просто, используя, текстовые переменные. Вот в чем подвох и почему мы не могли найти ничего.

Mss-12.jpg


Mss-13.jpg

Полученная, выше, информация дородово нам упростит процесс, но про это чуть позже. Анализируем ситуацию далее.

Давайте перейдем в окно о программе и посмотрим что там за код, под отладчиком. А там у нас идет чтения типа лицензии из Declarer.licType. Но радоваться на этом не стоит, самые неожиданные моменты еще впереди :D. Окно About никакой погоды, для нас, не делает а только читает тип лицензии из Declarer.licType, давайте перейдем и посмотрим что же там.

Mss-14.jpg


Mss-15.jpg

Обратите внимание, обязательно, на licType = "F"; То есть, по стандарту, подгружается лицензия F, от слова Free (на английском), бесплатная лицензия. Делаем вывод на основе предположений, выходя из опыта. Ну а мы себе поставили задачу разблокировать программу до лицензии Enterprise (Безлимитной).

И вот сейчас мы сделаем только один шаг, из многих что еще предстоит, что бы попробовать активировать лицензию. Давайте же изменим "F" на "E". И сохраним и посмотрим результат. Сразу скажу радоваться еще, очень, рано . Так как мы не знаем как поведет себя программа, этот эксперимент я вам специально показал, дальше будет проще воспринимать суть происходящего.

Mss-16.jpg


Mss-17.jpg

Запускаем, уже измененную программу и можно сказать победа и радости полно o_O. Но не спешите радоваться. И тут нас ждет неприятный сюрприз, только от части приятный. Факт в том что: лицензия программа с Бесплатной стала Безлимитной. Но когда вы настроите программу и запустите рассылку по почтовым ящикам, то вас ожидает - неприятной сюрприз.

После настройки софта, подключении SMTP аккаунтов, загрузки базы клиентов мы нажимаем на кнопку "Отправить". В итоге получаем сообщение: что мы используем пиратскую версию софта. После закрытия сообщения закрывается и программа. То есть процесс убивается, выскакивает системная ошибка (исключение) и программу выкидывает.

Mss-18.jpg


Mss-19.jpg

Что это вообще такое и в чем суть ?, за чего появляется подобное сообщение. Мы можем только предположить, для начала. Возможно, при нажатии на кнопку "Отправить", программа стучит на свой сайт и сверяет какие то параметры, видит что ключа нет, выводит сообщение. Или же если нет обращения к сайту программы, то скорее всего, в программе имеется алгоритм проверки ключа активации. И алгоритм проверки может вызываться как с самого исполняемого файла так и с динамических библиотек (файлов .dll, что расположены возле самой программы). Сейчас, наверняка, сказать нельзя.

Значит, что делаем далее ?. Правильно, запускаем снова анализатор трафика HTTP Analyzer. И посмотрим, не происходит ли обращения программы к сайту разработчика, при нажатии на кнопку "Отправить". Анализатор молчит, значит в сеть софт не стучит при нажатии на кнопку. А вот сообщение снова выскочило, значит нужно проверить вариант с проверкой ключа офлайн.

Mss-20.jpg


Как искать сообщение о том что используется "пиратская версия софта". Я бы думал так: если это сообщение вызывается до начала рассылки, то где то, в коде, расположена функция что отвечает за рассылку. Вот от этого и будем отталкиваться. Приступим ко поиску, вводим (Sendmail, к примеру, один из вариантов) и попадаем на длинный код, где перед вызовом функции рассылки видим вызов SaveTemplate.

Что это за функция мы можем только предположить, но нам нужно знать точно. Обратить внимание: Переходим внутрь и видим там происходит какое то сравнение данных из самого exe файла.

Ставим точки останова, что бы в этом убедится и смотрим на результат выполнения.

Mss-21.jpg


Mss-22.jpg


:zns5: Обязательно ознакомится с Видео_AMSS-1 (Видео есть и в Архиве).


Как заметно на видео: в функции SaveTemplate происходит эта проверка. Это говорит о том что: если мы введем неправильный ключ (или внесем изменения, как мы делали выше), то программа естественно проверит это, в итоге получим сообщение об использовании пиратской версии софта. Хитрый ход разработчика :D.

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

Ну что в этом ситуации делать?, немного становится понятно как действовать и картина немного вырисовывается. Ну и теперь нужно просто вырезать (убрать) эту проверку из кода. То есть вырезать все что выделено, на картинке. Запустить софт и посмотреть на работу, так как на данном этапе анализа, зависимостей, тут, критичных нет.

Mss-23.jpg


То есть по сути то дела у вас должно все выглядеть вот так.

Mss-24.jpg

После этого сохраняем изменения. Запускаем программу и пробуем сделать рассылку снова, нажав на кнопку "Отправить". И тут засада ;), снова программа показывает это сообщение. А это говорит только об одном: что проверка вызывается еще и в функции SendMail, что осуществляет (отвечает за) рассылку.

Mss-25.jpg

Давайте это проверим. Теперь нужно снять точки останова (breakpoint). И поставить точку останова: в вызов функции и в начало функции, что бы убедится что сообщение об ошибке выводится именно в функции SendMail.

:zns5: Обязательно ознакомится с Видео_AMSS-2 (Видео есть и в Архиве).


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

Тут еще стоит добавить что: разработчик программы постарался и напихал проверок в код, вывод предупредительных сообщений (+ проверка ключей через интернет, не только с основного исполняемого файл а и с динамических библиотек). И получаем факто того что защита срабатывает в разных местах.

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

Выходя из полученной информации с Видео_AMSS-2, вносим изменения в функцию SendMail() вот так.


Mss-26.jpg


Mss-27.jpg

Как я сказал, выше, мы действуем точечно и не убираем все подряд. Убираем куски кода (инструкции) что при запуске рассылки: проверяют лицензию, закрывают приложение. В итоге у нас получается вот такой очищенный кусок кода, с правками.

Mss-28.jpg

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

:zns5: Обязательно ознакомится с Видео_AMSS-3 (Видео есть и в Архиве).


Как вы видите, на видео, программа прекрасно делает рассылку (как будто у вас лицензия). Мы активировали себе, благодаря манипуляциям, проделанным выше, коммерческую лицензию, что не имеет ограничений по количеству почтовых ящиков.

И думаете на этом все? ;) А вот и нет, не угадали. Так как разработчик софта и тут предпринял меры, для защиты. Можно сказать, на случай форс мажора. То что
мы активировали лицензию это очень хорошо, ну а помните начало статьи ?. Что я имею в виду ?: мы не должны забывать, что софт, при запуске стучит (делает запрос) на свой сайт. И от туда черпает данные (получает дату и версию софта). Вроде бы, можно сказать, ну и что, мы же программу то активировали и уже по барабану куда он стучит.

А вот и нет :D. Представьте себе, что у разработчика упал сайт, то есть просто перестал работать, по какой то причине. Или он обиделся что его софт сломали и вообще убрал информацию с сайта. И теперь Внимание: Наша программа, при запуске, обращается к сайту и берет от туда: данные в виде даты, и версии софта. Если информации нет то нас, снова, ждет неприятность, какая ?.

Сейчас я продемонстрирую, симулируя крах сайта разработчика, то есть добавлю в файл hosts (что расположен по адресу C:\Windows\System32\drivers\etc) , одну строку. А именно: 127.0.0.1 automailsender.com

То есть вот так это все дело делается.

Mss-29.jpg

И после этого запустим нашу программу, которая нормально работала до блокировки доступа, к сайту разработчика. И при нажатии на кнопку "Отправить". Получаем неприятное сообщение (что программа получает дату с сервера), снова засада o_O!. И на этом наш софт застывает и ничего не происходит, то есть рассылка не идет.

Mss-30.jpg


Вывод очевиден, нужно с этим что то делать и исправить ситуацию. Так как, в этом случае, кряк будет считаться неполноценным и работать пока есть доступ к сайту, что не очень хорошо. Все должно быть красиво и работоспособно 100%, без зависимостей от сайта, если это возможно.

А вот тут уже интересно и вот как раз, как я говорил выше, нам поможет найти вывод этого сообщения - файл языковых настроек ru.xml (что расположен в папке langs). И так, открываем файл настроек и там ищем это сообщение. Находим его по индексу 224, из списка строк. И нам, конкретно, нужно имя значения что вызывается с программы. А это у нас что ?, правильно - get_date.

Mss-31.jpg


Давайте поищем это значение по коду программы, по всей главной форме: Main. Как видим, также вызывается функция, перед запуском рассылки и там, если значение false то вызывается сообщение с проверкой и далее программа заходит в закат :). Что бы это исправить нужно немного подправить инструкцию. А именно False на True.

Mss-32.jpg


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

:zns5: Обязательно ознакомится с Видео_AMSS-4 (Видео есть и в Архиве).


И так, вкратце и по сути, что происходит на Видео_AMSS-4:

1. Логика: Так как мы уже знаем что функция SendMail отвечает за рассылку а перед её вызовом срабатывает проверка даты. Что имеется в виду - программа получает дату с вашего компьютера и дату с своего сервера (сравнение). Если хотя бы одно условие не соблюдается (нет подключения к сайту), то нам показывается сообщения и программа перестает работать (зависает).

2. Наши Действия: Мы ставим точку останова на функции, что проверяет дату на пк и в начало функции SendMail. После запускаем программу под отладчиком и смотрим как она отработает. И вносим изменения в конструкцию кода, что бы программа сразу же перешла в функцию SendMail, пропуская проверку. А уже в функции SendMail идет уже проверка даты с сервера. В пошаговом режиме доходим до этого места и патчим (убираем её).

А теперь запускаем программу и проверяем работу. Все отлично заработало и мне показалось что этого достаточно. Но вот есть, в программе, еще один подвох. Спустя время, после работы. Появляется сообщение :D, в котором говорится что невозможно соединится с сервером для проверки ключа. Значит это еще одна проверка (точнее то что от неё осталось .

Действуем, также, как я показывал ранее. Находите текст сообщения среди списка (в языковых настройках, файл ru.xml). После ищем в коде где вызывается и убираем.

Mss-33.jpg


Mss-34.jpg

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

Mss-35.jpg

И финальная проверка убирается по такому же принципу. Убираем условие (Nop IL инструкций).

Mss-36.jpg

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

Mss-37.jpg

Ну и в финале, давайте добавим копирайт форума и авторство. Самый приятный момент после победы над программой ;). Тут, я думаю, даже пояснять не нужно, так как картинки говорит сама за себя.

Mss-38.jpg


Mss-39.jpg


Mss-40.jpg

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

Ну что, двигаемся дальше и рассмотрим следующего пациента.

Обзор защиты программы File Viewer Plus: Версия скачана с сайта разработчика и на момент публикации этой статьи является актуальной.
Разработчик \ Ссылка на официальный сайт: https://fileviewerplus.com
Версия программы: 4.3
Предназначение программы: Программа для просмотра 400, с копейками, разных форматов файлов. В список входят и форматы Microsoft Office, PDF.
Принцип активации, защита: И в этой программе для активации используется ключ. Валидность ключа проверяется через интернет.

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

FVP-1.jpg


FVP-2.jpg


FVP-3.jpg

Запихиваем файл в ExeinfoPe (Анализатор исполняемых файлов). Так мы узнаем дополнительную информацию для анализа.

exeInfoPE.jpg


1. Анализируемый, исполняемый файл: fvp4.exe
2. Разрядность (x32 или x64): версия x32.
3. На чем написан софт \ обфускатор или пакер есть ли ?: Visual C# \ Нет, не обнаружено.
4. Советы по использованию отладчика: но мы будем использовать, как обычно, DnSpy.

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

:zns5: Обязательно ознакомится с Видео_FVP-1 (Видео есть и в Архиве).


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

Закидываем исполняемый файл программы в отладчик DnSpy, после этого переходим к точке входа. И там видим функцию doLicensing. А в ней громадный кусок кода.

FVP-4.jpg


FVP-5.jpg


FVP-6.jpg

Но это функция не простая, там происходит проверка файла лицензии, различные проверки в виде If (если условие соответствует) и else (если нет).

Но самое главное что именно тут, в зависимости от условия, переключается лицензия на Expired (Просроченная), Trial (Пробная) и самый важный статус, для нас, Registered (Зарегистрирована).

Тут можно поступить очень радикально и программа с нами согласится не сопротивляясь ;). А именно, взять и почистить 99% и оставить только нужное, сейчас покажу как это сделать, несколько вариантов.

Можно убрать все условия и оставить только лицензию. Ну и для красоты добавить рекламный копирайт авторства: То есть при загрузке программы будет выводится рекламное сообщение и программа будет активирована.

Что делаем: Убираем, практически, 99% кода из функции doLicensing.
1. Добавляем using System.Windows.Forms что бы подключить наше рекламное сообщение и выводим сообщение, с рекламой форума xss.pro и авторство.
2. Globals.LicenseStateFvp = LicenseState.Registered, оставляем, так как это отвечает за активацию программы.
3. return true - В данном случае отвечает за запуск программы.

FVP-7.jpg

Еще мелочный, но факт, когда сообщение с рекламой появится, то пока его не закроете - программа не запустится. Своего рода, принудительная реклама ;). В итоге у нас будем все выглядеть вот так.

:zns5: Пример на анимации FVPGif-1 (в Архиве):
Если сообщение не нужно и захотите его убрать. То понятно, что строку с выводом сообщения, нужно убрать. И тогда код будет состоять из двух строчек и программа сразу же запустится и активируется, без вывода каких либо сообщений. То есть скриншот, как должно быть:

FVP-8.jpg

А еще можно вот так код переписать, если уж совсем красиво.

FVP-9.jpg

1. Идет проверка первой строки в файле "Ключ активации.txt" (что должен быть возле файла с программой). Если первая строка равна "Key:-EXE-27EW7E7WE4W7E-xss.pro" то тогда программа, при запуске, выводит сообщение что "Лицензия активирована на: -EXE-xss.pro". После этого программа запускается.
2. Если же первая строка отличается (нет) "Key:-EXE-27EW7E7WE4W7E-xss.pro" то вывод сообщения что неверный ключ и закрытия программы.
3. И третий пункт на случай того если файла "Ключ активации.txt" нет вообще. Тогда программа покажет сообщение что файла лицензии нет и после закроется.

Стоит и заметить тот факт что flag2 у нас тут служит своего рода переключателем, что решает запускать программу или нет.

:zns5: Обязательно ознакомится с Видео_FVP-2 (Видео есть и в Архиве).


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

Продолжаем и переходим к последней программе, на сегодня.

Обзор защиты программы WebSpy Vantage Ultimate: Версия скачана с сайта разработчика и на момент публикации этой статьи является актуальной.
Разработчик \ Ссылка на официальный сайт: https://www.webspy.com
Версия программы: 3.0.0.58
Предназначение программы: Универсальный, многофункциональный анализатор логов. Особенность в том что поддерживает 200 форматов журналов логов.
Принцип активации, защита: Активация программы через интернет, для активации используется ключ активации.



Пример поддерживаемых форматов, анимация WBS-1.gif (в Архиве):
WBS-1.gif

Если посмотреть на официальном сайте то разработчик нам предлагает 30 дней пробного периода, полнофункциональную версию. Давайте скачаем, установим, запустим программу и посмотрим на принцип активации. И уже от этого будем отталкиваться, составляя план действий. При запуске программы у нас загружается триальное окно. В котором говорится что, в моем случае, остался 21 день пробного периода. А еще присутствуют кнопки зарегистрировать, купить и продолжить.

WBS-2.jpg

При нажатии на продолжить у нас запускается программа. Кстати форма регистрации также есть и в программе.

WBS-3.jpg

А если нажать на зарегистрировать то программа покажет форму регистрации. Заполним которую, произвольными, данными (для теста). И нажать кнопку Request Unlock Code. Тем самим отправить запрос на сайт программы и типа, дождаться ключа разблокирования, про что нам говорит следующее окно что сплывает после предыдущего.

Окно при запуске программы и после нажатия на кнопку Register.

WBS-4.jpg

Ключ дешифрования что, по логике, выдается разработчиком. По сути то дела мы его не знаем, даже формат.

WBS-4.1.jpg

Окно About, там где показан статус текущей лицензии.

WBS-4.2.jpg

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

Запихиваем файл в ExeinfoPe (Анализатор исполняемых файлов). Так мы узнаем дополнительную информацию для анализа.

WBS-5.jpg

1. Анализируемый, исполняемый файл: WebSpy.Vantage.exe
2. Разрядность (x32 или x64): утилита не определила разрядность. Но отладчик подсказал что это версия x64.
3. Язык программирования \ обфускатор или пакер есть ли ?: Visual C# \ Нет, не обнаружено.
4. Рекомендации по использованию отладчика: но мы будем использовать, как обычно, DnSpy.

Теперь закидываем программу в отладчик в DnSpy, перейдем к точке входа и давайте подумаем как будем действовать. А у нас тут получается интересная ситуация,
так как из точки входа идет погружение (инициализация) файла динамических библиотек, WebSpy.Vantage.Runtime.dll.

WBS-6.jpg


WBS-7.jpg

Но давайте подумаем тут есть интересные нюансы. Так как мы знаем что, при старте программы, запускается триальная форма, то значит где то она вызывается. То есть вызов формы (Trial) идет параллельно с запуском софта, выходя из нашей ситуации.

Давайте же поищем функцию где она вызывается. Просматривая функции, на глаз попадается сразу же Register.

WBS-8.jpg


WBS-9.jpg
Посмотрев на код тут сразу же становится понятно что это вызов регистрационного диалога. Ну а далее идет условие, но про это мы поговорим по ходу событий.
:zns5: Анимация WBS-2.gif (в Архиве):
Форму мы отловили, можно сказать. А теперь начинается самое интересное, то есть анализ логики событий что отвечают за активацию программы. Как мы видим, тут же, у нас вызывается функция IsRegistered. Давайте перейдем внутрь (кликнув по ней) и посмотрим что же там за события происходят.

WBS-10.jpg
А тут у нас еще интересней ситуация, так как IsRegistered вызывается с другого файла динамических библиотек, а именно WebSpy.Common.dll (на картинке специально это показал). То есть какая зависимость получается: активации вызывается с файла WebSpy.Vantage.Runtime.dll а вот решение True или False принимается с файла WebSpy.Common.dll.

И вот, все последующие функции пляшут отталкиваясь от того что скажет IsRegistered. То есть True (Все ок) или же False (Запрет).

Кстати, как вы уже заметили, сразу же после функции IsRegistered идет IsExpired что отвечает за триальный период. Так вот, к чему я виду и что будем делать, выходя из логики активации софта.

Как видим что в функции IsRegistered, если ключа активации нет то она возвращает результат False. А если есть то там еще идут манипуляции с колючем (крипто-алгоритм). Можно, конечно же, покопаться в логике генерации ключа но зачем ?, если можно исправить сам код функции и сделать его True. То есть, при любом исходе, программа будет активирована при вводе любых регистрационных данных.


WBS-11.jpg

Вносим изменения в структуру кода, убираем все ненужное, а именно:
1. Убираем весь код функции IsRegistered и изменяем return false; на return true;. Что бы функция всегда нам говорила да, все ок!
2. Убираем весь код функции IsExpired и ставим return false; зачем нам проверка триала.
3. Сохраняем результат и теперь можно программу активировать на любые регистрационные данные, то есть выдуманные.


WBS-12.jpg


:zns5: Обязательно ознакомится с WebSpy.wmv (Видео есть и в Архиве).


Ну и вот, в картинка, что должно получится в итоге. Вводим какие угодно регистрационные данные, для теста.

WBS-13.jpg

Вот результат, все активировалось. И у нас красуется надпись - Безлимитная лицензия.

WBS-14.jpg

Ну и теперь для полной красоты внесем еще один штрих. А именно добавим авторство кряка и имя форума в программу, в окно About. Чтоб уже красиво все смотрелось.

WBS-15.jpg


WBS-16.jpg

Наша цель достигнута и программа активирована. Как видите красиво смотрится, ну что еще сказать.

Ну что подведем итоги ?. Думаю рассказал максимально подробно, проще уже некуда ;).

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

ВНИМАНИЕ:
  • Все картинки, видео, анимация Gif - присутствует в Архиве, что прикреплен к статье.
  • Также: Как и эта статья, так и предыдущие статьи, у меня сохраняются бекапы. В случае возникновения проблем - все восстанавливается.
  • А еще плюс, что и на форуме, также, сохраняются бекапы.
В архиве, скриншот:
Archiv.jpg


Инсталляторы программ:
Auto Mail Sender / virustotal:
https://www.virustotal.com/gui/file/4796c0747fcc2edb3d050ea6735251e0c0be6724dff473b318b9d730e9e2beb3
File Viewer Plus / virustotal: https://www.virustotal.com/gui/file/97bcee660cc9af807bdde77ba188a76acba1be398ebfdc2686ec3b60d2c9870f
WebSpy Vantage Ultimate / virustotal: https://www.virustotal.com/gui/file/99a77ec1dfa56c419d2e96f64ff2ac212e4b5f90f2aa9049384f0617942247a9

Инструменты для анализа:
HttpAnalyzer / virustotal:
https://www.virustotal.com/gui/file/f25541dee8f859b62c642d2e6e835c247900b5bc94a00cdbc4d894bab83796dd
dnSpy x32 / virustotal: https://www.virustotal.com/gui/file/7ce05f1aafaaa87d046bbad1b07801777e724251b084bc7f70cef71c98b08105
dnSpy x64 / virustotal: https://www.virustotal.com/gui/file/cc15f3f7836f5c976e058aabdd55af8635b484a6b9a5e94a2cb048856965f9e2
ExeinfoPe / virustotal: https://www.virustotal.com/gui/file/32e6df44a529d3bd543aae01365852990c0e7f3b4f84b5a7f9d7dfc18d6a46fd

Файлы к статье:
Скрытый контент для зарегистрированных пользователей.
 
Последнее редактирование:


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