Автор статьи: -EXE- (Профиль: https://xss.pro/members/275453/)
Статья для форума: xss.pro
Продолжение, цикл статей по реверс-инжиниринг для начинающих. 14 статья, в которой, вас ждет, много чего интересного. Кстати, как я ранее говорил -
анализировать мы будем не только программы написанные на С#. Так вот это случится , но еще 2 статьи по С#. А в сегодняшней статьи рассмотрим не менее
интересные программы.
Кто читал предыдущие, мои статьи, тот увидел различные алгоритмы защиты. А подбирая сегодняшний материал я подготовил, тоже, интересный список софта. В некоторых, из программ, проверка (активация) может вызываться не только с основного исполняемого файла но и с динамических библиотек (файлов что имеют формат типа .dll). Ну и конечно же, все будет зависеть от наших знаний и выбора пути, по которому мы пойдем. Поскольку, не всегда все просто, бывают случае когда исполняемый файл или динамическая библиотека - занимают не маленький размер. А это, в свою очередь, вызывает некоторые неприятности, за громадной структуры кода. Бывают, даже, такие ситуации когда декомпилятор у отладчика DnSpy трещит при преобразовании кода, можно так сказать. И когда вы начинаете искать, разбирать логику, то сталкиваетесь с ситуацией когда: декомпиляция происходит очень долго. Все за того что: код у софта километровый. Ну а если, представить ситуацию,
когда защита завязана не только в исполняемом файле, но и в dll, тогда новичкам будет непросто.
Также, сегодняшний софт, некоторый мы будем разбирать подробно а некоторый нет. Все за того что в некоторых программах есть интересные нюансы, которые нужно обязательно показать. Также, будем выходить из ситуации, когда уже у Вас есть начинающий опыт, то есть там где ну очень просто я буду показывать по факту не вникая в мельчайшие детали.
Ну а теперь давайте приступим к анализу программ.
Первая программа, защиту которой будем анализировать, CompаrseR 1.2.1 (Официальный сайт: https://parser.alaev.info/buy/). Как говорит разработчик программы -
это софт не имеющий аналогов, предназначенный для глубокого изучения индексации сайта. Среди seo-оптимизаторов, достаточно популярный софт, что обладает различными настройками.
Имеет парсер Яндекс, парсер Google и мощный краулер. Более подробную информацию о функционале программы, можно почитать, на официальном сайте. У нас же другая цель - снять ограничения с программы.
И сразу, по стандарту, как мы делали в предыдущих статьях, проверяем ее на присутствия дополнительной защиты: пакер, протектор, обфускатор кода.
Утилита Exeinfo PE (Анализатор исполняемых файлов), показала что: программа написана на C#, это 32-битное приложение и дополнительной защиты не обнаружено. Ну и не смотря на рекомендации (4-пункт на картинке, мы будем использовать, как обычно, отладчик DnSpy). Отлично, ну а теперь, приступим к ознакомлению с информацией, касающиеся ограничений, на официальном сайте программы. Что бы иметь основу, от которой будем и отталкиваться.
На сайте программы, разработчиком, указаны ограничения демо-версии. Если перейти в раздел Демо-версия, то мы узнаем что: Программа собирает информацию, только, с первых 150 страниц. Ну и не имеет механизма самообновления. Вот в принципе и вся информация что нам доступна, именно то что нужно - для начала.
Поскольку про активацию, демо-версии, нет никакой информации: я предлагаю ознакомится визуально с меню программы. Может, где то, есть форма активации или визуально видны ограничения. Запустив программу, открыв меню настроек мы замечаем такую картину: В настройках Краулер, Яндекс и Google: Присутствует одно и то же ограничение. А именно неактивный чекбокс (птичка) и возможность указать количество результатов. Это именно то ограничение про которое написано на официальном сайте. То есть, при любом раскладе, софт выдает первые 150 результатов по сайту и останавливается.
- Первый: Программа заведомо демо-версия и механизм активации убран разработчиком. Кто купит программу, у разработчика, тот и получит оригинальный лицензионный файл где е сть механизм активации и уже, ключом, активирует.
- Второй: Программа проверяет ключ на стороне сервера (своего сайта), а ключ выдается разработчиком в виде файла, после чего дает разрешение программе активироваться или нет. Скажем так.
Для начала, давайте запустим программу HTTP Analyzer, что производит мониторинг https \ http трафика в режиме реального времени. И проверим обращается ли программа к своему сайту, если обращается то какие данные отправляет и получает. Запускаем анализатор, нажимаем на кнопку Start, после чего запускаем наше программу. Да, действительно, программа обращается к своему сайту, после чего выводится сообщение что софт демо. Но ничего особенного не происходит, просто проверяется версия программы и отклоненный ответ 301. Пока что это все что нам удалось определить, но руки не опускаем.
Теперь возникает вопрос: Как будем действовать, как убрать это ограничение, если зацепиться нам не за что ?.
Действовать можно разными способами. Но я покажу, один из простейших, как выкрутится с ситуации. Давайте подумаем, выше мы выяснили что программа останавливается при достижении результата в 150 страниц (ссылок). Значит где то это ограничение вызывается, нужно найти только где ?
Поскольку, выше, мы выяснили что софт 32-битный, то отладчик мы будем использовать тоже 32-битный. Закидываем программу в отладчик DnSpy и переходим к точке входа (Правой кнопкой, мыши, по программе - перейти к точке входа).
Скажу так, что тут разработчик закрутил не по стандарту. То есть перейдя в точку входа как мы ранее делали, ничего особенного мы не получим. А заниматься бессмысленным поиском, незная что ищем - тоже ни к чему не приведет.
Как мы уже знаем и понимаем что при запуске программы, а это у нас демо-версия, срабатывает и ограничение в 150 ссылок. То есть, выходя из этого, мы можем поступить очень радикально (решение на пролом). Поискать в коде MainWindow, например значение "> 150".
Важно, обратите внимание: Почему именно "> 150" а не "150". Потому что выходя из логики если ссылок больше 150 то должно срабатывать ограничение (остановка работы программы). Ну давайте поищем и посмотрим был ли я прав или все же нет. Что и требовалось доказать, но не спешим принимать действия, почему ? - сейчас я все прокомментирую и подскажу.
Вот, мы нашли место где, у нас, срабатывает ограничение. И неопытный человек может подумать ну так: Теперь можно взять и 150 поставить на 150000 (гапример) и все вопрос решен. Можно то все, но это выход не совсем удобный так как программа все равно будет чувствовать себя демо-версией и изменять параметр в программе (в интерфейсе) все равно не можно будет.
Можно и вырезать кусок кода, исправив логику, тоже выход, НО: А если этот код встречается не в одном месте то придется делать правки и там. Тут уже все зависит от вашей фантазии и как Вам удобно сделать. Я же покажу как правильно сделать, с минимальными правками, так как проверка встречается не в одном месте (Сможете это проверить).
Правильный ход, что нужно сделать: Давайте еще раз посмотрим на код выше и включим логику.
bool isDemo = this.IsDemo, что в свою очередь имеет флаги (True и False). При этом эти флаги, в данном примере, отвечают за перевод программы в Демо или Лицензию, скажем так для простоты.
Так вот условие if (если) в котором включается это ограничение, срабатывает только в случае если bool IsDemo = true. А если bool IsDemo = false то никаких ограничений не будет.
Не верите ну давайте это проверим. А именно переходим в IsDemo и изменяем параметр True на False.
, как видите софт из демо режима - переместился в лицензионный а надпись демо пропала.Мало того: Неактивные настройки стали активными и теперь можно ставить параметры без ограничений. Как видите, про то что я говорил выше: Проверка встречается не в одном месте, мы правильно исправили логику, тем самым избавили себя от лишней работы. Одно точечное изменение, но есть одно НО (Опишу ниже что именно)!
Все манипуляции, с кодом , Видео: C_Parser.wmv (Имеется и в архиве, на всякий пожарный).
Ну и внеся все изменения, добавив нужные копирайты, я как обычно добавил свои и форума xss, софт работает на все 100%. Нет никаких всплывающих окон с демо, обновлений и прочих неудобств. Визуально, финальный вариант выглядит вот так, для теста я даже собрал 500 ссылок, что больше ограничения что было:
Я показал вам самый оптимальный вариант, так как код там километровый, можно было искать и по ключевым словам. Можно было использовать анализатор, можете сами попробовать. но просто так, не включая логику до функционала на добраться.
Эту программу? я показал как победить, приступаем к следующему пациенту. Это уже другого направления программа, но будет полезна для своей аудитории.
Следующая программа Pop Art Studio 10.2 (Официальный сайт: https://popartstudio.nl/Fotoview/order_ru.htm). Программа для работы с фотографиями с применениями
различных эффектов. Можете открыть фотографию любого формата и отредактировать, распечатывать и сохранять. Поддерживает форматы TIFF, PSD, BMP, JPG, GIF, PNG. Сохранение идет без потери качества.более подробную информацию можете почитать на официальном сайте, наше дело вылечить её.
ВНИМАНИЕ (Как бонус): Более того, сегодняшний способ взлома работает на все программы что есть на сайте разработчика. Я покажу как эту сломать, если вам нужно, также сможете сломать остальные. Разработчик не подсуетился и решил сделать один и тот же алгоритм защиты для всех своих программ.
Как видите интерфейс программы напичкан разным функционалом и присутствует Русский язык, что приятно.
Exeinfo PE (Анализатор исполняемых файлов), показала что: программа написана она на C#, это 32-битное приложение и дополнительной защиты не обнаружено. 4-пункт, на картинке, (рекомендации по отладчику) а мы будем использовать, как обычно, отладчик DnSpy).
Сначала ознакомимся с информацией, касающиеся ограничений, на официальном сайте - программы. Как и с предыдущей программой. Что бы иметь основу, от которой будем и отталкиваться.
На сайте программы, разработчик, нас уведомляет о том что после покупки программы, на картинку не будет добавляться водяной знак. Это вся информация, что доступна, уже хорошо. Теперь давайте посмотрим на принцип активации программы. При любых обстоятельствах, сначала, визуально нужно посмотреть, что мы и делаем.
Но перед тем как приступить, хотел отметить, что при запуске программа немного подгружается и не так быстро запускается. Это наводит на мысль, не проверяет ли она какие то данные при запуске - через интернет. Возможно ключ активации или что то в этом роде. Как и с предыдущей программой, под это дело, будем использовать HTTP Analyzer, что производит мониторинг https \ http трафика в режиме реального времени. В целом, не обязательно использовать именно этот анализатор их полно, главное понимать что вы делаете, это чисто для справки.
И теперь понятна причина почему программа долго подгружается, ну как долго, не мгновенно, скажем так
Тут, внимание, что еще хотел добавить: Бывают ситуации, когда, программа проверяет ключ в сети, только тогда когда он по формату верный. Так что это еще ни о чем не говорит. Я имею в виду что: при вводе выдуманного ключа не было запроса в сеть, это так для справки, в будущем подобная информация будет полезна.
И тут же, мы сразу же, перемещаемся на главную форму программы, то есть FormMain. Как можно заметить, список функция тут очень огромный, можно и запутаться. Но мы же помним ?, что если: при запуске программы, у нас, загрузилась форма активации то значит и при запуске проверяется ключ активации. В нашем случае это Имя и Код, вот как раз в этом направлении и поищем, в начеле функции, куда мы перешли. Это очень полезная информация, на такие вещи всегда нужно обращать внимания и использовать. Нежели бегать по коду и скать не зная что
.Я это говорю не с пафосом, что бы кого то обидеть а подсказываю как правильно действовать в той или иной ситуации. Так что продолжим анализ и сразу видим результат.
Переходим и наблюдаем картину, которую сейчас прокомментирую, главное тут не спешить.
А у нас тут ситуация такая:
- Функция GetRegCode вызывается с динамической библиотеки FotoviewLibrary.dll что расположена возле исполняемого файла программы Andy.exe
- Это у нас типы лицензии, что активируются, в зависимости от регистрационных данных. Можно сказать типа лицензии, так будет понятней.
- По стандарту, у нас статус у лицензии .NONE, то есть нет, то есть не активирована. Ну и если активирована то в staticVariables.regName записывается регистрационное имя.
А ниже, в этой же функции, идет код проверки регистрационных данных. И там решается судьба активации.
. Ну и вот после изменений мы имеем:1. Статус лицензии Batch Edition. Самой максимальной, дорогой я бы сказал.
2. Красиво отображается на кого зарегистрирована.
3. На картинке, для теста, моего профиля с форума, нет никаких водяных знаков.
Можете сами в этом убедится.
Ну и как обычно, прилагаю видео, в статье я вам все расписал. На видео показал сам патчинг dll (тут все предельно понятно).
Все манипуляции, с кодом , Видео: PA-Studio.wmv (Имеется и в архиве, на всякий пожарный).
Результата мы добились, на все 100%, кстати (не забываем про бонус) все остальные программы, этого же разработчика, ломаются таким же способом. Точно же таким, никаких отличий, если есть сомнения проверьте и убедитесь сами. И не забываем, чисто для справки, пропатчили мы только динамическую библиотеку FotoviewLibrary.dll, в которой хранился - секрет активации
С этой программой, поступим, как и с остальными: проверим на наличие дополнительной защиты: протектор, пакер, обфускатор кода. Ну и не смотря на рекомендации (4-пункт на картинке): мы будем использовать, как обычно, отладчик DnSpy).Наш анализатор (Exeinfo PE) - показывает что программа написана на C#, это 32-битное приложение и присутствует дополнительная защита в виде .NET Reactor 6.x - 6.9.
NET Reactor снимается, в большинстве случаев, специальнимы инструментами (утилитами), в сети их полно. Под эту программу я прикреплю, один из инструментов, также. Бывают, конечно, исключения, где нужно поработать руками если встречается NET Reactor, но к этому мы еще вернемся в следующих статьях.
В нашем же случае, мы применим утилиту de4dot, перетащив исполняемый файл DMS-Shuttle.exe на de4dot.exe и в результате получим очищенный от зла
Ну а теперь запустим программу, посмотрим на принцип активации и сделаем выводы, составив план действий. При запуске программы, сначала запускается окно активации (А программа нет). Заметно что вычисляется id системы (windows), после чего, нам предлагаю ввести ключ активации (или запустить триал). Тут есть один нюанс, что кнопка регистрации становится активна, если длина ключа = 25 символам. Ну и естественно введенный мною, выдуманный ключ, неверный.
И так, перед тем как начнем анализ, я скажу следующее: Я покажу несколько способов взлома этого софта:
- Вариант 1 - Не такой красивый, так как не будут отображаться регистрационные данные.
- Вариант 2 - Способ где мы заставим программу сгенерировать регистрационный ключ, при запуске, и активироваться.
А какой из вариантов выбрать, будете решать вы, мое дело показать.
ВНИМАНИЕ: И у разработчика есть еще программы. Так вот, они взламываются точно же таким способом. И этот разработчик поленился и сделал аналогичную защиту во второй своей программе. Это я говорю для справки, если будет желание то можете попробовать и убедиться.
А мы переходим к Вариант 1.
Так как мы уже знаем, что форма активации, загружается при запуске программы, то давайте поищем её вызов под отладчиком. Поскольку мы выяснили что софт у нас 32-битный то и отладчик будем использовать 32-битный.
Закидываем программу в DnSpy x32 и переходим к точке входа (Правой кнопкой, мыши, по программе - перейти к точке входа).
А в конце, в зависимости от флага, функция принимает решение true или false. Так, в чем вопрос ?
, давайте ей поможем, принудительно, принять правильное решение.
А именно, весь код (функции) чистим и оставляем только return true. Таким образом, как бы там не сложилась ситуация, программа запустится без сомнений - Активированной.Но, при таком варианте, окно с информацией о лицензии не отобразится, как будто его и не было. А программа запустится без всяких окон о напоминании что она не зарегистрирована. То есть после изменения, функция должна выглядеть так:
Если поискать что то связанное или намекающее на лицензию, активацию то мы находим функцию CheckRegister что в свою очередь проверяет данные регистрации.
В начале, заметно что длина строки (ключа) должна быть 25 символов. Помните, я про это говорил в начале ?, когда мы проводили анализ софта. Так вот, эта функция также работает и принимает решение false или true в зависимости от ситуации.
Все манипуляции, с кодом , Видео: DMS-SHUT.wmv (Имеется и в архиве, на всякий пожарный).
В финале, вывод какой: При использовании варианта 1 или 2 программа будет запускаться на любом пк, никакой зависимости от железа компьютера, уже, не будет.
Можете сами поэкспериментировать, я специально показываю разные варианты подхода. Выбор за вами, а мы идем далее и приступаем к анализу следующего пациента.
Полное описание возможностей можно посмотреть на официальном сайте. А мы приступаем к делу.
И в начале, проверим программу на наличие дополнительной защиты: протектор, пакер, обфускатор кода. Ну и не смотря на рекомендации (4-пункт на картинке): мы будем использовать, как обычно, отладчик DnSpy).Наш анализатор (Exeinfo PE) - показывает что программа написана на C#, это 32-битное приложение и дополнительной защиты нет.
Если посмотреть, на официальном сайте, про ограничения бесплатной версии то она ищет только 50 файлов одновременно. Теперь давайте запустим программу и посмотрим как она активируется. И что бы не терять время, проверим активацию, при запущенном анализаторе трафика - HTTP Analyzer. Что бы узнать проверяется ли ключ на стороне сервера (Сайта программы).
Поскольку, мы выяснили, что ключ проверяется на стороне сайта программы то делаем вывод что: Нужно найти место проверки и посмотреть по какому принципу она происходит, после чего выходить из ситуации.
Давайте перейдем в точку входа (Правой кнопкой, мыши, по программе - перейти к точке входа) и поищем, что-нибудь, что напоминает нам о лицензии или активации.
- Это у нас точка входа.
- В обозреватели сборок, ну прям в глаза бросается класс ClassFastSecurity. Ну его просто не заметить невозможно
.
И тут у нас список функций, что взаимодействуют между собой. Теперь нужно выбрать правильное решение. Как заметно, что функция ActivateLicenseKey делает запрос на сайт разработчика, проверяет ключ и в зависимости от его типа - присваивает тип лицензии. На 3, 20, 150, пользователей.
Тут сейчас поясню, разработчик, зашил просто в программу , в функцию CheckControlKey, список своих клиентов (Id, ключей, в зашифрованном виде). Список в этой версии настолько громадный при декомпиляции этой функции, отладчик просто, у меня, висел не одну минуту
Получается, что при запросе в сеть, они проверяются и в программе. Если такой (клиент) есть то значение num (в функции ValidateLicenseKey) равно 1.
А если нет то num = 0. А функция принимает решение, в зависимости от флага num. То есть, я имею в виду, что в конце функции, return num. Это тоже самое что (Разрешить или Запретить или Активировать или True).
Так вот, что бы программа всегда чувствовала себя зарегистрированной нужно:
1. Убрать весь этот код, эту кашу, с функции ValidateLicenseKey.
2. И прописать только return 1, то есть дать добро на регистрацию программе (без всяких вопросов).
В итоге сохраняем изменения, запускаем программу и радуемся зарегистрированной версии. Программа будет работать на любом компьютере, без зависимостей от ключей, сайта.
Для укрепления знаний, под эту программу видео, с демонстрацией изменений.
Все манипуляции, с кодом , Видео: S-Fast.wmv (Имеется и в архиве, на всякий пожарный).
И эту программу мы победили, надеюсь доступно поясняю, как всегда. Ну что подведем итоги (ВАЖНО):
- Я специально, разжевываю, все до мелочей, там где это нужно было. Так как у некоторых людей возникают вопросы (Значит есть и те кто много еще чего не освоил).
- Напомню еще раз
, я ранее говорил и свое слово сдержу, еще пару (2) статей по C# и я начну статьи по Асму, взлому программ написанных на Delphi, C++ и не только. Написал это в статье за того что некоторые, упорные люди , задают одни и те же вопросы. У меня обид нет, имейте терпение, ваше мнение тоже УВАЖАЮ!


Всем хорошего настроения, на сегодня у меня все.
В архиве, находятся:
В архиве, находятся:
Инсталляторы Virustotal:
- ComparseR \ Virustotal: https://www.virustotal.com/gui/file/49db549b4653469e2958628feb2fdc63eb5e4ae6987b0c35d6f2039fadab2a82
- Pop Art Studio \ Virustotal: https://www.virustotal.com/gui/file/8a08557ae833b3261690032d1d954ec5d3e198706b8b0161f273ebb0ae10ffe1
- DMS-Shuttle \ Virustotal: https://www.virustotal.com/gui/file/8f01c2708a0c4c1cd365419156771485d15ed4b90cdbdb20ea134dff587c2b41
- SeekFast \ Virustotal: https://www.virustotal.com/gui/file/ecd481b5361b6c08d83f09a42cbacba8d45661150825dbc8d403c85ac3488b3d
Инструменты для анализа:
- 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
- de4dot(x32).exe / virustotal: https://www.virustotal.com/gui/file/1ef4d880b16efb49271463e1b9c0de68e637320c1be40f1e7f1603538f3e289d
- de4dot(x64).exe / virustotal: https://www.virustotal.com/gui/file/89582c764c5cdeb58656a60f8419fdcd8c5eb6caa2e5f332d2658e89555693cb
Файлы к статье:
Скрытый контент для зарегистрированных пользователей.