DEX加固與反編譯

編譯

將java代碼轉(zhuǎn)換為Dalvik字節(jié)碼
將res資源文件、AndroidManifest.xml等配置文件編譯為二進(jìn)制文件

反編譯

將DEX文件轉(zhuǎn)換為jar包或者Smali文件
將二進(jìn)制資源文件還原為資源源碼文件
工具:

1. ApkTool https://ibotpeaches.github.io/Apktool
  • 反編譯dex為smali文件
  • 反編譯資源文件
  • 支持重打包


    apktool示例
2. dex2jar https://github.com/pxb1988/dex2jar
dex2jar示例
3. jd-gui http://jd.benow.ca/

源碼閱讀工具


jd-gui示例

應(yīng)用安全與反編譯

1.Android應(yīng)用反編譯的威脅
  • 逆向分析:漏洞挖掘浮梢、協(xié)議分析
  • 二次打包:盜版滨嘱、破解
2.保護(hù)方案
  • 代碼混淆:java代碼痹兜、C/C++代碼、JS/HTML代碼
  • 應(yīng)用加固:DEX文件、SO文件、資源文件
3.應(yīng)用開發(fā)安全生態(tài)鏈
應(yīng)用開發(fā)安全生態(tài)鏈
  • 開發(fā)階段:代碼混淆豪治,接入安全類sdk
  • 測試審計階段:提交到審計平臺
  • 上架階段:進(jìn)行代碼加固
  • 運營階段:收集信息

DEX加固方案與原理

1. DEX加固方案演進(jìn)(文件級--方法級--指令級)
dex加固方案演進(jìn)
2. DEX內(nèi)存加載實現(xiàn)原理
  • 框架原理:
    Android加殼框架原理為:Proxy/Delegate Application,即使用自定義的代理Application類作為程序入口(修改AndroidManifest.xml)扯罐,在代理Application中完成殼的解密操作负拟,最后啟動原來的Application
  • ProxyApplication:框架會提供一個ProxyApplication抽象基類,使用者需要繼承這個類篮赢,并重載其initProxyApplication()方法齿椅,在其中改變surrounding,如替換ClassLoader等
  • DelegateApplication:即應(yīng)用原有的Application,應(yīng)用從getApplicationContext()等方法中取到的都是DelegateApplication
//old AndroidManifest.xml
<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name">

//new AndroidManifest.xml
<application
    android:name=".MyProxyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name">
public abstract class ProxyApplication extends Application{
    /**
     *  initProxyApplication實現(xiàn)內(nèi)容
     *  1.內(nèi)存加載DEX:加載原Application
     *  2. ClassLoader設(shè)置
     *  3. Application引用替換
    **/
    protected abstract void initProxyApplication();
    
    @Override
    protected void attachBaseContext(Context context){
        super.attachBaseContext(context);
        initProxyApplication();
    }
    //...
}
殼啟動流程
  • 內(nèi)存加載DEX文件:通過Dalvik六孵、ART虛擬機(jī)JNI接口內(nèi)存加載被加密隱藏的DEX文件
  • 設(shè)置ClassLoader:將DEX文件內(nèi)存加載產(chǎn)生的mCookie放入ClassLoader中(MutiDex)
  • 加載原Application:基于替換后的ClassLoader查找原始Application類并生成實例
  • Application還原:將換API層的所有Application引用替換為原始Application
殼啟動流程
DEX加固效果(內(nèi)存加載方案)
3. 加殼方案

https://github.com/AndyGu/ProtectApp

4. 如何制定某個類在main dex中贞铣?
  1. multiDexKeepFile:手動加入要放到Main.dex中的類
    com.umeng,analytics.Abb.class
  2. multiDexKeepProguard:以Proguard的方式手動加入要放到main.dex中的類
    -keep public class com.tencent.bugly.**{*};
知識點 面試體系
熟練掌握J(rèn)ava IO相關(guān)代碼 Java語言進(jìn)階 RandomAccessFile
深入研究Android apk的啟動流程 精通Android FrameWork層
精通Multidex文件加載機(jī)制,精通類加載機(jī)制 精通Android FrameWork層遣蚀,JVM,DVM ClassLoader
明確dex文件的基本構(gòu)造纱耻,了解dex文件相關(guān)源碼 精通Android FrameWork層dex
APK打包的基本流程需要理解 Gradle工具熟練
掌握C/C++語言及NDK開發(fā) 精通C/C++語言及NDK開發(fā)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芭梯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弄喘,更是在濱河造成了極大的恐慌玖喘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘑志,死亡現(xiàn)場離奇詭異累奈,居然都是意外死亡贬派,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門澎媒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搞乏,“玉大人,你說我怎么就攤上這事戒努∏攵兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵储玫,是天一觀的道長侍筛。 經(jīng)常有香客問我,道長缘缚,這世上最難降的妖魔是什么勾笆? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮桥滨,結(jié)果婚禮上窝爪,老公的妹妹穿的比我還像新娘。我一直安慰自己齐媒,他們只是感情好蒲每,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喻括,像睡著了一般邀杏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唬血,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天望蜡,我揣著相機(jī)與錄音,去河邊找鬼拷恨。 笑死脖律,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腕侄。 我是一名探鬼主播小泉,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冕杠!你這毒婦竟也來了微姊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤分预,失蹤者是張志新(化名)和其女友劉穎兢交,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼痹,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡配喳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年飘诗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片界逛。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纺座,靈堂內(nèi)的尸體忽然破棺而出息拜,到底是詐尸還是另有隱情,我是刑警寧澤净响,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布少欺,位于F島的核電站,受9級特大地震影響馋贤,放射性物質(zhì)發(fā)生泄漏赞别。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一配乓、第九天 我趴在偏房一處隱蔽的房頂上張望仿滔。 院中可真熱鬧,春花似錦犹芹、人聲如沸崎页。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飒焦。三九已至,卻和暖如春屿笼,著一層夾襖步出監(jiān)牢的瞬間牺荠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工驴一, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留休雌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓蛔趴,卻偏偏與公主長得像挑辆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孝情,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容