原創(chuàng)|行業(yè)資訊|編輯:胡濤|2022-10-13 10:02:36.130|閱讀 379 次
概述:本文主要想你介紹代碼混淆的原理,常見(jiàn)代碼混淆方法,歡迎查閱~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
移動(dòng)應(yīng)用代碼安全非常重要,代碼逆向會(huì)導(dǎo)致代碼邏輯被獲取,進(jìn)一步導(dǎo)致控制流被hook,安全防線被破,給APP安全帶來(lái)巨大風(fēng)險(xiǎn),因此開(kāi)發(fā)者一般都會(huì)進(jìn)行代碼混淆保護(hù)。本文主要介紹了代碼混淆的原理、方法、以及常見(jiàn)代碼混淆的方式和工具。
代碼混淆是將計(jì)算機(jī)程序的代碼,轉(zhuǎn)換成功能上等價(jià),但是難于閱讀和理解形式的行為。混淆就是對(duì)發(fā)布出去的程序進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能,而混淆后的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語(yǔ)義,通過(guò)進(jìn)行代碼混淆可以有效提升應(yīng)用被逆向破解的難度。
字符串加密:對(duì)應(yīng)用程序中使用到的字符串進(jìn)行加密,防止通過(guò)IDA等工具獲取關(guān)鍵詞定位核心業(yè)務(wù)代碼;
類名、方法名混淆:將代碼中類名、方法名、屬性名替換為無(wú)意義符號(hào),增加代碼逆向難度;
程序結(jié)構(gòu)混淆加密:對(duì)應(yīng)用程序邏輯結(jié)構(gòu)進(jìn)行打亂混排,保證源碼可讀性降到最低。
常見(jiàn)的代碼混淆方式包括Java代碼混淆、C/C++代碼混淆以及h5 腳本混淆等。
(1)Java代碼混淆
Java代碼是比較容易反編譯,為了保護(hù)Java源代碼,開(kāi)發(fā)者通常會(huì)對(duì)編譯好的class文件進(jìn)行混淆處理。ProGuard就是一個(gè)混淆代碼的開(kāi)源項(xiàng)目,能夠?qū)ψ止?jié)碼進(jìn)行混淆、縮減體積、優(yōu)化等處理。
Proguard處理流程包含壓縮、優(yōu)化、混淆、預(yù)檢四個(gè)主要環(huán)節(jié),如下圖所示:
壓縮:檢測(cè)并移除代碼中無(wú)用的類、字段、方法和特性(Attribute);
優(yōu)化:對(duì)字節(jié)碼進(jìn)行優(yōu)化,移除無(wú)用的指令。優(yōu)化代碼,非入口節(jié)點(diǎn)類會(huì)加上private/static/final,沒(méi)有用到的參數(shù)會(huì)被刪除,一些方法可能會(huì)變成內(nèi)聯(lián)代碼;
混淆:使用a、b、c、d這樣簡(jiǎn)短而無(wú)意義的名稱,對(duì)類、字段和方法進(jìn)行重命名;
預(yù)檢:在Java平臺(tái)上對(duì)處理后的代碼進(jìn)行預(yù)檢,確保加載的class文件是可執(zhí)行的。
Java代碼混淆,針對(duì)一些逆向的IDE環(huán)境是有一定效果的,可以考慮做一些中文混淆,這個(gè)很容易實(shí)現(xiàn)且有效果。混淆前后效果如下圖:
(2)C/C++代碼混淆
下圖為C++代碼的混淆,保護(hù)之后控制流大幅度偽造,逆向難度非常高。當(dāng)然控制流偽造也會(huì)影響運(yùn)營(yíng)效率,所以一般也只是對(duì)核心的一些功能做保護(hù)。
混淆的過(guò)程中添加的一些字串的保護(hù)如下圖:
介紹一個(gè)c/c++代碼混淆工具,逆向?qū)估?器—LLVM。LLVM不僅僅提供混淆實(shí)現(xiàn),通過(guò)多重Optimize(優(yōu)化器),實(shí)現(xiàn)多種效果,例如代碼控制流扁平化、虛假控制流、字符串加密、符號(hào)混淆、指令替換等。
(3)H5 腳本混淆
H5混淆是指從JS的語(yǔ)法和邏輯上進(jìn)行混淆。H5腳本混淆很多的IDE環(huán)境均可配置,這里我不做詳細(xì)介紹。H5腳本混淆主要提供字符串加密、混淆、去log、變量名處理、壓縮、函數(shù)名處理、平臺(tái)識(shí)別、防篡改等功能。保護(hù)前后區(qū)別如下:
代碼混淆可以提升逆向分析的難度,但是并不能從跟不上解決逆向破解的問(wèn)題。開(kāi)發(fā)者可以對(duì)應(yīng)用進(jìn)行代碼混淆,同時(shí)配合移動(dòng)應(yīng)用加固,以提升應(yīng)用的安全等級(jí)。
注:文章來(lái)源于網(wǎng)上采集整理,如有侵權(quán),請(qǐng)聯(lián)系我們核實(shí)修改。
歡迎體驗(yàn)更多加密解密相關(guān)軟件或者加入我們技術(shù)交流群(766135708)
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn