Сторона А неожиданно требует развертывания приватизации
Проект сделан на Node.js, нужно ли защищать код Node.js?
В обычных условиях в этом нет необходимости, поскольку код выполняется на облачном сервере. Пока сервер защищен, код Node.js безопасен даже в открытом тексте.
Но не бойтесь 10 000 во всем, просто бойтесь случайностей. Если однажды Сторона А вдруг попросит о развертывании приватизации, и ваш начальник с готовностью согласится и перебросит проблему вам.
Что ж, теперь все изменилось, вам нужно развернуть свой код в ненадежной среде. Как только исходный код Node.js упакован или запущен на сервере Стороны А, Сторона А может легко просматривать, анализировать, изменять и копировать ваш код.
Так начни гугл
Какие есть способы защитить js-код?
Идея такова: защищенный код должен иметь возможность нормально работать (разумеется, что толку от кода, который нельзя запустить), и в то же время исходный код не должен быть легко виден посторонним. Короче говоря, сделать его понятным для машин и трудным для понимания людьми.
-
шифрование
Мы можем зашифровать код js, расшифровать его перед каждым выполнением и фактически запустить расшифрованный код. Но шифрование повлияет на эффективность выполнения, и после взлома пароля произойдет утечка исходного кода.
-
затемнять
Обфусцируйте код, чтобы сделать его максимально нечитаемым.Говорят, что этой идее научились у программистов, которые плохо пишут. Общие методы включают в себя: разделение констант, нарушение потока управления, добавление бессмысленного кода, блокировку доменных имен, запутывание строк, отключение отладки и т. д.
-
компилировать
Код Node.js выполняется через движок V8, а движок V8 компилирует исходный код в байт-код (bytenode), а затем интерпретирует и выполняет его. Если мы сможем скомпилировать код Node.js в байт-код, это еще больше повысит безопасность кода. В конце концов, декомпиляция байт-кода V8 — непростая задача.
-
Бэйл
Упакуйте код Node.js и зависимости в исполняемый файл. Это может немного увеличить сложность взлома.
Затем скопируйте код с github
Вот несколько библиотек или веб-сайтов, связанных с путаницей, компиляцией и упаковкой js:
-
затемнять
- JavaScript obfuscator- Мощный обфускатор JS.
- Шаманская технология- Набор решений проблем безопасности кода JS.
-
компилировать
- bytenode, минималистский компилятор байт-кода Node.js.
-
Бэйл
- nccПроект Node.js можно упаковать в один файл js, который поддерживает TypeScript и динамический импорт.
- pkgПроект Node.js можно упаковать в двоичный исполняемый файл. pkg не поддерживает динамический импорт, но упакует вместе сам Node, который можно запустить в среде, где Node.js не установлен.
- pmq20/node-packerЕго также можно упаковать в бинарный исполняемый файл.Его преимущество в том, что он поддерживает различные формы require, а также модули C++. Жаль, что проект не обновлялся два года и поддерживает только Node.js 8.3.0, для поддержки более высоких версий, пожалуйста, переместитеslee047/node-packer.
выбрать план
Абсолютной безопасности вообще нет, а вышеперечисленные методы могут только увеличить сложность взлома. Есть поговорка, что в мире нет трудностей, но только у тех, кто хочет, пока у них достаточно технологий и терпения, все еще возможно восстановить соответствующий код.
Как защитник, мы можем максимально защититься. Здесь предоставляется обфускатор JavaScript + байтнод + упаковщик узлов.
Почему стоит выбрать node-packer вместо ncc, pkg? Потому что ncc и pkg не могут обрабатывать запутанный код.
Защита кода стоимостью в десятки миллионов
Предположим, нам нужно защитить такой проект:
// index.js
console.log("以下是价值上千万的代码:");
var a = 1;
var b = 1;
var c = a + b;
console.log("1 + 1 = " + c)
Сначала мы устанавливаем javascript-obfuscator и байтнод через npm. Затем установите node-packer под текущую систему.
Поскольку node-packer не может упаковывать файлы байт-кода .jsc, сгенерированные bytenode, вам необходимо добавить следующие файлы для импорта файлов .jsc:
// build.js
require('bytenode');
require('./index-obfuscated.jsc');
Затем добавьте следующие директивы в package.json:
"scripts": {
"obfuscate": "javascript-obfuscator index.js --string-array-encoding rc4",
"bytenode": "bytenode --compile index-obfuscated.js",
"nodec": "nodec build.js --skip-npm-install",
"build": "npm run obfuscate && npm run bytenode && npm run nodec",
}
последний запускnpm run build
, вы можете получитьa.out
(под системой windows естьa.exe
) исполняемый файл. Запустите его, и код стоимостью в десятки миллионов будет работать.
Кроме того, в каталоге проекта вы найдете еще два файла:index-obfuscated.js
, index-obfuscated.jsc
. Это запутанный код и файл байт-кода соответственно. javascript-obfuscator поддерживает множество технологий обфускации. Вы можете выбрать подходящие варианты в соответствии с потребностями вашего проекта, просмотрев документацию.
Эпилог
В дополнение к вышеперечисленным техническим средствам не забудьте добавить лицензию и указать информацию об авторских правах.
Спасибо, что досмотрели до конца, и, наконец, я дам вам эти десятки миллионов примеров кода бесплатно. Адрес проекта:javascript-code-protection-example, добро пожаловать звезда.
Что-то не так в написании, надеюсь, вы дадите мне пару советов в комментариях.