2chevskii
@2chevskii
Если бы каждый мог в поиск, тостер бы вымер.

Как обфусцировать исходный код C#?

Здравствуйте, уважаемые знатоки! На повестке дня (а у меня - на повестке всей предидущей недели) стоит, и довольно остро вопрос - как обфусцировать сурс C#?
Стоит, наверное, посянить - зачем мне вообще это понадобилось?

Где то в январе меня сильно ударила по голове идея начать кодить, и для старта я выбрал шарп и юнити, а для практики я начал писать плагины для игры Rust под моддинговую платформу Oxide, ныне uMod. Плагины закидываются в формате сурс кода и компилируются встроенным, собранным разработчиками платформы компилятором, то бишь можно прямо в процессе работы сервера загружать и выгружать аддоны.
Уже через месяц я вышел на уровень "не стыдно пацанам показать", и мы с партнером (тоже кодер) открыли свой маркетплейс.
В то время, когда мы пишем чтото эксклюзивно для одного проекта серверов, его владельцы сами заинтересованы в том, чтобы плагин не появился у других. С другой стороны, когда покупают наши плагины, которые лежат на сайте, и доступны для покупки всем желающим, велика вероятность того, что твоя работа в скором времени всплывет где то в интернете, и попадет в руки другим кодерам, которые на ее основе сделают что либо свое.
Для меня как человека, перепробовавшего работы в куче мест от макдональдса до яндекс.еды в попытке справиться со студенческой бедностью, те деньги, что приносит в данный момент это предприятие ($100-150 в неделю), стратегически важны для выживания в суровых условиях Москвы.

Закончив с долгим вступлением - объясню, что уже сделано.
С товарищем мы сначала рассматривали вариант написания своей либы, которая бы качала плагин с нашего сервера в формате байт массива, но отказались от этой идеи, т.к. многие клиенты используют shared хостинги, и у них нет доступа к папке ~/Managed/, куда и нужно закидывать подобного рода библиотеки. Так же мы реализовали весьма топорный способ получения имен переменных через рефлексию, но, как вы и сами понимаете - способ и правда очень топорный, ведь требует в каждый плагин добавить код, взаимодействующий с рефлексией, затем обфусцировать через прогу, что мы также написали, полученные имена, и удалить код из плагина.
В сети не смог найти ничего дельного по теме обфускации именно сурса, ибо для обфускации скомпилированных файлов (exe/dll) есть довольно много готовых решений.
Итак - смиренно прошу поделиться знаниями о том, как получить имена переменных из исходного текста, спасибо.
  • Вопрос задан
  • 3372 просмотра
Пригласить эксперта
Ответы на вопрос 3
yudinikita
@yudinikita
Инженер-программист из России
Самый лучший, как мне кажется, вариант - компилятор/анализатор Roslyn, который поддерживается Microsoft и, соответственно, будет работать с любым корректным кодом на C# (чего было бы сложно добиться с самодельным парсером/кодогенератором).

Roslyn на GitHub: https://github.com/dotnet/roslyn
Полезные ссылки: https://docs.microsoft.com/ru-ru/visualstudio/exte...
Статьи про генерацию кода:
1. https://msdn.microsoft.com/ru-ru/magazine/mt707527.aspx
2. https://msdn.microsoft.com/en-us/magazine/mt808499.aspx
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы