我需要儘可能最好地模糊我的源代碼,所以我決定使用uglifyjs2 ..現在我有了嵌套目錄的項目結構,我如何通過uglifyjs2運行它來完成整個項目,而不是將它全部輸入文件?在整個Node項目中使用UglifyJs?
如果精縮整個項目到單個文件或東西
我需要儘可能最好地模糊我的源代碼,所以我決定使用uglifyjs2 ..現在我有了嵌套目錄的項目結構,我如何通過uglifyjs2運行它來完成整個項目,而不是將它全部輸入文件?在整個Node項目中使用UglifyJs?
如果精縮整個項目到單個文件或東西
我已經做了非常相似,這一個項目,我工作的東西,我不會介意。你有兩個選擇:
留在自己的目錄結構中的文件。
這是迄今爲止最容易的選擇,但提供了一個低得多的混淆程度,因爲對代碼感興趣的人基本上擁有文件的邏輯組織的副本。
攻擊者可以簡單地漂亮地打印所有文件,並在每個文件中重命名混淆變量名稱,直到他們理解正在發生的事情。
爲此,請使用fs.readdir
和fs.stat
以遞歸方式遍歷文件夾,讀入每個.js文件並輸出損壞的代碼。
將所有東西編譯成一個JS文件。
這對您來說實施起來要困難得多,但卻讓攻擊者的生活變得更難,因爲他們不再有項目組織的好處。
您的主要問題是調用您的require
調用與不再存在的文件(因爲所有文件現在都在同一個文件中)。
我通過使用Uglify對require
進行分析AST來執行靜態分析我的源代碼。然後我加載了所需文件的源代碼並重復。
一旦所有的代碼加載,我更換了require
調用與調用自定義函數,以模仿how node's module system works功能包的每個文件的源代碼,然後錯位一切,它編譯成一個單一的文件。
我的自定義需求函數完成大部分節點的需求,除了不是在磁盤上搜索模塊,它搜索包裝函數。
不幸的是,我真的不能共享任何代碼#2,因爲它是一個專用的項目的一部分,但要點是:
UglifyJS.parse
的AST。使用TreeWalker
參觀AST的每個節點,並檢查是否
node instanceof UglifyJS.AST_Call && node.start.value == 'require'
正如我剛剛完成了一個巨大的純項目的NodeJS在80+的文件我有同樣的問題,因爲OP。我的努力工作至少需要一點保護,但NPMjs操作系統社區似乎還沒有涉及這個非常基本的需求。添加鹽傷JXCore包加密系統上週在幾個小時內破解,所以回混淆...
所以我創建了完整的解決方案,處理文件合併,uglifying。您可以選擇忽略指定的文件/文件夾以及合併。然後將這些文件複製到合併文件的新輸出位置,並將其引用重寫爲自動。
Github repo of of node-uglifier
PS:我會很高興,如果人們將有助於使其更好。這是一場小偷和像自己一樣努力工作的編程人員之間的戰爭。讓我們加入我們的力量,增加逆向工程的痛苦吧!
我有同樣的需要 - 爲此我創建了node-optimize
和grunt-node-optimize
。
任何人都知道這個問題是否有很好的解決方案? – puppeteer701
我不喜歡Gulp,它對我來說不那麼直觀。但是你應該能夠在一個gulp庫中包裝'node-optimize'。如果你這樣做 - 我會在'node-optimize'的自述文件中添加關於它的註釋。 –
這不是由uglifyjs2原生支持。
考慮使用webpack到整個應用程序打包成一個縮小的.js文件,但不包括node_modules
: http://jlongster.com/Backend-Apps-with-Webpack--Part-I
爲什麼不通過的所有文件寫一個shell腳本中循環,並打電話給你obfuscater每個? – WiredPrairie
@WiredPrairie我想把它們全部合併成一個文件。另外,混淆不同會破壞每個文件之間的引用,因爲文件名稱會發生變化 –
如果你想讓節點正常工作,你會怎麼做?把所有的文件放在一起了嗎? ('require('../ mylib/lib1')') – WiredPrairie