丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
政企安全 正文
發(fā)私信給李勤
發(fā)送

0

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

本文作者: 李勤 2017-05-27 11:15 專題:雷峰網(wǎng)公開課
導(dǎo)語:本期,雷鋒網(wǎng)宅客頻道邀請到閻文斌做一期線上硬創(chuàng)公開課,聊聊Android原生保護殼的原理與實現(xiàn)、流行趨勢等。

曾有一個嚇人的數(shù)據(jù):高達 99.99 %的安卓手機存在安全漏洞!

在 2016 年的 XPwn 未來安全探索盛會上,一個黑客團隊對國內(nèi) 20 家銀行提供給消費者的、基于安卓系統(tǒng)的 20 個手機銀行 App 進行攻擊,發(fā)現(xiàn) 17 家銀行的 App 存在漏洞,消費者的手機一旦被黑,無論轉(zhuǎn)賬給“張三”還是“李四”,在輸入正確賬號與密碼的情況下,錢最終都會轉(zhuǎn)給“王五”。

只要你敢把自家的 App 拿出來,北京娜迦信息科技發(fā)展有限公司 CTO、國內(nèi)著名安全論壇“看雪學(xué)院”版主的閻文斌(玩命)就敢試一試,攻下你家看似嚴絲密合的“堡壘”。

閻文斌太了解 App 的薄弱地帶了,正因為太了解攻擊手段,所以他才想要研究如何給 App 穿上鎧甲,走向明槍暗箭的戰(zhàn)場 。

本期,雷鋒網(wǎng)宅客頻道邀請到閻文斌做一期線上硬創(chuàng)公開課,聊聊 Android 原生保護殼的原理與實現(xiàn)、流行趨勢等。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

嘉賓介紹

閻文斌,現(xiàn)任北京娜迦信息科技發(fā)展有限公司 CTO,同時身為國內(nèi)著名安全論壇“看雪學(xué)院”版主,有深厚的安全領(lǐng)域背景,長期研究計算機病毒與軟件保護技術(shù),并深耕密碼學(xué)研究領(lǐng)域。曾負責(zé)國家信息技術(shù)安全研究中心的多個網(wǎng)絡(luò)安全相關(guān)項目,參與多家政府網(wǎng)站的風(fēng)險評估工作。此外,閻文斌連續(xù)多年在XCon會議上進行安全演講。

以下是公開課總結(jié)文實錄+視頻,在不妨礙原意的表達上,雷鋒網(wǎng)編輯對該實錄略有整理和修訂:

我是北京娜迦信息的閻文斌,由于寫保護殼是個完整的過程,首先就是要對目標文件格式的熟悉程度,這次公開課只有90分鐘,我將大部分精力放到ELF文件結(jié)構(gòu)科普的方面。其實只要弄明白文件格式,寫保護殼是自然而然的一個過程。在課程中會講到一些文件結(jié)構(gòu)特性在保護中的利用。在課程中會結(jié)合娜迦產(chǎn)品的代碼一同講解。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

本節(jié)課一共有四個部分,第一,我介紹一下當前流行的Android原生程序保護技術(shù)。第二,精講一下ELF文件,ELF文件和實現(xiàn)保護殼有關(guān)。第三,Android系統(tǒng),就是Linux如何加載一個so的過程,這個部分直接放原代碼。第四,如何寫一個軟件保護殼,以我司產(chǎn)品為例。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

我們當前流行的原生保護的技術(shù)大致有三種:第一種,直接對SO進行一個加密,第二種,自定義加載器加載,第三種,軟件保護殼技術(shù)。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

第一種就是直接加密文件的基礎(chǔ)原理。很簡單,很粗暴,沒有什么技術(shù)含量,因為so文件是被dex文件通過load library之類的函數(shù)加載,所以直接對so文件加密后,把一些解密代碼和密鑰寫到dex。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

在這個地方對so進行解密,或者在其他地方都不限,只要在so加載之前,對它進行解密就行,實際上手法很多,最粗暴的就是直接寫到代理里,這是一種最省事,但是最無恥的做法。稍微有良心一點,也可以hook掉dlopen類型的函數(shù),即加載so類型的函數(shù),在其中做一些解密操作,這是比較有良心的做法。

直接對so文件進行加密,dex代理啟動后對so文件進行解密。這是一種粗暴并且?guī)в衅垓_性質(zhì)的保護方式。這種類型太容易實現(xiàn),沒有什么技術(shù)含量,但是現(xiàn)在很多廠商在用。

無論你是自己模擬一個加載器,把so加載起來,還是做一個so保護殼,這兩種方式都有技術(shù)成本,需要調(diào)試,很麻煩,但是上述那種沒良心的操作很簡單,但是它有一個好處——可以過檢測?,F(xiàn)在的檢測機構(gòu)對Android程序進行檢測時,專門有一項就是對so進行檢測,對so檢測,其實很難分辨加了殼還是未加殼,只有一些硬性的標準來匹配。

比如,一個ELF文件被加殼后,其實還是一個ELF文件,它可以直接被單獨調(diào)用,但是直接對文件加密之后,它不再是一個ELF文件,有一些自動保護系統(tǒng)、檢測系統(tǒng)會發(fā)現(xiàn)你是有ELF文件的,然后它就會報可以被反匯編程序,所以我覺得這是帶有欺騙性質(zhì)的。

第二種就是自定義加載器的技術(shù)原理,這是現(xiàn)在幾家做得不錯的保護加工廠商使用的一種通用方式,它比加殼的實現(xiàn)難度低,這種技術(shù)能達到一定保護強度,原理就是模擬ELF文件的格式的加載方式。這種被保護的so程序,換成自己程序識別的文件格式,可以把so的符號表、重定位表等組成so的ELF的自段碼都抽取出來,定義成自己的格式,只保留它的代碼段,保存成一個文件,也可以把文件加密。隨后hook掉dlopen和dlsym等函數(shù),因為要對這兩個函數(shù)做一些hook或者是劫持,無論是在哪一層做hook操作,做so都是JNI函數(shù),當dex調(diào)動反調(diào)JNI函數(shù)時,會調(diào)用java里的load libray,直接調(diào)用C語言的dlopen,然后又把dlopen做了,所以就在這個hook操作里,你會實現(xiàn)自己的加載操作,把自己的格式加載起來。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

另外,hook dlsym是因為當dex獲取歷程的,或者是有一些寫程序的人直接自己使用dlsym,自己dlopne自己的so,有一些這樣的實現(xiàn),所以必須hook到dlsym,因為它本身已經(jīng)不是一個ELF文件,所以需要實現(xiàn)一套自己尋找符號的這么一個流程,這是基本原理。這種原理實現(xiàn)起來簡單,因為Android是開源的,直接可以把它的Link扒出來,在上面進行修改,修改成什么都可以,然后包含到自己的程序里。

第三種技術(shù)就是軟件保護殼技術(shù),這種是比較正統(tǒng)的軟件保護技術(shù),很早就有。它的原理是:殼代碼像病毒一樣附著到文件上,并且加密文件代碼,修訂入口點,然后到保護殼時,優(yōu)先起動的就是保護殼代碼。程序起動后,首先跳入到保護殼程序中,這里你就可以做任何操作了,如:加解密操作,包括一些反調(diào)操作等,最后殼持續(xù)解密目標代碼,并且跳入到目標代碼中。它的基本原理是這樣,如果只做加解密操作,這種殼的保護強度還是很低。在Windows保護時代,就有很多很多很牛逼的殼,用了很多技術(shù),不光對殼本身做加解密操作,因為這個殼的引導(dǎo)段僅起到引導(dǎo)作用,但是其真正的保護代碼和目標代碼是混合到一起的。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

ELF文件是什么?

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

我們寫Android程序時,有兩部分,一部分是dex文件,一部分是so文件,dex文件本身就是用java寫的,就是把java代碼,編譯成Dalvik虛擬機的代碼,承載Dalvik虛擬機本身的這個東西,就是一個文件格式,是谷歌自己實現(xiàn)的,稱為dex。ELF文件就是用C寫的這部分,編譯出來是so文件,這部分遵從一個開放性協(xié)議的標準,這個標準就是ELF。它是一個工業(yè)標準,基本在所有poxis標準上都進行了實現(xiàn),只要是覆蓋這個標準的操作系統(tǒng),都用ELF作為API文件的接口,這就是ELF的介紹,如果你想寫一個軟件保護殼,必須對其結(jié)構(gòu)非常了解。

接著講ELF的文件格式。有六個章節(jié),第一,簡單介紹ELF,第二,整體結(jié)構(gòu)的介紹,第三,講一下頭,第四,節(jié)表的作用,第五,段表,第六,動態(tài)段。

我要用到這三個工具來工具來輔助,readelf的作用是對ELF文件格式進行解析,因為它是一個格式瀏覽器。objdump對目標進行反匯編 操作,hexdump對目標二進制代碼進行觀察。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

ELF的基本介紹摘自百度百科:在計算機科學(xué)中,是一種用于二進制文件、可執(zhí)行文件、目標代碼、共享庫和核心轉(zhuǎn)儲格式文件。是UNIX系統(tǒng)實驗室(USL)作為應(yīng)用程序二進制接口(Application Binary Interface,ABI)而開發(fā)和發(fā)布的,也是Linux的主要可執(zhí)行文件格式。  

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

那我們現(xiàn)在就做一些實驗(雷鋒網(wǎng)編者注:涉及到視頻演示,以下部分不做整理,讀者請結(jié)合PPT自行看視頻)。

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻


Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻


Android原生保護殼的原理與實現(xiàn) | 雷鋒網(wǎng)公開課總結(jié)文+視頻

直播視頻

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

分享:
相關(guān)文章

編輯、作者

跟蹤互聯(lián)網(wǎng)安全、黑客、極客。微信:qinqin0511。
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說