Как защитить десятки миллионов исходного кода Node.js?

Node.js

Сторона А неожиданно требует развертывания приватизации

Проект сделан на Node.js, нужно ли защищать код Node.js?

В обычных условиях в этом нет необходимости, поскольку код выполняется на облачном сервере. Пока сервер защищен, код Node.js безопасен даже в открытом тексте.

Но не бойтесь 10 000 во всем, просто бойтесь случайностей. Если однажды Сторона А вдруг попросит о развертывании приватизации, и ваш начальник с готовностью согласится и перебросит проблему вам.

Что ж, теперь все изменилось, вам нужно развернуть свой код в ненадежной среде. Как только исходный код Node.js упакован или запущен на сервере Стороны А, Сторона А может легко просматривать, анализировать, изменять и копировать ваш код.

Так начни гугл

Какие есть способы защитить js-код?

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

  1. шифрование

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

  2. затемнять

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

  3. компилировать

    Код Node.js выполняется через движок V8, а движок V8 компилирует исходный код в байт-код (bytenode), а затем интерпретирует и выполняет его. Если мы сможем скомпилировать код Node.js в байт-код, это еще больше повысит безопасность кода. В конце концов, декомпиляция байт-кода V8 — непростая задача.

  4. Бэйл

    Упакуйте код Node.js и зависимости в исполняемый файл. Это может немного увеличить сложность взлома.

Затем скопируйте код с github

Вот несколько библиотек или веб-сайтов, связанных с путаницей, компиляцией и упаковкой js:

  1. затемнять

  2. компилировать

    • bytenode, минималистский компилятор байт-кода Node.js.
  3. Бэйл

    • 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, добро пожаловать звезда.

Что-то не так в написании, надеюсь, вы дадите мне пару советов в комментариях.