Я обсуждал, почему я не думаю, что Обфускация является эффективным средством защиты от взлома здесь:
Защита кода .NET от реверс-инжиниринга
Тем не менее, ваш вопрос конкретно о краже источника , что является интересной темой. В книге Эльдада Эйлиамса « Реверсинг: Секреты обратного инжиниринга » автор рассматривает кражу источника как одну из причин обратного инжиниринга в первых двух главах.
По сути, единственное, на что вы способны, - это нацелиться на кражу исходного кода, если у вас есть какой-то очень специфический, сложный в разработке алгоритм, связанный с вашим доменом, который дает вам преимущество в конкуренции. Это почти единственный раз, когда было бы экономически выгодно попытаться реконструировать небольшую часть вашего приложения.
Таким образом, если у вас нет сверхсекретного алгоритма, который вы не хотите использовать в своих соревнованиях, вам не нужно беспокоиться о краже исходного кода. Затраты на удаление значительного количества исходного кода из вашего приложения быстро превышают затраты на его переписывание с нуля.
Даже если у вас есть какой-то алгоритм, который вам не нужен, вы мало что можете сделать, чтобы помешать решительным и квалифицированным специалистам все равно его получить (если приложение выполняется на их компьютере).
Некоторые распространенные антиреверсивные меры:
- Обфусцирование - не очень важно для защиты вашего источника или предотвращения его взлома. Но с тем же успехом мы могли бы сделать это не так просто, верно?
- Сторонние упаковщики - Themida - один из лучших. Упакует исполняемый файл в зашифрованное приложение win32. Предотвращает отражение, если приложение также является приложением .NET.
- Пользовательские упаковщики. Иногда полезно написать собственный упаковщик, если у вас есть для этого навыки, потому что в сцене взлома очень мало информации о том, как распаковать ваше приложение. Это может остановить неопытных RE. В этом руководстве содержится полезная информация о написании собственного упаковщика.
- Храните отраслевые секретные алгоритмы на машине пользователя. Выполните их как службу удаления, чтобы инструкции никогда не выполнялись локально. Единственный «надежный» способ защиты.
Однако упаковщики могут быть распакованы, и запутывание на самом деле не мешает тем, кто хочет увидеть, что делает ваше приложение. Если программа запускается на компьютере пользователя, то она уязвима.
В конце концов его код должен быть выполнен как машинный код, и обычно это вызывает запуск отладчика, установку нескольких точек останова и контроль выполнения инструкций во время соответствующего действия и некоторое время, потраченное на обработку этих данных.
Вы упомянули, что вам потребовалось несколько месяцев, чтобы написать ~ 20kLOC для вашего приложения. Если бы вы приняли минимальные меры предосторожности, потребовалось бы почти на порядок больше времени, чтобы превратить эти эквивалентные 20kLOC из вашего приложения в работоспособный источник.
Вот почему экономически выгодно использовать только небольшие отраслевые алгоритмы для вашего приложения. Что-нибудь еще, и оно того не стоит.
Возьмите следующий вымышленный пример: допустим, я только что разработал совершенно новое конкурирующее приложение для iTunes, в котором было множество наворотов. Допустим, на разработку ушло несколько сотен тысяч LOC и 2 года. Одна из ключевых функций, которые у меня есть, - это новый способ подачи музыки, основанный на вашем вкусе прослушивания музыки.
Apple (будучи пиратами) узнает об этом и решает, что им действительно нравится ваша музыкальная функция, и решает отменить ее. Затем они будут оттачивать только этот алгоритм, и обратные инженеры в конечном итоге придумают работоспособный алгоритм, который подает эквивалентные предложения с теми же данными. Затем они реализуют указанный алгоритм в собственном приложении, называют его «Genius» и зарабатывают следующие 10 триллионов долларов.
Вот как кража источника снижается.
Никто не будет сидеть там и переворачивать все 100 000 LOC, чтобы украсть значительную часть вашего скомпилированного приложения. Это будет просто слишком дорого и слишком много времени. Приблизительно в 90% случаев они будут переворачивать скучный, не секретный для отрасли код, который просто обрабатывает нажатия кнопок или пользовательский ввод. Вместо этого они могли бы нанять своих собственных разработчиков, чтобы переписать большую часть их с нуля за меньшие деньги и просто обратить вспять важные алгоритмы, которые сложно разработать и которые дают вам преимущество (т. Е. Функция предложения музыки).