簡體   English   中英

如何加密 JavaScript 代碼使其不可解密?

[英]How can I encrypt JavaScript code so that it's not decryptable?

我有一些需要加密的 JavaScript 代碼,但我想確保沒有人可以解密它。

我可以使用哪些工具來做到這一點?

- 編輯 -

我仍然想在我的網站上運行代碼,我只是想確保沒有其他人可以解密代碼。

Javascript 代碼在瀏覽器中執行,即在客戶端,這意味着它必須在客戶端未加密時可用。

您可以做的“最好”可能是縮小它,這會使它更難理解——而且可能會做一些混淆——即使有人真正有動力仍然能夠閱讀它。

例如,參見YUI Compressor ,它可以縮小和混淆 JS 代碼。

如果您真的想加密它以便其他人無法解密它,您可以使用任意數量的加密之一。 例如,要手動完成,您可以使用TrueCrypt 或者以編程方式執行此操作,請使用大多數語言中可用的加密庫。

但是,如果您真正要問的是如何混淆代碼以便沒有人可以對其進行逆向工程,那么答案是:您不能,不能使用 Javascript 或任何其他語言。 你能做的最好的事情就是讓逆向工程師更難閱讀; 為此,有許多工具:

沒有辦法做到這一點。 您可以隱藏它並在其中包含一些域檢查代碼。 或者您可以讓它與檢查引用域的服務器端腳本一起使用。

我認為您將加密與已編譯的 binary混淆了。

甚至 Microsoft Office 或 Adob​​e Photoshop 等商業閉源軟件都沒有加密分發。 但是它們被編譯為本地機器代碼,這使得它們很難進行逆向工程。

JavaScript 沒有編譯后的二進制文件。 但是,隨着越來越多的瀏覽器轉向字節碼編譯以實現更快的性能,我們可能有一天會擁有一種編譯好的 JavaScript 源格式。 也許,類似於 Python 的.py.pyc文件,也許我們會有一個.jsc或 JavaScript 編譯文件,可以以二進制形式傳送到瀏覽器,在其 JavaScript 虛擬機中運行。

不過目前還不存在這樣的東西。 即使確實如此,這也只是一種更強烈的混淆。 混淆可以防止隨意復制和共享,但如果您真的需要保護您的知識產權,請移動服務器端的邏輯

沒有辦法這樣做,因為在一天結束時,代碼仍然必須在客戶端機器上運行,未加密,這意味着解密代碼的例程必須與加密代碼一起發送。 你把鎖和鑰匙都交給他們,他們所要做的就是轉動。

最好的辦法是通過混淆器運行它,但即便如此,也不是有人無法在不需要嘗試閱讀您的代碼的情況下自己重寫它。

你想要的在理論上和實際上是不可能的。 人們會在這里告訴你這是不可能的,你可能會想“嗯,那是因為沒有人努力過”。 不。這與在線性或恆定時間內計算第 n 個素數是不可能的一樣。 就像無法解決停機問題一樣,這是不可能的。 “你的意思是2+2不等於5?你還不夠努力!”

然而,這不僅是不可能的,而且想要這種東西的動機通常被誤導了。 試圖使用技術解決從根本上屬於法律問題的問題總是一個根本性的錯誤。 也許您想保護您的代碼免受“盜版”或競爭對手的侵害? 你寫的東西不太可能特別值得竊取,但如果你寫了,而且你不希望人們竊取它,那么你唯一真正的求助就是法治。

然而,在更大的層面上,您的問題不太可能是競爭對手或盜版者竊取您的代碼。 您的問題將是面向業務的:通過生產優質產品、合適的價格和充分的營銷來獲得受眾。 你做得對,有人竊取你的代碼並不重要。 你做對了,擁有“正宗的原創”似乎具有真正的價值。 事實上,如果你開源你的東西,它只能真正幫助你,因為這樣你就有一群有興趣的業余愛好者免費為你工作,潛在的。 盜版和逆向工程實際上是天賜之物,因為這意味着人們對您的產品有足夠的興趣想要改進它。 最好的辦法是盡你所能讓它發生。

如果您的業務確實依賴於對某些 javascript 保密,那么您基本上在第 1 階段的業務計划中就犯了一個錯誤。

如果您的企業正在銷售 javascript 庫(這種東西確實存在!),那么您的情況並不比任何其他軟件銷售商差。 最好的辦法是向誠實的企業推銷它,這些企業對給你錢沒有問題。 盜版您的東西的人無論如何都不想付錢給您 - 並且他們的根本劣勢是他們得不到您的技術支持或定期維護更新。

如果這不是商業上的努力,那么我真的不知道你為什么要打擾。 適當的信用?

雖然實際上並未加密,但 Yahoo 的YUI Compressor會壓縮和混淆您的 JavaScript 以供正常使用,並提供比JSMin更好的壓縮。

Microsoft 曾經提供Script Encoder來對您的 JavaScript(以及 ASP 和 VBScript 等)進行編碼,但編碼后的腳本只能在 Internet Explorer 中運行,因此這是一個很大的禁忌(鏈接

現在只有混淆是一種選擇。 但是您可以使用Online JavaScript Beautifier 之類的工具打破任何混淆,因此您很不走運。 你可以最小化,你可以混淆,但你真的無法隱藏你在做什么。

最好的最小化器/混淆器可能是Google Closure Compiler - 它非常先進,可能會將您的代碼變成難以理解的東西。

您正在尋找的是混淆,而不是加密。 有一些工具,例如JSMinYUI Compressor ,它們會使您的代碼非常難以閱讀,以至於沒有人想嘗試理解它。 但是,沒有辦法做到讓某人無法將其復制並粘貼到他們自己的網站上並在那里運行。 老實說,我不會擔心它,因為您會浪費時間試圖保護無法保護的東西。 如果可能,嘗試將所有“重要”邏輯放在服務器端,因為這是唯一萬無一失的方法。 如果瀏覽器可以訪問它,那么其他人也可以。

使用這個工具:Javascript Obfuscator https://javascriptobfuscator.com/Javascript-Obfuscator.aspx

我不認為你想要加密,除非你要編寫一個可以解密 javascript 的瀏覽器擴展。

我認為 GWT,甚至jsmin都可以充分壓縮/混淆您的 javascript 以供正常使用。

如果您想將一些客戶端代碼綁定到您的站點,您可能需要考慮某種隨機握手,該握手依賴於服務器端方法來“驗證”javascript。 我什至不知道這是否可行。

這正是 DRM:您為用戶提供了一把鎖和鑰匙,並希望能夠說出他們可以用它做什么。

理論上這是不可能的:如果他們的計算機可以執行代碼,那么它必須在那里未加密。

這實際上也是不可能的:看看每個人都在 Linux 機器上觀看 DVD,看看你能取得多大的成功。

最悠久的JavaScript混淆為2021 這里,是可以通過NPM。

對於許多聲稱不需要/不應該進行 javascript 混淆或不是一個好的做法的人來說,他們還沒有真正理解這個 repo 上的星星數量所反映的主題的市場動態。

obfuscator.io是一個很好的用戶界面,可以輕松使用它

對於許多聲稱不需要/不應該進行 javascript 混淆或不是一個好的做法的人來說,他們還沒有真正理解這個 repo 上的星星數量所反映的主題的市場動態。

唯一的選擇是運行邏輯服務器端。 如果您使用的是 django,則可以使用中間件,甚至可以使用 views.py 文件來運行邏輯。 客戶端將只接收 HTML。 正如人們所指出的,混淆對代碼可讀性的影響很小,因為有決心的人會讀出來。

您應該尋找一種 JavaScript 保護技術,該技術提供混淆以及允許您將代碼鎖定到某些域的環境檢查。 然后,您還可以添加額外的運行時保護,使某人更難對代碼進行逆向工程並嘗試解除這些保護。

查看來自 OWASP 的關於逆向工程和混淆的指南。 最好依靠這些經過同行評審的指南來避免對混淆和加密的任何誤解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM