原創|其它|編輯:陳津勇|2019-11-27 15:03:10.177|閱讀 1041 次
概述:可信Web系統離不開可信的前端環境,所以Java混淆在對抗黑客的過程中是必不可少的,這就是第二代Java代碼混淆器Allatori Java obfuscator存在并廣泛應用的原因。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在可信系統中,TPM的一個重要作用就是鑒別消息來源的真實性,保障終端的可信。而在Web系統中,我們的消息來源就是用戶。隨著撞庫、惡意注冊、薅羊毛等產業的蓬勃發展,在越來越多的場景中我們需要鑒別請求數據是否來自真實的用戶,保護真實用戶的數據安全。
所以想要構造一個Web系統中的TPM,首要問題就是需要保證輸入數據安全,打造一個相對可信的前端環境。但是由于Web的開放特性,前端作為數據采集的最前線,js代碼始終暴露在外,在這種情況下,防止惡意偽造請求變得非常困難,可信前端也就成了無稽之談。
在反復對抗中,代碼保護也就是通常意義上的Java代碼混淆的重要性逐漸彰顯出來。今天,小編就想和大家聊一聊Java混淆的問題。
為什么需要Java混淆
顯而易見,是為了保護前端代碼邏輯。
在Web系統發展早期,js在Web系統中承擔的職責并不多,只是簡單的提交表單,js文件非常簡單,也不需要任何的保護。但隨著js文件體積的增大,為了縮小js體積,加快http傳輸速度,開始出現了很多對js的壓縮工具,比如uglify、compressor、clouser……它們的工作主要是:
合并多個js文件
去除js代碼里面的空格和換行
壓縮js里面的變量名
剔除掉注釋
下圖是壓縮后的代碼:
雖然壓縮工具出發點都是為了減少js文件的體積,但是人們發現壓縮替換后的代碼比源代碼可讀性差了很多,間接起到了代碼保護的作用,于是壓縮js文件成為了前端發布的標配之一。
但是后來市面上主流瀏覽器Chrome、Firefox等都提供了js格式化的功能,能夠很快的把壓縮后的js美化,再加上現代瀏覽器強大的debug功能,單純壓縮過的js代碼對于真正懷有惡意的人,已經不能起到很好的防御工作,出現了"防君子不防小人"的尷尬局面。
chrome開發者工具格式化之后的代碼:
而在Web應用越來越豐富的今天,伴隨著瀏覽器性能和網速的提高,js承載了更多的工作,不少后端邏輯都在向前端轉移,與此同時也讓更多不法分子有機可乘。在Web模型中,js往往是不法分子的第一個突破口。知曉了前端邏輯,不法分子可以模擬成一個正常的用戶來實施自己的惡意行為。所以,在很多登錄、注冊、支付、交易等頁面中,關鍵業務和風控系統依賴的js都不希望被人輕易的破解,Java混淆應運而生。
Java混淆是不是紙老虎
這是一個老生常談的問題。實際上,代碼混淆早就不是一個新鮮的名詞,在桌面軟件時代,大多數軟件都會進行代碼混淆、加殼等手段來保護自己的代碼。Java和.NET都有對應的混淆器。黑客們對這個當然也不陌生,許多病毒程序為了反查殺,也會進行高度的混淆。只不過由于js是動態腳本語言,在http中傳輸的就是源代碼,逆向起來要比打包編譯后的軟件簡單很多,很多人因此覺得混淆是多此一舉。
.NET混淆器dotFuscator:
其實正是因為js傳輸的就是源代碼,我們才需要進行混淆。因為暴露在外的代碼沒有絕對的安全,但是在對抗中,精心設計的混淆代碼能夠給破壞者帶來不小的麻煩,也能夠為防守者爭取更多的時間。相對于破解來說,混淆器規則的更替成本要小得多,在高強度的攻防中,可以大大增加破解者的工作量,起到防御作用。從這個角度來講,關鍵代碼進行混淆是必不可少的步驟。
第二代Java代碼混淆器Allatori Java obfuscator
現在,Java混淆經過多年升級迭代,大批第二代Java代碼混淆器被推向世界,Allatori Java obfuscator也是其中之一。
與其他第二代Java代碼混淆器相比,Allatori除保護功能之外,還附加了一系列的功能(如命名混淆、流程混淆、調試信息混淆、增量混淆、J2ME混淆、Android混淆、字符串加密、防止反編譯、堆棧追蹤、代碼優化、水印等),幾乎可以抵御一切的代碼攻擊。并且,Allatori可以讓程序體積更小,速度更快,因此在世界范圍的應用都很廣泛。
免費下載Allatori Java obfuscator正式版>>>
慧都16周年·技術服務月,軟件商城優惠券不限量發放,購Allatori立省429元>>>
混淆對性能的影響
由于增加了廢代碼,改變了原有的AST,混淆對性能肯定會造成一定的影響,但是我們可以通過規則來控制影響的大小:
減少循環混淆,循環太多會直接影響代碼執行效率。
避免過多的字符串拼接,因為字符串拼接在低版本IE下面會有性能問題。
控制代碼體積,在插入廢代碼時應該控制插入比例,文件過大會給網絡請求和代碼執行都帶來壓力。
通過一定的規則完全可以把性能影響控制在一個合理的范圍內。實際上,有一些混淆規則反而會加快代碼的執行,比如變量名和屬性名的壓縮混淆,會減小文件體積,對全局變量的復制會減少作用域的查找等等。在現代瀏覽器中,混淆對代碼的影響越來越小,我們只需要注意合理的混淆規則,完全可以放心地使用混淆。
混淆的安全性
混淆的目的是保護代碼,但是如果因為混淆影響了正常功能就舍本逐末了。
由于混淆后的AST已經和原AST完全不同,但是混淆后的文件和原文件執行結果必須一樣,如何保證既兼顧了混淆強度,又不破壞代碼執行呢?高覆蓋的測試必不可少:
對自己的混淆器寫詳盡的單元測試。
對混淆的目標代碼做高覆蓋的功能測試,保證混淆前后代碼執行結果完全一樣。
多樣本測試,可以混淆單元測試已經完備了的類庫,比如混淆 Jquery 、AngularJS等,然后拿混淆后的代碼去跑它們的單元測試,保證和混淆前執行結果完全一樣。
通過以上分析可以知道,可信Web系統離不開可信的前端環境,所以Java混淆在對抗黑客的過程中是必不可少的。同時,通過一些規則,混淆器對性能的影響也是可控的。
慧都16周年·技術服務月,購正版Allatori Java obfuscator立省429元>>>
更多Allatori Java obfuscator資源,請點擊了解
掃描關注“慧聚IT”微信公眾號,及時獲取最新動態及最新資訊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn