запутать/сжать/защитить код javascript

#obfuscation #minify #uglifyjs

Вопрос:

Я ищу способ запутать / сжать свой код javascript.

Я уже искал в операционной системе и в Интернете, но там много устаревших или сломанных руководств и сценариев. Кроме того, честно говоря, у меня нет времени протестировать их все, чтобы найти те немногие, которые все еще будут работать в 2021 году с JS ES6.

Мой код использует ethers.js для взаимодействия с блокчейном, поэтому используйте такой код:

 balance = await provider.getBalance(accountSigner);
...
const networkWallet = await provider.getNetwork();
 

Я вижу, что на других сайтах есть этот код:

 !function(e){function r(r){for(var n,a,i=r[0],c=r[1],f=r[2]...
 

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

Некоторые из моих попыток:

  • uglifyjs -c test.js -> он всегда работает для файла в 5 строк, не используя достаточного количества процессора — я не слышу, чтобы в этом случае почти ничего не работало, поэтому я думаю, что это не работает. Без -c это немедленно) (то же самое с sudo)
  • closure-compiler.appspot.com: это также не удается для предложенного ими файла, он слишком медленный и устаревший
  • http://jsutility.pjoneil.net/ — он не поддерживает provider.on("network", (newNetwork, oldNetwork) => {
  • https://jscompress.com/ — кажется, это работает, но он выполняет только небольшое сжатие/запутывание без каких-либо опций для запутывания, например, строк
  • https://javascriptobfuscator.com/Javascript-Obfuscator.aspx — наиболее полезные опции доступны только в графическом интерфейсе для Windows

Я использую Ubuntu LTS.

Я также могу использовать PHP, если это может помочь.

Причина в том, что мой код позволит пользователям чеканить новый NFT непосредственно с моего веб-сайта, поэтому, поскольку исходный код смарт-контракта опубликован на etherscan, каждый может скопировать мой код Javascript и выполнить свою чеканку с помощью нового смарт-контракта. Другими словами: каждый может легко скопировать ВСЕ мои работы!

Комментарии:

1. Минимизация сильно отличается от запутывания; похоже, вы спрашиваете о запутывании (возможно, захотите отредактировать). Обязательный вопрос: почему вы хотите запутать код, который взаимодействует с цепочкой блоков? Для этого есть законные причины, но это немного тревожный сигнал, по крайней мере для меня

2. @2e0byo Я обновил вопрос и добавил причину в конце.

3. в этом есть смысл. Я признаюсь, что единственными местами, где я видел запутанные JS, в которых чеканились биткоины, были места, где JS вообще не должно быть, т. Е. инъекции. Но как насчет компиляции в webasm в этом случае и вообще не выпускать исходный код?

4. @2e0byo Я не знаю webasm, можете ли вы предложить мне URL-адрес для компиляции с ним?

5. webasm — это целевая сборка, оптимизированная для работы на мобильных процессорах. Вики . Обычно люди пишут код на стандартном языке компиляции (c, rust и т. Д.), Но быстрая проверка подтверждает, что существует компилятор машинописного текста, который, вероятно, довольно близок к тому, что у вас уже есть в JS.

Ответ №1:

Попробуйте этот инструмент
https://javascriptobfuscator.com/Javascript-Obfuscator.aspx

 balance = await provider.getBalance(accountSigner);
 

производит

 var _0x74c0=["x67x65x74x42x61x6Cx61x6Ex63x65"];balance=  await provider[_0x74c0[0]](accountSigner)
 

Комментарии:

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

Ответ №2:

Я использую JSDefender (https://www.preemptive.com/products/jsdefender/) вот уже почти год. Это помогло мне запутать проект react, angular и javascript. Вы можете попробовать пробный период, чтобы убедиться, что он также адаптирован для вашего проекта.