Как работают Delphi, WPF .NET Framework и Electron по сравнению друг с другом и как лучше всего провести объективное сравнение? Embarcadero заказал технический документ для исследования различий между Delphi, WPF .NET Framework и Electron для создания настольных приложений Windows. Тестовое приложение — клон калькулятора Windows 10 — было воссоздано в каждой структуре тремя волонтерами Delphi Most Valuable Professionals (MVP), одним экспертом-фрилансером WPF-разработчиком и одним экспертом-фрилансером Electron. В этом сообщении блога мы собираемся изучить метрику IP-безопасности, которая является частью сравнения функциональности, используемого в техническом документе.
Table of Contents
Что такое IP-безопасность в развертываемом приложении?
Насколько защищена интеллектуальная собственность исходного кода в развертываемом проекте? После того, как компании вкладывают ресурсы в свои проекты, они сталкиваются с проблемой: передать свой продукт в руки общественности, одновременно защищая код и методы, приносящие доход. Этот качественный показатель оценивает возможность доступа пользователя к исходному коду посредством декомпиляции.
Защита интеллектуальной собственности принципиально важна для долгосрочных бизнес-планов. Если продукт решает новую проблему или использует новую технику, разработчики должны понимать, как их выбор фреймворка влияет на уязвимость IP. Программы Delphi компилируются в машинный код платформы, а не в промежуточный код. Декомпиляция с использованием бесплатных инструментов может восстановить форму графического интерфейса пользователя, но дает только ассемблерный код для логики. IP-безопасность в WPF более хрупкая. Декомпиляция исполняемых файлов и файлов библиотеки с помощью бесплатных инструментов приводит к узнаваемой бизнес-логике C # и почти узнаваемому тексту XAML. Наконец, у Electron есть самая серьезная проблема — он по умолчанию выдает исходный код при каждой установке.Код приложения Electron можно восстановить с помощью простого текстового редактора — в зависимости от структуры фреймворка — но его можно несколько запутать с помощью сторонних инструментов. Доступные инструменты декомпиляции и их результаты при применении к калькулятору каждого фреймворка перечислены ниже.
Целью этого упражнения по декомпиляции было определение возможности получения как пользовательского интерфейса, так и исходного кода из калькулятора каждого фреймворка с помощью инструментов с открытым исходным кодом или бесплатных инструментов. Оценивались фреймворки Delphi VCL, Delphi FMX, WPF (C #) и Electron (с Angular).
Когда калькуляторы Delphi VCL и FMX были декомпилированы, все элементы пользовательского интерфейса были успешно извлечены, и логический код был представлен в виде сборки. В этом упражнении не были извлечены функции и структура процедуры, но это возможно.
Декомпиляция калькулятора WPF привела к появлению элементов пользовательского интерфейса и в основном узнаваемого кода C #. Приложения WPF .NET Framework используют известный формат MSIL (Microsoft Intermediate Language), который легко дизассемблировать и декомпилировать. Зависимые сборки можно легко извлечь. Ресурсы легко добываются. .NET Reflection может использоваться для извлечения информации о сборке .NET. Все содержимое может быть извлечено из сборки, включая классы, методы, код и ресурсы. Продвинутый декомпилятор может восстановить почти точную структуру вашего кода, включая циклы for / while, операторы if и блоки try catch. Буквальные строки могут быть легко извлечены. Наконец, можно извлечь вызовы методов и свойств внешних сборок.
Элементы пользовательского интерфейса и код JavaScript калькулятора Electron легко доступны с помощью стандартного текстового редактора. Код Typescript был перенесен в JavaScript и не мог быть восстановлен. В целом упаковка Electron обеспечивала очень ограниченный уровень запутывания.
Давайте посмотрим на каждый фреймворк.
Можно ли декомпилировать приложения Delphi?
Delphi компилируется в собственный машинный код, устраняя большую часть структуры исходного кода и метаданных, необходимых для точной декомпиляции и интерпретации. Декомпиляция с использованием такого инструмента, как DeDe, предоставит полную информацию о пользовательском интерфейсе, но только код сборки для логики / серверной части.
Инструменты декомпиляции
- DeDe — один из самых популярных декомпиляторов Delphi.
- Interactive Delphi Reconstructor — декомпилятор для исполняемых файлов Delphi и динамических библиотек.
- MiTeC DFM Editor — автономный редактор файлов Delphi Form (* .dfm) как в двоичном, так и в текстовом формате.
Можно ли декомпилировать приложения WPF .NET Framework?
WPF, скомпилированный в классическое приложение Windows, преобразуется в файлы .dll и .baml. Декомпиляция обратно в узнаваемый C # и почти идеальный XAML возможна с помощью сторонних инструментов. Microsoft включает версию сообщества Dotfuscator с Visual Studio, но ее лицензия предназначена только для личного использования. Стоимость профессиональных решений для обфускации .NET варьируется от сотен до тысяч долларов. Есть также дополнительные шаги для защиты приложения с помощью инструмента запутывания.
Инструменты декомпиляции
- WPF StylesExplorer — декомпилятор WPF .baml и инструмент для изучения ресурсов .baml.
- Snoop WPF — инструмент для отслеживания / просмотра визуального дерева работающего приложения WPF без использования отладчика.
- JetBrains dotPeek — декомпилятор .NET и обозреватель сборки.
Можно ли декомпилировать приложения Electron?
Исходный код Electron упаковывается и развертывается в системе конечного пользователя. Если разработчик не использует сторонние инструменты для обфускации кода, исходный код можно прочитать дословно с помощью простого текстового редактора или распаковав с помощью такого инструмента, как asar.
Инструменты декомпиляции
- TextPad — текстовый редактор общего назначения для текстовых файлов.
- asar — простой инструмент для упаковки и распаковки несжатых файлов формата архива.