Запутанность кода.NET действительно стоит того?

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

Если кто-то действительно хочет украсть Ваш источник, они могут.

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

Вы, вероятно, не должны хранить ничего чувствительного в коде, так, чтобы не должна была быть проблема.

Если Вы не запутываете, Вы все еще не обеспечиваете полный исходный код, таким образом, Вы могли продать "лицензию исходного кода".

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

Например, я должен заменить некоторые изображения в ASPDotNetStoreFront. При поиске местоположения тегов я нашел, что они содержались в скомпилированном коде. ДЕРЬМО. Таким образом, я полагал, что буду декомпилировать код, для обнаружения который теги img заменить через Regex. Я пытался просмотреть исходный код для наблюдения, какие изображения могли возможно прибыть из данного скомпилированного метода, и отражатель не может обработать его, я предполагаю из-за путаницы. У меня действительно нет времени для движения, наводя справки о de-comilers/de-obfuscators.

15
задан Ira Baxter 5 April 2010 в 18:44
поделиться

6 ответов

Я думаю, оно того стоит. Для вас это практически ничего не стоит, а вы значительно усложняете жизнь хакеру. Даже если они взломают его, вы получите удовлетворение от осознания того, что потратили впустую от нескольких часов до нескольких недель их жизни. Если замок не идеален, это не значит, что вы не запираете свои двери.

18
ответ дан 1 December 2019 в 01:17
поделиться

Самый простой способ:

comboBox.setModel(new DefaultComboBoxModel(list.toArray()));
-121--3950543-

При наличии List < int > originalList = new List {1, 2} затем выполните следующее:
List < int > newList = new List < int > ();
foreach (int i в originalList)
newList.Add (i);

предоставит вам клонированный список.

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

-121--4195901-

Стоит ли этого только в том случае, если ваш проект является долгосрочным и для его реализации потребуется много времени. Это, конечно, мнение здесь, но я не нашел запутанный .NET DLL еще не смог выяснить, что происходит с помощью только Reflector.

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

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

11
ответ дан 1 December 2019 в 01:17
поделиться

На мой взгляд, нет. Я видел, как ребята взламывают программы, написанные на разных языках. С такими профессиональными инструментами, как IDA (работает для неуправляемого кода), ничто не защищено на 100%. Обфусцированные сборки еще легче взломать из-за метаданных, которые все еще присутствуют.

3
ответ дан 1 December 2019 в 01:17
поделиться

Создается ли экземпляр текстового поля внутри метода cellForRowAtIndexPath::? Если да, то каждый раз, когда ячейка прокручивается в поле зрения, она может повторно создаваться.

Необходимо сохранить ссылку на текстовое поле на контроллере и повторно использовать его в cellForRowAtIndexPath::

-121--4434977-

Самый простой способ:

comboBox.setModel(new DefaultComboBoxModel(list.toArray()));
-121--3950543-

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

XHEO, например, предоставляет средство ( CodeVeil ) для фактического шифрования сборок .NET, а не просто для их запутывания.

2
ответ дан 1 December 2019 в 01:17
поделиться

Для приложений .Net НЕ запутывайте суммы, чтобы сделать ваш продукт открытым исходным кодом, так как его так легко увидеть и проанализировать исходный код с помощью Reflector. У вас может быть лицензионное соглашение, но лишь у нескольких компаний есть время и деньги для защиты лицензионного соглашения в суде. Для таких компаний обфускация - лучший вариант. Конечно, вам нужно протестировать запутанные сборки, но тогда вы уже тестируете свой продукт, так почему бы не протестировать окончательные запутанные сборки.

Это также зависит от того, насколько полезен обфускатор.Рассмотрим наш Crypto Obfuscator - он поддерживает простую интеграцию с Visual Studio, поэтому вы всегда запускаете запутанные сборки. Он также имеет множество автоматических исключений, поэтому он не будет запутывать классы / члены, что приведет к неправильному запуску запутанной сборки. Он также будет отображать предупреждения (включая номер строки) для кода, который может привести к неправильному запуску запутанной сборки. Это огромная экономия времени.

1
ответ дан 1 December 2019 в 01:17
поделиться

Конечно, ничто не защищено на 100%. Но не вводить в заблуждение по этой причине - все равно, что не закрывать дверь дома, потому что «любой решительный вор все равно может ее открыть». Вы все равно запираете дверь !!

Я думаю, что главная угроза - это какой-то чувак, декомпилирующий ваше приложение с помощью ildasm, обнаруживая предложения SQL, изменяя их, а затем снова компилируя. Таким образом, он / она может устранить ограничения и получить полный список клиентов, например, или просто навредить.

Вы, как провайдер приложения, в первую очередь несете ответственность ...

Парни из BitHelmet довольно хорошо объясняют это в http://www.bithelmet.com/Overview.html .

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

Я тогда был младшим :), с этим приходилось разбираться моему начальнику. Мне всегда интересно, сколько из этих краж так и не было обнаружено ;-). Я мог бы это сделать, но никогда не сделал!

Дело в том, что вы должны думать о каком-то уровне защиты, и вы должны учитывать внутреннего злоумышленника. И усложнит жизнь решительному реверсивному инженеру.

2
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

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