Декомпилятор — если не хватает документации (IlSpy)

Декомпилятор — умеет из скомпилированного кода понятного машине, получать код понятный разработчику (близкий к исходному).

IlSpy — декомпилятор помогающий разработчикам понять устройство системы, найти ошибку и правильно доработать.

Почему IlSpy?

  1. Не требует установки
  2. Бесплатный и с открытым исходным кодом (open-source)

IlSpy скачать можно со страницы GitHub — скачивайте последнюю стабильную версию.

Да есть и платные аналоги например dotPeek (от JetBrains) — удобно встраивается в среду разработки и богат на дополнительный функционал (например можно отладить декомпилированный код)

Когда использовать декомпилятор?

Если:

  • Не хватает документации приложения
  • Собираетесь использовать не описанную в документации фичу
  • Планируете повторить или улучшить функционал приложения
  • Найти ошибку в коде ядра приложения
  • Ответа вендора (производителя приложения) ждать слишком долго или не имеет смысла

поможет декомпилятор (в нашем случае IlSpy).

 Как пользоваться

Как его использовать на примере ELMA BPM и C#.

  1. Запустите IlSpy.exe (находится в скачанном архиве, предварительно распаковать)
  2. Скопируйте файлы с расширением .dll в отдельную папку
    • файлы .dll серверных частей модулей Elma BPM лежат в папке <Elma>/Web/bin
    • файлы .dll веб частей модулей Elma BPM лежат в папке <Elma>/Web/Modules/<ModuleName>/bin
      • в папке веб модуля есть 90% исходного кода в виде файлов .cs
  3. Перенесите содержимое папки в левую часть окна IlSpy
  4. Результат — мы имеем декомпилированный код модулей.

Инструкция:

  1. Вспоминаем где используется нужный нам механизм (на примере texttemplate)
  2. Определяем область поиска и ищем по смыслу нужные примеры в исходниках.

*Внутри Elma BPM два генератора текста — в «базовом» не работают функции для шаблонов. На скриншоте полноценный вариант

Типичные случаи неописанного функционала в документации (Elma BPM)

— то ради чего приходится пользоваться декомпилятором

Точки расширения системы

— интерфейсы при реализации которых добавляется новый функционал.

Например как добавить новую функцию в генератор Elma BPM — вот статья, а как:

  • Добавить новую функцию в EQL ( например вам нужна функция которая вернет начало текущего года — CurrentYear())
  • Выполнить действие по событию переназначения задачи (например при переназначении процессной задачи (изменении исполнителя) — нужно изменить поле в сущности)

И так далее ( а таких точек расширения десятки а то и сотни) — этого в документации нет.

Служебные механизмы

Следующее с чем сталкиваются это:

«Elma как то генерирует текст по шаблону — мне нужно то же самое!» (нет не по файлу, именно тексту)

  • как это сделать база знаний не ответит, за то ответит исходный код:

 

Особенности работы с базой данных

Изучите как устроены модули, из полезного я так нашел (точнее мне оно очень нужно было):

  • Как правильно создавать и вызвать хранимые процедуры в ELMA BPM
  • Как создавать индексы в базе данных
  • Как вызвать sql скрипт из кода

— последние два пункта — домашнее задание) 

Как используются паттерны в Elma BPM

Иногда приходится разобраться как правильно применить паттерны (также как производитель)

  • Паттерн Unit Of Work
  • Как вызвать отдельный поток (попробуйте найти сами)
  • Как создать пул потоков и воспользоваться сервисами ELMA BPM  (используется в Workflow для исполнения элементов бизнес процесса)
  • Как работает IoC в Elma BPM (используется Autofac, инверсия управления и внедрение зависимостей)

Доработать функционал веб части

Тут даже может не потребоваться декомпилятор, исходный код открыт.

Типичные примеры:

  • Нужен универсальный модуль массового редактирования полей :
  • Нужен универсальный модуль импорта :

Для этого вам нужно

  1. Открыть исходный код веб части модуля Common (работа со справочниками)
  2. Изучить то как устроен контроллер (это из MVC, обычный класс с методами) Catalogs
  3. Скопировать в свой модуль, добавить зависимости
  4. Добавить функционал который требуется ( например импорт справочников, логику придется придумать самостоятельно)

далее пофантазируйте — что еще можно сделать зная «правду»

Значит я могу взять исходники и сделать свою Elma BPM?

нет этого сделать не получится

  • Почти весь серверный код обфусцирован (преобразован в непонятный вид для человека — без изменения логики для машины)
  • Все модули связаны и подписаны ( ключом шифрования) — один без другого не запустится

Вывод: это делать бессмысленно — вы больше потратите времени чтобы разобраться и собрать свою копию чем сделать заново

— но приложения других разработчиков вы можете повторить, чей код не обфусцирован ( я не призываю так делать)

Украсть не получится — понятно

— тогда может хотя бы взломать активацию (сделать генератор ключей)?

* Забегая вперед —  тоже не получится )

В Elma BPM используется механизм односторонних функций — пара связанных функций

  • одна шифрует в одну сторону
  • другая в обратную

а в наличии только последняя.

  1. Представьте что вы пропустили лист бумаги через шредер (измельчитель бумаги)
  2. И теперь представьте механизм превращающий из мусора лист бумаги без потери информации… (у вас именно такой механизм)
  3. А теперь вам предстоит подобрать нужный шредер — удачи)

— такие функции используют преобразования XOR(исключающий или) — где обратная операция возвращает неоднозначный ответ (например на вход 1, на выход 0 или 1 — неизвестно).

О декомпиляторе разработчики могут и не вспоминать — но иногда без него не обойтись…

Если вас интересует какой то отдельный неописанный функционал ELMA BPM и декомпилятор не помог

— пишите мне на почту или в комментариях, я расскажу о нем в следующий раз)

P.S. IlSpy меня выручал при работе с другими программами, по которым нет документации по соображениям безопасности…)

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

%d такие блоггеры, как:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: