摘要:網(wǎng)易資深安全工程師鐘亞平在今年的安卓巴士全球開發(fā)者論壇上做了安卓逆向與保護的演講完整演講內(nèi)容請見這里一文了解安卓逆向分析與保護機制,其中就談到了關(guān)于代碼混淆的問題。就是一個混淆代碼的開源項目,能夠?qū)ψ止?jié)碼進行混淆縮減體積優(yōu)化等處理。
歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。
在大公司怎么做android代碼混淆的?發(fā)現(xiàn)他們的軟件用apktool反編譯居然沒看到classes.dex文件和當前安卓APP加固到底該如何做到防篡改?這兩個問題中有過相應(yīng)回答,現(xiàn)搬運要點過來。
網(wǎng)易資深安全工程師鐘亞平在今年的安卓巴士全球開發(fā)者論壇上做了《安卓APP逆向與保護》的演講(完整演講內(nèi)容請見這里:一文了解安卓APP逆向分析與保護機制),其中就談到了關(guān)于代碼混淆的問題。
Java代碼是非常容易反編譯的,為了很好地保護Java源代碼,開發(fā)者往往會對編譯好的class文件進行混淆處理。
混淆就是對發(fā)布出去的程序進行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能,而混淆后的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。ProGuard就是一個混淆代碼的開源項目,能夠?qū)ψ止?jié)碼進行混淆、縮減體積、優(yōu)化等處理。
Proguard處理流程圖如下所示,包含壓縮、優(yōu)化、混淆、預(yù)檢四個主要環(huán)節(jié):
<
壓縮(Shrink):檢測并移除代碼中無用的類、字段、方法和特性(Attribute);
優(yōu)化(Optimize):對字節(jié)碼進行優(yōu)化,移除無用的指令。優(yōu)化代碼,非入口節(jié)點類會加上private/static/final,沒有用到的參數(shù)會被刪除,一些方法可能會變成內(nèi)聯(lián)代碼;
混淆(Obfuscate):使用a、b、c、d這樣簡短而無意義的名稱,對類、字段和方法進行重命名;
預(yù)檢(Preveirfy):在Java平臺上對處理后的代碼進行預(yù)檢,確保加載的class文件是可執(zhí)行的。
利用Proguard,對Dex2jar進行反編譯處理后的Apk效果示例:
處理前
Proguard處理后
Proguard混淆器不僅能夠保護代碼,而且能夠精簡編譯后的程序大小,減少內(nèi)存占用。
混淆代碼逆向分析
如果想要反編譯混淆代碼,鐘亞平分享了一個國外的工具DEGUADR,它能夠通過統(tǒng)計的方式來解混淆。雖然這個工具的正確率達不到100%,但是能在一定程度上幫助反編譯代碼。
使用DEGUADR解混淆的示例:
com.xxxxx.common.util.CryptoUtil網(wǎng)站也提供了一種反編譯服務(wù),如下所示:
java.lang.String a(byte[]) -> encodeToString
java.lang.String a(byte[],boolean,java.lang.String) -> a
byte[] a(byte[],byte[]) -> encrypt
byte[] b(byte[]) -> getKey
byte[] b(byte[],byte[]) -> decrypt
byte[] d(java.lang.String) -> getKey
java.lang.String a(byte,char[]) -> a
java.lang.String a(java.io.File) -> getHash
java.lang.String a(java.lang.String) -> c
java.lang.String b(java.lang.String) -> encode
對 DEX 文件進行加殼防護仍然是需要的,我們可以選擇整體 DEX 加固或者拆分 DEX 加固的方式,隱藏源碼防止直接性的反編譯。拆分 DEX 加固需要注意 DEX 文件的數(shù)據(jù)結(jié)構(gòu),選取 classdata 和 classcode 這兩部分,即使拆分出來也不會泄露 class 數(shù)據(jù)和字節(jié)碼數(shù)據(jù),反編譯出來也不完整,安全性較高。尤其是虛擬機加固的方式,對字節(jié)做一些變化處理,即使把替換后的數(shù)據(jù)恢復(fù)了,也不會變形成為之前的字節(jié)碼,安全系數(shù)較高。
網(wǎng)易云 Android 應(yīng)用加固 免費試用,有效防止應(yīng)用被逆向分析、反編譯、二次打包,核心功能包括 DEX 加固,SO 加密保護,內(nèi)存防 Dump 保護,防調(diào)試器,防模擬器等。
文章來源: 網(wǎng)易云社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25293.html
摘要:接下來,我就來詳解一下如何防止被二次打包。開發(fā)階段移動應(yīng)用開發(fā)時接入安全組件,保護數(shù)據(jù)安全。 前言 Android APP二次打包則是盜版正規(guī)Android APP,破解后植入惡意代碼重新打包。不管從性能、用戶體驗、外觀它都跟正規(guī)APP一模一樣但是背后它確悄悄運行著可怕的程序,它會在不知不覺中浪費手機電量、流量,惡意扣費、偷窺隱私等等行為。 二次打包問題只是Android應(yīng)用安全風(fēng)險中...
摘要:為了防止這種現(xiàn)象,我們可以對字節(jié)碼進行混淆。動態(tài)鏈接庫是目標文件的集合,目標文件在動態(tài)鏈接庫中的組織方式是按照特殊方式形成的。 一、已知防護策略 1.不可或缺的混淆 Java 是一種跨平臺、解釋型語言,Java 源代碼編譯成的class文件中有大量包含語義的變量名、方法名的信息,很容易被反編譯為Java 源代碼。為了防止這種現(xiàn)象,我們可以對Java字節(jié)碼進行混淆?;煜粌H能將代碼中的類...
閱讀 1786·2023-04-26 01:41
閱讀 3085·2021-11-23 09:51
閱讀 2748·2021-10-09 09:43
閱讀 9063·2021-09-22 15:13
閱讀 2463·2021-09-07 09:59
閱讀 2636·2019-08-30 15:44
閱讀 1141·2019-08-30 12:45
閱讀 2628·2019-08-30 12:43