Сейчас на форуме: asfa (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Программа, запакованная .Net Reflector и создание бесконечного триала |
Посл.ответ | Сообщение |
|
Создано: 15 апреля 2010 11:38 · Личное сообщение · #1 Добрый день, уважаемые участники форума. Возникла необходимость продлить жизнь одной программе, написанной на .Net. Ввиду того, что я подписывал документы о нераспространении программы, я не могу афишировать данный продукт. Описание программы: Софт представляет из себя 1) Набор длл-ок, которые составляют так называемый фреймворк программы. 2) Ряд вспомогательных exe-шников, которые используют данный фреймворк. 3) Плагин к вижуал студии, с помощью которого ведется разработка собственных продуктов. Плагин так же использует вышеупомянутый фреймворк. Часть библиотек из фреймворка (и защищеннные и незащищенные) регистрируется в GAC'е. Регистрация программы происходит следующим: с помощью консольного приложения генерируется специальный ключ, привязанный к процессору и сетевой карте. Данный ключ отправляется разработчику и после оплаты приходит файл с лицензией. Защита: По показаниям ProtectionId на ряде сборок стоит .Net Reactor, причем версия Реактора варьируется от 3.х до 4.х. Программа триальна на 30 дней, после чего при запуске exe-шников вспомогательных проги запускаются, но практически сразу вылетает наг-скрин с уведомлением о том, что лицензия закончилась. Вижуал студия при запуске плагина так же уведомляет о том, что триальный период закончен. Задача: Ввиду того, что я лишь новичек в данном вопросе требуется лишь сделать бесконечным триал (благо программа полностью функциональна). Проделанная работа: Узнав, что сборки защищены Реактором и увидев в Рефлекторе, что у сборок удалены NT header'ы, я решил по мануалам попробовать распаковать программу и понять, как она устроена, чтоб была возможность отломить участки кода, которые отвечают за проверку ключа. Для простоты я взял консольное приложение, которое генерирует Id-шник с ключем, который нужно отправить разработчикам чтоб потренироваться. Распаковать программу удалось 2-мя способами - через автоанпакер NETUnpack (на выходе получилось 4 сборки - 2 консольных екзешника и 2 dll-ки) и через дамп памяти (использовалась Olly). Оба варианта запустились, но они генерировали отличные от оригинала ID-шники. Внутри распакованных сборок оказалось куча обфусцированных классов. И рефлектор генерил ошибку при попытке дизассемблировать большинство методов в классах ("Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна" или "SmartExceptionsCore.UnhandledException @ 4295, offset: 0"). Где-то читал, что решением является удаление определенных опкодов через Reflexil, но каких именно - для меня вопрос. Поняв, что с распаковкой мне вряд ли удасться разобраться нормально, я решил поковырять основную сборку, которая не защищена. Нашел в ней раздел Lisence. Решил посмотреть, что там внутри. Нашлись самые интересные методы: public void CheckMaxValueSetting public void CheckProduct public DateTime GetExpirationForProduct public bool IsCommandAuthorized private void RunCheckLicense также свойство private IUsageHandler LicenseManager, к методом которого обращались в вышеуказаных методах. Казалось - все, вопрос исчерпан: переопределяем через Reflexil методы (я предполагал вставить свой код, предварительно сделанный в студии) и сохранить библиотеку. Но, такой вариант не подошел. Во-первых, Reflexil заругался при сохранении сборки и сказал, что не может найти Референс (который как-раз защищен Реактором), а во-вторых, данноая библиотека подписана и лежит в GAC-е, поэтому при изменении нужно будет много колдовать с другими сборками, ссылающимися на данную, в частности защищенными, у которых нужно будет удалять ссылку на publickeytoken. Еслиб они все были незапакованы, я бы неполенился, снял бы везде. Поняв, что с изменением кода я скорей всего не совладаю без помощи, я решил попробовать найти где Реактор сохраняет информацию о триале. Делал так: загружал студию, подключался к процессору через Deblector в рефлекторе и пытался смотреть куда идет обращение при запросе на оставшееся время триала. Но самые интересные моменты Deblector как-раз таки не показал, сославшись на то что данные методы скрыты в определенных целях. Попробовал через ProcessMonitor посмотреть, но там для меня вообще полный лес. Прошу помощи у форума, подскажите, как узнать, где храниться информация об оставшемся кол-ве времени у триала. Может уже кто-то делал подобные вещи для Reactor'а и подскажет, как данную проблему лучше решить. Ну а если реально с моими познаниями программиста-любителя на C# сделать кряк или генератор лицензий - то будет вообще замечательно. ![]() |
|
Создано: 16 апреля 2010 23:28 · Личное сообщение · #2 iggvwh пишет: Ввиду того, что я подписывал документы о нераспространении программы ![]() Прогу выкладывай. Почитай статейки умные(google в помощь) и пробуй способы что там описаны, ну а так стандартно цепляйся за функции showwindow,msgbox,getdate(названия уточни у msdn). iggvwh пишет: как узнать, где храниться информация об оставшемся кол-ве времени у триала. можно и в коде посмотреть и через мониторинг. ![]() |
|
Создано: 19 апреля 2010 16:16 · Личное сообщение · #3 NikolayD пишет: Прогу выкладывай Если б программа была доступна для скачивания в триале - невопрос, выложил бы. NikolayD пишет: Почитай статейки умные(google в помощь) и пробуй способы что там описаны С некоторыми уже ознакомился. Из tuts4you.com/download.php?list.48 в частности. Но к сожалению дальше выполненных примеров процесс не сдвинулся с места. Я правильно понимаю, что без осознанной работы с отладчиком (я пока с Olly пытаюсь разобраться) процесс не пойдет? Если да, то правильным ли будет выбор начать с "Введение в крэкинг с нуля, используя OllyDbg" Ricardo Narvaja? ![]() |
|
Создано: 19 апреля 2010 19:36 · Личное сообщение · #4 iggvwh без проги толкового ты ничего здесь не услышишь. iggvwh пишет: Я правильно понимаю, что без осознанной работы с отладчиком (я пока с Olly пытаюсь разобраться) процесс не пойдет? Если да, то правильным ли будет выбор начать с "Введение в крэкинг с нуля, используя OllyDbg" Ricardo Narvaja? Да правильно если решил делать сам. Есть ещё видео Удачи! ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Программа, запакованная .Net Reflector и создание бесконечного триала |