Защита моего кода от инженерного анализа

Я не буду упоминать, что вы смешиваете var и let, кроме как сказать, что вы делаете это и должны быть осторожны с этим. Первый вопрос, который я хотел бы задать, это что такое typeof userData[targetUser.id].money и, более конкретно, каково его значение . Если это число, логическое значение, null или пустой массив (?!), Он должен работать или, по крайней мере, не возвращать NaN. Однако, если это строка, неопределенное или любое другое значение, JavaScript не будет действительно знать, что вы имеете в виду, когда говорите, например, умножить Math.random() раз "fish".

Обычно в этом случае хорошей идеей будет console.log выяснить, что такое userData[targetUser.id], просто чтобы убедиться, что объект, от которого вы возвращаетесь, на самом деле является тем, чем вы думаете. Есть ли на самом деле свойство объекта userData, определяемое идентификатором targetUser?

6
задан Community 23 May 2017 в 10:26
поделиться

8 ответов

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

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

И конечно можно всегда регистрировать патент для изобретения и защищать себя по закону.

3
ответ дан 9 December 2019 в 20:49
поделиться

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

НАПРИМЕР, обеспечьте клиент или веб-страницу для людей для доступа к некоторому сервису, который выставляет функциональность.

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

Для дополнительной меры запутайте тот код.

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

2
ответ дан 9 December 2019 в 20:49
поделиться

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

Это - часть обоснования того, почему они выпустили источник BCL вместо того, чтобы сохранить это частным.

3
ответ дан 9 December 2019 в 20:49
поделиться

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

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

обратите внимание, что это сделает отладку очень трудного для Вас и почти невозможного для других (если это будет приложением конечного пользователя, это не проблема, но если это - библиотека или платформа для других разработчиков для здания, это - проблема),

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

все это - компромисс между трудностью для Вас по сравнению со сдерживанием для нескольких плохих яблок по сравнению с возможными потерями из-за theft/plagarism

удача, и сообщила нам то, что Вы решаете!

2
ответ дан 9 December 2019 в 20:49
поделиться

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

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

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

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

Это - просто мое мнение. Я могу быть неправым. Я был неправ прежде, Вы только должны спросить мою жену :-)

3
ответ дан 9 December 2019 в 20:49
поделиться

Можно запутать его в C# или уровне CIL, но что действительно собирается лишить возможности, то, что компилятор IL разработан для создания самого эффективного машинного кода, который это может для фактического выполнения.

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

Столкнитесь с ним, если кто-то хочет это, у них может быть он.

Можно мешать небрежно понимать это. Например, я хотел видеть то, что было в некоторой базе данных, управляемой JAVA-приложением. Оказалось, что декомпиляция Java была действительно грязна, полна нечетных функций и классов и пространств имен все с теми же именами, намеренно пытаясь скрыть то, что действительно продолжалось.

Я, возможно, согласовал декомпилятор, который я использовал так, чтобы он переименовал все как A_namespace вместо просто A, и затем функциональный поток высунет право на графики трассировки вызова Eclipse.

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

Так, можно скрыть его от небрежно заинтересованных людей, уверенных.

1
ответ дан 9 December 2019 в 20:49
поделиться

Большинство obfuscators позволяет Вам указывать, какие методы/классы Вы хотите удержаться от того, чтобы быть запутываемым. SmartAssembly, например, позволяют Вам отметить методы или классы с атрибутами, в то время как другие позволяют Вам выбрать методы в UI для исключения из процесса. Необходимо смочь иметь довольно мелкомодульный контроль над процессом, и таким образом, Вы можете иметь свой пирог и съесть его.

Вы однако столкнетесь с проблемами при использовании отражения.

0
ответ дан 9 December 2019 в 20:49
поделиться

Я услышал хорошие комментарии о Специях. Сетевой Obfuscator. Это должно смочь значительно увеличить время, необходимое для достигания алгоритма.

-2
ответ дан 9 December 2019 в 20:49
поделиться
Другие вопросы по тегам:

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