Сейчас на форуме: asfa (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Программа, запакованная .Net Reflector и создание бесконечного триала
Посл.ответ Сообщение

Ранг: 9.6 (гость), 5thx
Активность: 0.010
Статус: Участник

Создано: 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# сделать кряк или генератор лицензий - то будет вообще замечательно.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 16 апреля 2010 23:28
· Личное сообщение · #2

iggvwh пишет:
Ввиду того, что я подписывал документы о нераспространении программы

)))))))
Прогу выкладывай. Почитай статейки умные(google в помощь) и пробуй способы что там описаны, ну а так стандартно цепляйся за функции showwindow,msgbox,getdate(названия уточни у msdn).

iggvwh пишет:
как узнать, где храниться информация об оставшемся кол-ве времени у триала.

можно и в коде посмотреть и через мониторинг.



Ранг: 9.6 (гость), 5thx
Активность: 0.010
Статус: Участник

Создано: 19 апреля 2010 16:16
· Личное сообщение · #3

NikolayD пишет:
Прогу выкладывай

Если б программа была доступна для скачивания в триале - невопрос, выложил бы.
NikolayD пишет:
Почитай статейки умные(google в помощь) и пробуй способы что там описаны

С некоторыми уже ознакомился. Из tuts4you.com/download.php?list.48 в частности. Но к сожалению дальше выполненных примеров процесс не сдвинулся с места.
Я правильно понимаю, что без осознанной работы с отладчиком (я пока с Olly пытаюсь разобраться) процесс не пойдет? Если да, то правильным ли будет выбор начать с "Введение в крэкинг с нуля, используя OllyDbg" Ricardo Narvaja?



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 19:36
· Личное сообщение · #4

iggvwh без проги толкового ты ничего здесь не услышишь.

iggvwh пишет:
Я правильно понимаю, что без осознанной работы с отладчиком (я пока с Olly пытаюсь разобраться) процесс не пойдет? Если да, то правильным ли будет выбор начать с "Введение в крэкинг с нуля, используя OllyDbg" Ricardo Narvaja?

Да правильно если решил делать сам. Есть ещё видео --> lena151 <--.

Удачи!


 eXeL@B —› Вопросы новичков —› Программа, запакованная .Net Reflector и создание бесконечного триала
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати