[Javascript] 程式碼保護

H5應用加固防破解-js虛擬機器保護方案淺談

https://www.cnblogs.com/2014asm/p/13733623.html


從0開始快速上手WebAssembly:打造基於WASM的高性能安全沙箱

https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247503499&idx=2&sn=bd4e7a4d556309d5526f32fa83c3d3d5&chksm=f9527bc8ce25f2de6625057eaad4879f2a53ca23810d93bb45a009f7de1765a7535f34f39317&scene=27#wechat_redirect


目前主流的方式是使JS代碼不可讀,增加攻擊者理解代碼功能複雜度,代碼變得難也閱讀,但攻擊者往往會進行動態跟蹤調試,通過逆向還原出原始代碼或分析出程式功能,因此隨著流覽器動態調試器的功能越來越完善,把代碼變得難也閱讀這些保護方法很難起到很好的保護效果。


目前另有將js源碼編譯生成自訂指令集並,通過實現一個虛擬機器來類比解釋執行自訂指令的方法防止被破解、篡改,將js源碼轉換成自訂的任意指令,將原本比較容易理解的代碼轉換成只能自己虛擬機器才能讀懂與執行的指令,這樣駭客無法通過直接反編譯該指令分析或修改代碼邏輯,而攻擊者需瞭解自訂指令細節,才能分析程式邏輯。如此一來,可避免了駭客直接通過獲取前端js代碼就能破解、篡改代碼邏輯,從而極大提升了js代碼的安全防破解能力。


但因為另外通過解釋器進行即時編譯運行,性能較差,故只能盡可能保護核心演算法模組,當使用者對應用體積敏感或是要求極高的執行效率時,代碼盡可能小可提高執行效率,盡量降低影響用戶體驗。


目前主要程式碼保護方式:

1.壓縮:

將腳本進行編碼,插入無用代碼,干擾顯示大量換行、注釋、字串等,運行時解碼再eval執行。

2.運行環境監測:

代碼自檢驗:計算某片斷代碼hash,運行時比較hash值是否相同來檢測代碼是否被篡改。

調試器檢測:檢測是否有調試特徵、控制台是否打開、檢測debugger指令是否執行。

3.字串混淆

去除盡可能多的有意義資訊,刪除注釋、空格、換行、冗餘符號,變數重命名。


目前主要程式碼保護套件:


360加固保H5加固

通過對JavaScript代碼進行混淆加密、壓縮等方式,保證H5的核心代碼無法被破解和查看,從而降低非法篡改、惡意利用的風險。


愛加密H5移動應用安全加固

控制流平坦化、垃圾指令注入、常量字串加密、常數加密、二元運算式加密、代碼壓縮、函數變數名混淆、禁止控制台輸出


頂像H5代碼混淆

H5代碼除了混淆加密之外,頂象還獨家提供H5介面Native化的保護,因H5代碼即使混淆之後仍有可能存在被破解的情況,所以對H5中重要的介面提供保護之外,還將原本JS或H5代碼Native為C/C++代碼,極大增大破解的難度。


jscrambler

jscrambler是國外一家JavaScript保護領域老牌的安全公司,產品主要功能:具有多態性混淆、代碼鎖定和自我防禦功能的Web和混合應用程式的彈性JavaScript保護。受保護的代碼極難進行反向工程,並防止調試/篡改嘗試。


jshaman

薩滿科技是國內最專注於Web前端安全的JS代碼保護團隊。


Js2x

JavaScript多態保護引擎、壓縮代碼、自我保護、平展控制流、多態、JS虛擬機器位元組碼技術。


SecurityWorker

SecurityWorker提供完全隱匿且相容ECMAScript 5.1的類WebWorker的安全可信環境,幫助保護你的核心Javascript代碼不被破解。


Google Closure Compiler [連結]


UglifyJS [連結]


jsfuck [連結]


aaencode [連結]


jjencode [連結]


JavaScript obfuscator [連結]



#程式碼, 保護


留言