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