Всім алоха!Warning! Якщо ваші релігійні чи ще_якісь_там погляди не дозволяють користуватись такою чудовою тулзою як Reflector, прохання далі не читати! Так як в основі даного поста буде лежати саме його використання.Думаю, цей пост буде цікавий насамперед новачкам у .NET, тому прохання до "фулів" і "суперіорів" не писати коменти в стилі "ми таке в дитсадку робили".Частина перша: передісторіяНедавно я вирішив додати до однієї з власних програмок трохи гламуру (під "власною" я розумію тулзу, яку використовую виключно я і тільки я). Конкретніше, мені знадобився красивий ListView

Гугл видав декілька результатів, але мій вибір впав саме на
цей контрол.
І хоча виробник не давав ліцензії "for non-commercial use", я все-одно вирішив викачати бібліотеку і протестувати її тріальну версію

Скачав... проінсталював... переніс контрол на форму... тут мені запропонували або купити контрол, або задовільнитись 30-денним тріальним періодом, я вибрав тріал (у нашому колгоспі поки не дають грошей на такі гламурні штуки

)... додав декілька колонок у ListView... натиснув F5... і тут мені повідомляють:
Не знаю як хто, але я розраховував на трохи більший тріал-період
Повторний запуск не дав жодних позитивних результатів

Випивши чаю і обдумавши ситуацію, я вирішив що просто так не здамся і все-таки подивлюсь як виглядає скачаний ListView в дії (звичайно ж крякнувши його перед цим

)! Єдине що лякало в цій ситуації - це захист бібліотеки.
Я більш ніж упевнений, що люди, які зробили скачаний мною контрол - професіонали своєї справи. І як професіонали вони вирішили скористатись послугами таких же професіоналів з захисту програмних продуктів.
Часи коректування ключів реєстру з назвами IsRegistered давно минули, тому мені мало б світити повне фіаско у справі "крякання"... але, як кажуть, "проба грошей не коштує"

Отож, що ми маємо на цей момент?
1) GUI-бібліотека, яка відмовляється працювати гарантовані 30 днів - 1шт.
2) Велике бажання спробувати цю бібліотеку в дії - 1 ВЕЛИКА шт.
3) Автор цього поста, юзверь який прочитав статтю "
Reflector for dummies"

- 1 шт.
А що нам необхідно?
1) Все вище перелічене (хоча, третій пункт прийдеться замінити

)
2)
Reflector і
один чудовий Add-in до ньогоЗовсім випадково весь необхідний набір виявився у мене на вінчестері

Тому я переходжу до наступної частини!
Частина друга: темні справиВідкриваємо папку, куди був встановлений наш GUI-компонент і дивимось які там є бібліотеки. У моєму випадку їх 3:
1) LidorSystems.IntegralUI.DLL
2) LidorSystems.IntegralUI.Lists.DLL
3) LidorSystems.IntegralUI.Lists.ListView.dll
Судячи з назв, декомпілювати їх прийдеться у перерахованому вище порядку...
Відкриваємо Reflector, додаємо потрібні нам ліби і зберігаємо їхні "сорси" на хард-диск

Як зберегти сорси показано на малюнку нижче (
не забудьте встановити скачаний Add-in!):

В результаті маємо отримати 3 незалежні проекти.
Наступний крок: створюємо WinForms-проект (для тестування нашого контрола) і додаємо до нього проекти декомпільованих бібліотек.
Після цього потрібно не забути поправити референси в кожному з декомпільованих проектів один на одного, так як на даний момент всі референси вказують на бінарники, а нам потрібно щоб вони були "проектними" (project reference).Тепер пробуємо скомпілювати весь наш солюшн...
З першого разу може і не вдатись, так як можуть бути незначні помилки в коді, які потрібно буде виправити. Після вдалого компілювання не поспішайте додавати контрол на форму і пити пиво! Памятаєте заради чого я почав писати цей пост? Правильно! заради обходу механізму тріал-періоду

Тому спробуємо додати ListView програмно (
хоча достатньо буде просто створити екземпляр його класу):
private void button1_Click(object sender, EventArgs e)
{
ListView testControl = new ListView();
Controls.Add(testControl);
}Запускаємо WinForms-проект і натискаємо на button1... На моніторі має зявитись вікно аналогічне першому малюнку. Ввічливо відмовляємось від купівлі компоненти і отримуємо exception в методі Init() класу LidorSystems.IntegralUI.Lists.ListView. Код, що викликав exception виглядає так:
if (!base.DesignOnly && !this.Intialize(this))
{
throw new Exception("Your evaluation has expired");
}Думаю, логічно буде закоментувати цю частину коду

Після цього компонент можна вільно тестувати!
А щоб все було взагалі ідеально, видаліть атрибут LicenseProvider(typeof(EncryptedLicenseProvider)) класу ListView.Заключна частинаЯк висновок можу сказати одне, платити гроші за всякі "хитрі" LicenseProvider-и для компонентів не має змісту. Всі вони легко обходяться і не становлять якусь надзвичайну міру захисту :( В найгіршому випадку, прийдеться витратити на пів години більше часу на видалення перевірки ліцензії
Памятайте, що використання "крякнутих" пограмних продуктів категорично заборонене! За таке можна "отримати по вухах" :)