Приховування додатків, створених за допомогою Dotfuscator (версія Visaul Studio 2022)
зведення
Додатки на основі серії фреймворків .NET створюються на так званому спільному проміжному мовою, тому їх можна прочитати в формі, близькій до вихідного коду, за допомогою засобів розбирання тощо. У цьому розділі описано, як обфускувати назви класів і методів у легко нечитабельні формати за допомогою безкоштовної версії Dotfuscator, інструменту obfuscator, який постачається з Visual Studio.
Він описаний за допомогою Visual Studio 2022, але може використовуватися і в інших версіях Dotfuscator.
Операційне середовище
- Візуальна студія
-
- Візуальна студія 2022
Про Дотфускатор
Dotfuscator - це інструмент заплутування, який ускладнює читання вихідного коду при розбиранні для додатків, написаних з сімейством фреймворків .NET (далі - .NET). Dotfuscator поставляється з Visual Studio безкоштовно і за окрему плату.
Безкоштовна версія недоступна, якщо багато її функцій не обмежені або не запущено Visual Studio, але будь-хто може використовувати її, якщо на ній інстальовано Visual Studio. Платна версія має безліч потужних функцій заплутування, які не зустрічаються в безкоштовній версії, але вона пропонується за ціною, яку важко собі дозволити широкій публіці.
Dotfuscator має різні функції, ціни та видання залежно від версії, тому, будь ласка, зверніться до наступної домашньої сторінки для отримання детальної інформації.
Про розбирання
Раніше я вже згадував, що додатки, написані в .NET, можуть легко розібрати і прочитати оригінальний вихідний код, але насправді відбувається те, що якщо розібрати .exe файл (або .dll файл), як показано на наступному малюнку, ви зможете майже відтворити оригінальний вихідний код, такий як простір імен, ім'я класу, ім'я методу і т.д.
Види програм, які слід затуманити
В основному це стосується програм, які поширюються і запускаються серед невстановлених користувачів. Наприклад, десктопні додатки. І навпаки, веб-додатки, які мають труднощі з доступом безпосередньо до файлів програми, менш важливі для заплутування.
Цього разу ми розглядаємо проект у WPF, десктопному додатку.
Установка Дотфускатора
Ця програма поставляється з Visual Studio 2022, але не входить до стандартної інсталяції (у деяких попередніх Visual Studios її можна було встановити з нуля).
Щоб додати дофускатор: Запустіть студію Visaul і виберіть Отримати інструменти та функції з інструментів.
Виберіть "Окремі компоненти" з вкладки вище, в групі "Інструменти коду" відзначте пункт "Попередній захист - Дофускатор", і натисніть кнопку Install в правому нижньому кутку. Під час цього закрийте консоль Visual Studio.
Процедура обфускації
Описує кроки, щоб зробити ці імена заплутаними та заплутаними.
Створіть програму у Visual Studio, створіть файл .exe, а потім клацніть піктограму . Створіть файл dll. Поки що це те ж саме, що і створення звичайного додатка. Програма, яку ви створюєте, має бути призначена для тих, що створені в збірці "Випуск". (Тому що ви зазвичай не публікуєте в Debug.)
Після створення .exe або .dll виберіть «Інструменти» в меню Visual Studio, а потім виберіть «Попередній захист » - «Спільнота дофускаторів».
Екран реєстрації відображається, але він не обов'язковий, тому, якщо він непотрібний, натисніть кнопку скасування в тому вигляді, в якому він є.
Залишитися і натиснути кнопку ОК.
Запускається дофускатор. Додаток працює самостійно, тому можна затуманити файли, які не мають відношення до відкритого в даний момент проекту. (У випадку з безкоштовною версією самого додатка передбачається запуск Visual Studio.) )
У цій статті я приховую проект програми .NET 6.0 WPF, побудований за замовчуванням як зразок.
Виберіть "Введення" зі списку зліва і натисніть кнопку "+".
Виберіть файл програми, який потрібно заплутати. Додатки, написані в .NET Framework, часто затуманювали .exe, але в .NET і .NET Core програми часто є .dll сутностями. Програми NET WPF також матимуть .dll сутностей, тому вибирайте .dll.
Він буде доданий до списку. Якщо він складається з декількох бібліотек DLL, додайте більше одного.
Після додавання цільового файлу натисніть кнопку "Побудувати" на панелі інструментів.
Вас запитають, де зберегти заплутаний файл проекту, тому вкажіть його. Розташування може бути довільним, але воно також може бути вихідним місцем заплутаної програми. Він збереже ваш вхід і відкриє цей файл проекту заплутування, якщо ви хочете знову його затуманити. Розширення - ". xml".
Якщо збірка почалася і в повідомленні нижче відображається «Збірка завершена», це свідчить про успішне завершення. На екрані відображається журнал збірки та список заплутаних класів і змінних.
Виберіть "Результат" зі списку зліва, щоб побачити подробиці того, як змінилися назви класів і методів.
Назви класів і назви методів на дереві праворуч, такі як "->", - це назви після обфускації. Змінивши назву класу або назву методу на таке безглузде ім'я, можна ускладнити читання вміст вихідного коду, навіть якщо він розібраний.
Приховані програми зберігаються в папці під назвою "Dotfuscated" в тому місці, де ви зберегли файл проекту.
Map.xml є файлом результатів обфускації, тому його можна сміливо видаляти.
Оскільки .NET 6.0 WPF не може бути запущений тільки DLL, скопіюйте "XXXX.exe" і "XXXX.runtimeconfig.json", згенеровані в момент виведення збірки в ту ж папку, і запустіть її. Якщо ви можете почати нормально, поки що проблем немає. Якщо ви не можете запустити його, можливо, у вас відсутні файли або ви створюєте програму, яка стає непослідовною через заплутаність.
Якщо ви проаналізуєте програму, яка насправді була затуманена, то побачите деякі сліди затуманення. Перший лист малюнка нижче - до обфускації, а другий - після обфускації.
Зверніть увагу, що імена класів, визначені в бібліотеках .NET, не підлягають перейменуванню, оскільки вони існують як фреймворк.
Цього разу я затуманив проект за замовчуванням, створений таким, яким він є, тому думаю, що є образ, який майже не затуманений, але я думаю, що ефект затуманення стає зрозумілим, тому що чим більший проект, тим більше унікальних класів збільшиться.
Крім того, хоча цього разу ми включили процедуру в безкоштовну версію, платна версія допускає більш складну заплутаність, а також запобігає самому розбиранню. Однак обфускація має різні несприятливі наслідки і потенціал, тому при виконанні обфускації необхідно зробити її, обмірковуючи, чи буде вона працювати належним чином з початку проектування.
Виключити обфускацію
Якщо у вас є назви класів або властивостей, які ви не хочете приховувати, ви можете виключити їх.
Під час завантаження збірки виберіть команду Перейменувати > Виключити з лівого боку екрана. Так як вміст збірки відображається, то перевірю ті, які не хочу затуманювати.
Можна виключити обфускацію на зернистому рівні, але я думаю, що легше налаштувати її на основі простору імен.
Режим бібліотеки
При виборі вхідної збірки можна побачити, що встановлено позначку "Режим бібліотеки".
"Бібліотечний режим" полягає в прикріпленні до бібліотек DLL, які можуть викликатися іншими програмами. При перевірці з обфускації виключаються публічні класи і властивості, звані іншими програмами.
Однак, в цілому, рідко можна викривати бібліотеку, яка називається генеративно з інших програм, і я думаю, що вона часто затуманюється до додатків, які працюють поодинці, тому нормально в основному видалити цю перевірку.
Обфускація однофайлових .exe (непідтверджена)
Розслідування цього пункту у Visual Studio 2022 наразі не підтверджені.
Ймовірно, це буде затуманення з MSBuild, але я ставлю його на паузу через відсутність інформації на даний момент.