Задать вопрос
@samael228

Как обезопасить программу С# от взлома?

Суть в том, что я разрабатываю лаунчер, который будет иметь возможность запускать другие мои программы. Как можно обеспечить защиту запускаемых программ от взлома? Я рассматриваю возможность создания сервера, который будет передавать весь код в зашифрованном виде. В лаунчере он будет расшифровываться и компелировать код. У меня два вопроса.
1) Является ли это правильным решением?
2) Каким образом это можно реализовать? Я нашел решение компилировать в dll и запускать его. Однако это не подходит, поскольку этот dll будет легко взломать.
  • Вопрос задан
  • 3570 просмотров
Подписаться 3 Средний 11 комментариев
Решения вопроса 7
CityCat4
@CityCat4 Куратор тега Информационная безопасность
//COPY01 EXEC PGM=IEBGENER
Что за каша? Что такого ценного в "других программах" и от чего их надо защищать? Сама программа обычно является обьектом защиты только если это игра - то есть работа программы самой по себе (среди не-игр это редко). Обычно не-игра защищается тогда, когда она производит что-то ценное.

Вопрос - что ценного в ваших программах? Кому они нужны, кто будет их ломать?
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
Взломать можно все, что угодно - это лишь вопрос объема прикладываемых усилий/времени/денег для этого. Со стороны разработчика можно только осложнить этот процесс, но не предотвратить. Стандартная практика - осложнить взлом ровно на столько, чтобы объем затрачиваемых на взлом усилий себя не окупил или получаемая выгода была минимальна. Для начала вам следует определиться с ценностью того, что вы хотите защитить в своих приложениях и определиться с бюджетом времени/денег для затрат на защиту этих важных для вас данных, процессов и прочего. А уже потом прорабатывать меры защиты. Судя по вашим вопросам вам потребуется нанять консультанта, который поможет подобрать оптимальные для вас меры защиты.
Ответ написан
Вообще раз уже допускается наличие сетевого соединения между клиентом и сервером, то напрашивается просто вынести все критические функции на сервер.

Но я просто пытаюсь угадать что и от чего ты пытаешься защитить.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
C# позволяет линковаться с нативным кодом написанным на С++ или ассемблере.
Напиши парочку ключевых функций на С++ и это сильно обломает потенциального
школьника.
Ответ написан
Ev3nt
@Ev3nt
Всё можно ломануть, но как вариант - il2cpp с обфускацией названий функций, как это делали разрабы Genshin Impact.
Ответ написан
@Jhayphal
Если ты под взломом имеешь ввиду декомпиляцию кода из IL обратно в C#, то посмотри в сторону Native AOT. Кроме того, есть средства обфускации (запутывания) кода, типа dotFuscator.
Для контроля лицензий существуют коммерческие решения. Обычно дешевле и надёжнее купить такое решение, чем его разрабатывать и поддерживать. Тем более специальное средство вряд ли получится обойти в надёжности защиты.
Часто компании следуют логике - бизнес не станет использовать нелицензионное ПО (так как это противозаконно), а если какие-то юзеры скачают с торрента, ну и хрен с ним.
Зависит конечно от сферы применения приложения.
Ответ написан
Комментировать
@busy10
VMProtect с последних версий
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
По хорошему ответ на вопрос в заголовке - практически никак и торренты с ломаным софтом этому аргумент.
Т.к. непонятно что защищать и от чего, то непонятно и что советовать, слишком много всего и обязательно что-то упустишь.
Задам вопрос по другому - почему неподходит выполнять команды на сервере и получать результат? Соответственно получится аутентифицировать и авторизовать пользователя, проверить оплату/баланс и отдать или нет результат.
Даже если же это on-prem решение по типу игр или фотошопа все равно какие то важные моменты можно вынести на свой сервер, без которых невозможна работа локально.
Ответ написан
Комментировать
@Ravenholn
Обратись к разработчикам читов для популярных игр. Большинство продвинутых читов подгружает необходимые для работы файлы только после команды с сервера разработчика. Хотя судя по твоим запросам ты тоже чем то похожим занимаешься.
Ответ написан
@alextrof94
Хочешь сделать лаунчер, который будет запускать софт, при этом есть интернет?
Храни на сервере хэш от экзешника, который хочешь запускать, и каждый раз проверяй этот экзешник. Получить-передать пару десятков байт куда проще, чем каждый раз передавать весь код.
Опять же, запущенное приложение может перепроверять лаунчер при запуске.
Про денуво слышал? Самая мощная система защиты софта, которая обходится издателям в сотни тысяч баксов. И ее все равно ломают, так что...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы