Как защитить .Net exe от декомпиляции/взлома

Мне очень грустно, потому что несколько дней назад мы запустили наше программное обеспечение, разработанное в .Net 4.0 (настольное приложение). Через 3 дня его кряк был доступен в Интернете. Мы пытались защитить программное обеспечение от этого, но каким-то образом людям удалось его взломать.

Вот сценарий: когда приложение запускается в первый раз, оно связывается с веб-сервером и проверяет учетные данные, переданные пользователем. Если учетные данные верны, программное обеспечение сохраняет значения в реестре, отправляет MachineID обратно на сервер и сохраняет его в базе данных.

Теперь хакер заменил связь с сервером на «возврат true»; оператор (я проверил это с помощью Telrik JustDecompile). и он загрузил взломанное программное обеспечение в Интернет.

Теперь следующие мои вопросы:
1- Как убедиться, что приложение .Net не будет взломано?
2- Хакер теперь знает мой код, так как он сделал модификацию. Какие шаги я должен предпринять?
3- Я прочитал в Интернете об обфускаторах. Но хакер знает мой код, что мне делать?
4- Любые другие профессиональные советы, которые я могу использовать, чтобы избежать взлома программного обеспечения?
5- Я не уверен, но могут ли эти программы-рефлекторы также декомпилировать App.Config с конфиденциальными данными ?


person Behroz Sikander    schedule 29.07.2012    source источник
comment
Нанять адвоката....   -  person Burkhard    schedule 29.07.2012
comment
Тот факт, что вы используете C#, тоже не помогает, в любом случае вы ничего не можете с этим поделать, просто работайте над бизнес-логикой и алгоритмом и улучшайте их.   -  person user827992    schedule 29.07.2012
comment
Во всем этом есть светлая сторона. Судя по всему, ваше приложение стоит взломать, считайте это комплиментом.   -  person Marnix van Valen    schedule 29.07.2012
comment
Ну, мы потратили много времени на это, и целевой рынок тоже был большим. Чувак, я никогда не видел, чтобы эта штука перекомпилировалась :@   -  person Behroz Sikander    schedule 29.07.2012
comment
Это действительно плохо? Теперь у вас есть клиентская база, которая знает ваше приложение и так сильно хочет его, что они ищут другие источники, а не официальный дистрибутив, чтобы получить его. Как только они начнут работать в компании (или откроют свою собственную) и им понадобится ваша функциональность, как вы думаете, что они будут делать? Перейти на то, что они знают, или пойти с другим приложением? Разве вы не можете рассматривать взломанную версию как образовательный инструмент для будущих клиентов? Вы видели какую-нибудь серьезную компанию, намеренно использующую пиратское программное обеспечение? Привело ли это к потере продаж?   -  person sisve    schedule 29.07.2012
comment
Следует задуматься над одним вопросом: люди, использующие его нелегально, когда-либо собирались за него платить? Это действительно потерянные продажи? Держу пари, что во многих случаях: нет. Это, конечно, не делает его менее раздражающим.   -  person Marc Gravell    schedule 29.07.2012
comment
My 2c - создай свою "трещину" и выложи в сеть. Включите в него отслеживание, чтобы, по крайней мере, вы могли понять, сколько вы «теряете».   -  person Adam    schedule 30.07.2012
comment
Следующий выпуск Obfuscate it. Взломать его в 20 раз сложнее.   -  person JWP    schedule 07.06.2017


Ответы (6)


1- Как убедиться, что приложение .Net не будет взломано?

Если компьютер может запустить ваш код + Хакер может запустить свой собственный код с более высоким уровнем привилегий, чем вы, ничто не может на 100% защитить ваше приложение от взлома. Даже если у них есть доступ только к исполняемому файлу, но не к целевой платформе, они все равно могут пройти и имитировать то, что будет делать целевая платформа, и выяснить, как осуществляется защита.

2- Хакер теперь знает мой код, так как он сделал модификацию. Какие шаги я должен предпринять?

Полностью перепишите часть аутентификации, чтобы им пришлось начинать с нуля, но они получат ее снова, вопрос только в том, сколько времени.

3- Читал в интернете про обфускаторы. Но хакер знает мой код, что мне делать?

Теперь, когда у них есть незапутанный код, джинн вырвался из бутылки. Вы мало что можете сделать, если только радикально не перепишете программное обеспечение, чтобы им пришлось начинать с нуля. Обфускатор не помешает решительному злоумышленнику, единственное, что может помешать, — это не допустить попадания бинарного файла в его руки.

4- Любые другие советы Pro, которые я могу использовать, чтобы избежать взлома программного обеспечения?

Единственная защита от копирования, которую я видел, которая удаленно задерживает на какой-либо период времени, — это то, что Ubisoft сделала с Assassin's Creed: Brotherhood. Они зашифровали свои уровни игровым диском, и по мере необходимости приходилось загружать ключ дешифрования из Интернета (это подход, позволяющий не допустить попадания двоичного файла в их руки). Но это не работало вечно, в конце концов хакерам удалось расшифровать эти уровни, и он был полностью взломан. Я видел, что этот подход требует больше всего времени, чтобы обойти его без юридического вмешательства (см. пункт 2 внизу).

5- Я не уверен, но могут ли эти программы-рефлекторы также декомпилировать App.Config с конфиденциальными данными?

Все, что нужно сделать программному обеспечению рефлектора, — это найти раздел, загружающий App.config, и прочитать значения по умолчанию. На компьютере, которым вы не обладаете полным контролем, нет безопасного места для хранения информации. Если он есть на компьютере, его можно прочитать. Если его можно прочитать, его можно реконструировать.


Единственное реальное решение, которое я вижу для предотвращения пиратства, — это один из двух вариантов.

  1. Человек никогда не получит ваше приложение, оно передается с сервера, находящегося под вашим контролем, и он никогда не увидит двоичный файл. Единственное, что вы отправляете им, — это информация, необходимая для управления пользовательским интерфейсом. Это подход, над которым работают все ММО. Люди могут перепроектировать то, что вы отправляете в пользовательский интерфейс, и имитировать логику, которая происходит на ваших серверах, но они никогда не смогут напрямую увидеть, что это делает, и если ваше программное обеспечение достаточно сложное, злоумышленник может не получить плату. для воссоздания кода на стороне сервера. Недостатком этого подхода является то, что вам нужно будет размещать серверы для подключения ваших пользователей, это будут повторяющиеся расходы, вам понадобится способ повторного переворота. Часто этот метод называют «насыщенным клиентом» или «тонким клиентом» в зависимости от того, сколько обработки выполняется на стороне клиента и сколько обработки выполняется на стороне сервера. См. главу 22. из "Руководства по архитектуре приложений Microsoft, 2-е издание". В частности, я описываю то, что показано в рис. 4 и 5

  2. Второй вариант заключается в том, чтобы тот, кому вы продаете свое программное обеспечение, также подписал юридический договор о нераспространении программного обеспечения (не лицензионное соглашение, фактический договор, который должен быть физически подписан клиентом). В этом контракте большие штрафы должны применяться к человеку, который сливает программное обеспечение, а затем пронизан вашей программой отпечатками пальцев, которые уникальны для человека, который покупает программное обеспечение, чтобы в случае утечки программы вы могли видеть, кто это сделал. (Этот метод поставщик Hex-Rays использует для своего дизассемблера IDA. Быстрый поиск в Google не смог найти взломанные версии новее 6.1, они находятся на 6.3). Этот метод не остановит пиратство, но в первую очередь может воспрепятствовать утечке копии. Это также позволяет вам возместить некоторые потери, связанные с утечкой программы. Одна из проблем заключается в том, что вам нужно будет поставить много отпечатков пальцев, и они должны быть тонкими, если злоумышленник может получить две копии программы и сравнить файлы между ними, он сможет сказать, что является идентифицирующей информацией. и просто кладут все, что хотят, чтобы они не могли сказать, от кого они это взяли. Единственный способ сделать это - добавить много отвлекающих факторов, которые нельзя просто удалить или рандомизировать, а также сделать идентификационный код некритичным для запуска программного обеспечения, если им не нужно работать, чтобы взломать его. они, скорее всего, оставят его.


Обновление: пересмотрев этот ответ, чтобы сослаться на него по другому вопросу, я подумал о простом способе реализации решения № 2.

Все, что вам нужно сделать, это запустить свой код через обфускатор и позволить ему переименовать ваши классы для каждого человека, которому вы продаете свое программное обеспечение (я все равно заставлю их подписать лицензионное соглашение, а не просто щелкнуть лицензионное соглашение, чтобы вы могли применить следующую часть) . Затем вы создаете базу данных сопоставления обфускации, когда вы видите утечку копии в Интернете, вам просто нужно найти один класс в любом месте проекта, найти его в своей базе данных, и вы будете знать, кто это просочил, и знаете, кто вам нужен обратиться за возмещением юридических убытков.

person Scott Chamberlain    schedule 29.07.2012
comment
Если приложение передается с сервера на клиент, оно все еще находится на клиенте. У хакера есть бинарное изображение, которое он может начать взламывать. - person Eric J.; 29.07.2012
comment
@ЭрикДж. Не передавать двоичный файл, передавать только уровень представления в трехуровневой программе. Уровень бизнес-логики и уровень базы данных будут на стороне сервера. - person Scott Chamberlain; 29.07.2012
comment
Человек никогда не получит ваше приложение, оно передается с сервера, находящегося под вашим контролем, и он никогда не увидит двоичный файл. ‹-- как это называется технически, чтобы я мог искать по нему? Умный клиент? - person Behroz Sikander; 29.07.2012
comment
@user1470127 user1470127 Это будет тонкий клиент или богатый клиент, в зависимости от того, сколько обработки вы хотите выполнять на стороне клиента. См. главу 22 Руководства по архитектуре приложений Microsoft, 2-е издание. В частности, я описываю то, что показано на рис. и 5 - person Scott Chamberlain; 29.07.2012

1: вы не можете. Вы можете запутать, но единственный способ предотвратить это: никому не давать исполняемый файл. Посмотрите, сколько игровые компании тратят на это; они тоже не решили.

2: обфускация немного помогла бы, хотя это гонка вооружений между обфускаторами и деобфускаторами

3: слишком поздно, чтобы вернуться и отменить это, но обфускация немного замедлит их в будущем

5: app.config обычно очень читаем; вы мало что можете здесь сделать; шифрование только немного замедлит их, если ключи находятся в вашем приложении и, следовательно, доступны

person Marc Gravell    schedule 29.07.2012
comment
@1: Они решили эту проблему, взгляните на пар и клапан. По крайней мере, для онлайн-игр это не совсем так. - person Mare Infinitus; 29.07.2012
comment
@MareInfinitus Для игр Steam существует по крайней мере один универсальный лаунчер и несколько эмуляторов, и все они обходят всю их безопасность. Даже онлайн может быть сломан (эмуляторы серверов существуют для постоянно включенного Ubisoft). Марк прав, это неразрешимо. - person ssube; 29.07.2012
comment
О Боже. Это плохая новость :@. Так что, вероятно, создание настольного приложения было плохим решением. - person Behroz Sikander; 29.07.2012
comment
Хорошо, если я ничего не могу с этим поделать. Не могли бы вы рассказать мне список обязательных действий перед запуском настольного приложения? - person Behroz Sikander; 29.07.2012

Как говорили другие, вы действительно ничего не можете сделать против решительного взломщика, если у него есть доступ к вашему коду. Обфускация обеспечит некоторую защиту от ленивого взломщика. Dotfuscator встроен в VS, вы можете попробовать его. Имейте в виду, что за запутывание стоит реальная цена. Будет очень сложно отлаживать проблемы по трассировкам стека, которые присылают вам ваши (платные) клиенты.

person ishanrc    schedule 29.07.2012

Лучший ответ тот, который вам придется принять. Вы не можете. Просто сосредоточьтесь на том, чтобы предоставить вашим пользователям отличный пользовательский интерфейс, и сделайте лицензирование очень простым. Возможность того, что ваше приложение может быть взломано, не означает, что создание настольного приложения было плохой идеей. Пираты останутся пиратами, а честные покупатели останутся честными покупателями.

person David Anderson    schedule 30.07.2012

Очевидно, взлом вашего приложения имеет достаточную коммерческую или интеллектуальную ценность, чтобы кто-то с разумными навыками попробовал его почти сразу.

Единственный способ победить в этой войне — использовать коммерческие пакеты защиты программного обеспечения.

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

Если вы пишете бизнес-приложение, вы не будете также писать механизм базы данных, в котором хранятся данные. Вы также не должны писать код предотвращения взлома для своего приложения. Это не то, что решает проблему вашего клиента, и для того, чтобы сделать это правильно, требуется огромный набор навыков.

person Eric J.    schedule 29.07.2012
comment
@огромный набор навыков: вам нужно быть только умнее взломщиков, которые в некоторых случаях очень опытны. - person Mare Infinitus; 29.07.2012
comment
The only way you will win that war is to use commercial software protection packages. на какое-то время это может дать вам небольшое преимущество, но вы все равно проиграете, даже если будете использовать коммерческие пакеты защиты. - person Lie Ryan; 30.07.2012
comment
Не согласен с Ли Райаном — в продаже имеется множество очень сильных средств защиты от копирования — поищите ответы, которые я уже публиковал на подобные вопросы. Попробуйте наш (CodeMeter) или другие (SafeNet или KeyLoc). Вам не нужно ломаться, несмотря на то, во что многие люди верят. - person John Browne; 30.07.2012
comment
@LieRyan: Вы можете выиграть в коммерческом смысле. Если хакер №1 в мире заинтересован во взломе вашего приложения, он может это сделать. Использование надежной защиты коммерческого программного обеспечения, как правило, гарантирует, что подавляющее большинство вашей реальной базы пользователей (те, которые действительно заплатят за приложение) купят лицензию. В конце концов, хакер №1 в мире, вероятно, также вставит спам-бота во взломанную версию. - person Eric J.; 31.07.2012

Что вы можете сделать, в дополнение к обфускации кода, так это добавить механизм расшифровки кода на основе hardwareID, имейте в виду следующий сценарий: отправка их HwID на ваш сервер, вы идентифицируете копию/владельца/номер установки/и т. д. с помощью этот HwID, и вы отвечаете ключом описания, ОСНОВАННЫМ на этом HwID для ЭТОГО конкретного двоичного файла (с отпечатками пальцев, упомянутыми ранее), поэтому взлом будет сложнее, поскольку для полной функциональности им нужен действительный доступ к вашему серверу, иначе они не могут использовать программное обеспечение.

Ваше здоровье,

person ngenen    schedule 01.01.2014