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