Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

По-видимому, есть достаточно коммерческой или интеллектуальной ценности, взламывающей ваше приложение, что кто-то с разумными навыками попробовал это почти сразу.

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

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

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

Ответ 6

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

Приветствия,