亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

LBE安全大師張勇:軟件加固技術(shù)淺析

  9月12日,烏云安全峰會今日召開。來自LBE安全大師創(chuàng)始人兼CEO張勇帶來了《軟件加固技術(shù)淺析》演講!以下是他的演講全文:

  非常感謝利用這樣的機(jī)會能夠在這樣的會場跟大家來分享一些在移動應(yīng)用安全相關(guān)的議題。我自我介紹一下,我是張勇,我是LBE安全大師的早期開發(fā)者,也是創(chuàng)始人之一,可能我現(xiàn)在掛著CEO名頭,但是我還是一個純粹的工程師,也是一個技術(shù)愛好者。

  關(guān)于這個主題其實(shí)也是有些小的故事的,在一個月以前,烏云當(dāng)時找到我們,希望我們能夠做一個相關(guān)的演講。我們就很快的想到這樣一個話題,是因?yàn)槲覀儗@個很感興趣。半個月前我完成了大綱,大家看后覺得太水了,所以說在一周以前我就推倒重寫了,我寫的主題是單子上面的主題,前天晚上討論之后覺得還是太水了,所以覺得干脆再推倒一次,就是再重寫一份,熬了兩夜,給大家?guī)磉@樣的主題,就是主流移動應(yīng)用加固產(chǎn)品攻防分析。

  這個議題包含兩部分:第一,我們跟大家簡單介紹一下移動應(yīng)用加固用戶的需求,以及主流移動應(yīng)用加固的方案和實(shí)現(xiàn)的核心細(xì)節(jié)。第二部分,我會列舉市面上五款非常流行的應(yīng)用加固的產(chǎn)品,來分析它加固的原理和它實(shí)現(xiàn)的方法。

  同時我也會給出這五款產(chǎn)品如何對其進(jìn)行破解和脫殼的核心的要點(diǎn)。我希望通過這樣的PPT一方面讓大家對移動應(yīng)用加固有些更深的了解,另一方面,我也希望能夠幫助一些,或者能夠?yàn)橐恍┰谶@個領(lǐng)域內(nèi)進(jìn)行研究的安全工作者帶來一些資訊和一些信息。

  為什么需要應(yīng)用加固?這個問題很簡單,在PC上就有,從發(fā)展了很多代,在安卓上面從2013年被大家提及,2014年成為非常熱的熱點(diǎn)。應(yīng)用加固如此火熱的原因有如下幾點(diǎn):首先,安全平臺的應(yīng)用核心代碼都是以JAVA書寫的,我們知道它很容易被反匯編的。

  即便大部分開發(fā)者都對原碼進(jìn)行混淆,但是核心邏輯是可以通過一些函用關(guān)系看出來的。無論是登錄也好,驗(yàn)證也好,有經(jīng)驗(yàn)的工程師還是可以根據(jù)調(diào)用的關(guān)系來找到你的程序里面的核心的點(diǎn),然后對它進(jìn)行破解和修改。

  第二,安卓是一個開放的系統(tǒng),如果我沒記錯的話,安卓平臺逆向工具應(yīng)該是1.5時代,也就是三四年前已經(jīng)發(fā)展,到現(xiàn)在非常非常成熟。

  第三,為什么需要用加固?因?yàn)榘沧科脚_淡化了進(jìn)程的概念,應(yīng)用是基于消息和事件來運(yùn)行的,基于這樣的情況,惡意代碼的植入變得非常容易,想在PC時代植入代碼,要對原有的代碼進(jìn)行反匯編,然后插入你的入口點(diǎn)。

  在安卓根本不用動到原碼,只需要在清單文件,增加一些事件的響應(yīng),像開機(jī)自啟動,然后你在你的惡意代碼中去接收這些事件響應(yīng)就可以實(shí)現(xiàn)基本的注入。

  最后,安卓平臺,我相信特別是在國內(nèi),安卓平臺大約有30%的安卓手續(xù)已經(jīng)獲得入權(quán)限,在這個情況下無論通過APPI或者修改值,都很容易實(shí)現(xiàn)注入。實(shí)現(xiàn)這樣注入話,這樣的功能也就在一方面惡化了安卓軟件的生態(tài)的安全。

  正是有這樣的原因,市場上包括開發(fā)者都對于應(yīng)用加固,都希望能有這樣的一些產(chǎn)品來保證自己的軟件不會被輕易地重打包,不會被輕易地注入,也不會被輕易地破解,正是有了這樣的原因,才有了現(xiàn)在非常火熱的應(yīng)用加固市場。

  我在國內(nèi)選了五個比較主流的應(yīng)用加固供應(yīng)商。基本上目前國內(nèi)主流的加固供應(yīng)上有以下功能:防止惡意篡改,防止內(nèi)存竊取,防止調(diào)試。而且目前的做法通常是用戶上傳一份已經(jīng)修改好的APK,然后重打包,反饋給用戶的是已經(jīng)加固過的APK,這套流程背后技術(shù)的原理和技術(shù)的要點(diǎn)主要有哪些呢?

  最主要的就是所謂的加殼技術(shù),可PC不太相同的地方是,安卓應(yīng)用的核心部分代碼是JAVA語言書寫的,針對很多DX這樣的加殼技術(shù)應(yīng)運(yùn)而生了,在目前三種比較主流的加殼技術(shù):

  第一,對DX完整的加密。這種加密技術(shù)會在加固的時候?qū)X文件給完整做一次加密,然后保存在APK中,同時用加固方案商動態(tài)聲明來代替掉原始的。在應(yīng)用啟動的時候,加固的脫殼代碼就會自動運(yùn)行起來,它會對已經(jīng)加密的進(jìn)行脫殼并且加載到系統(tǒng)中,同時它還會修改一些東西來運(yùn)行組件。

  隨著攻防的增加,第二種方案也開始出現(xiàn),我稱為自節(jié)碼變形方案。它的原理其實(shí)也非常顯而易見,它在運(yùn)行時修改文件,使得你從記憶 Dump中盜取的文件是不合法或者不完整,你無法對它進(jìn)行重新分析和重打包。目前我們看到的像騰訊、360的加固主要采用這樣的方案。

  還有一種就是綜合了加密和變形的兩種的方案,就是百度應(yīng)用加固方案,這些加固方案它的具體的實(shí)踐原理和細(xì)節(jié)我會在后面的PPT中詳細(xì)介紹。

  除了DX加密之外,我們知道APX還有很多東西,像我們寫的動態(tài)庫,還有像資源文件,包括像很多加密方案商提供的防止動態(tài)調(diào)試,防止侏儒的功能,這些功能把很多加密方案也都有(卡爾)。

  資源文件的防護(hù)通常針對APK中兩個比較特殊的目錄,一個是RES目錄,還有ACS目錄,進(jìn)行保護(hù),像音頻、視頻,還有圖片及其他資源進(jìn)行加密保存,然后殼代碼通常會去確保這些資源在應(yīng)用讀取之前被解密,這個過程是透明的,所以對應(yīng)用不需要做額外的工作。

  但是這樣的做法可能會有一些問題。首先,跨應(yīng)用間跨進(jìn)程可能會失敗,影響性能,還有反二次打包,加固時記錄APK內(nèi)容Hash,運(yùn)行時由殼進(jìn)行檢驗(yàn)。還有反Ptrace,防止注入,多進(jìn)程相互Ptrace,還有一些廠商采用另外一個方法,就是在運(yùn)行時不斷地輪巡。

  安卓是多進(jìn)程系統(tǒng),你無法保護(hù)所有的線程,即便保護(hù)了一些線程,其他線程也會被傳上去,這樣的話都不會很完全。所有安卓的進(jìn)程都是通過一個叫做Zygote進(jìn)程報出來的,對于注入者而言或者調(diào)試者而言,他根本不需要在你進(jìn)程運(yùn)行的時候才Tress,像很多安全軟件,像360、騰訊,所謂的超強(qiáng)模式,主動防御其實(shí)都是基于這樣的技術(shù)。

  換句話說,安全軟件可以這么做,惡意軟件也好,修改器它們也是可以采用同樣的做法。所以說反Tress基本上沒有任何功能,從現(xiàn)實(shí)中來講。

  其實(shí)在剛才我列舉的這些功能中,最為核心的一點(diǎn)就是Classes Dex加密方案的實(shí)現(xiàn)。首先,我想跟大家先介紹一下最標(biāo)準(zhǔn)的Classes Dex整包加密的思路,這個思路也是目前最為成熟和眾多產(chǎn)品都應(yīng)用的方式。

  這樣的方式其實(shí)會分兩步運(yùn)行,首先在加固的時候,當(dāng)把APK傳到服務(wù)器時會解析APK,它會動態(tài)地生成一個新的Classes Dex,來代替原先的,原始的會放在其他目錄下面。

  當(dāng)程序運(yùn)行的時候,因?yàn)樵诩庸踢^程中殼已經(jīng)替換掉了程序入口點(diǎn),當(dāng)運(yùn)行的時候,殼代碼首先運(yùn)行起來,在幾個函數(shù)中它會調(diào)起脫殼代碼,通常是用C來寫的,來進(jìn)行脫殼操作。

  在脫殼操作中會做這樣的事情,首先它會把DEX文件加入到內(nèi)存中,通過一些手段在MAX中看不見,這樣可以避免一些非常簡單的方法來定位到你脫殼后的Classes Dex下的DEX的內(nèi)存中的地址。

  第二,我們知道安卓平臺有四大組件,這些組件它和PC是不一樣的,安卓平臺做應(yīng)用你是無法真正控制你的代碼是什么時候運(yùn)行的,是系統(tǒng)認(rèn)為你需要你運(yùn)行的時候,系統(tǒng)會把你啟動起來。

  換句話說,系統(tǒng)負(fù)責(zé)來啟動你的代碼,但是在通常情況下,系統(tǒng)會假設(shè)所有代碼都存在標(biāo)準(zhǔn)的Classes Dex文件中,但是在加固中你的代碼已經(jīng)挪到了另外一個包中,已經(jīng)不在原始的里,如果試圖構(gòu)建你這些組件的時候不能實(shí)現(xiàn),所以為了避免這個問題,所有的加固方案會去修改Classes Older,來確保系統(tǒng)構(gòu)造組件的時候成功找到組件。

  第二,它還會確保標(biāo)準(zhǔn)正常運(yùn)作,在執(zhí)行完這些操作的話,最后一步會做簽名驗(yàn)證,然后才會真正調(diào)起目標(biāo)進(jìn)程的對象,并且對它進(jìn)行初始化,最后完成脫殼操作話就會重新交給操作系統(tǒng)。對這樣的方案有沒有可殼的可能性呢?當(dāng)然是肯定的。

  因?yàn)槲覀冎腊沧靠隙ú粫С秩魏蔚募用埽蛘呷魏巫冏止?jié)解碼的,它只能接受也只能運(yùn)行標(biāo)準(zhǔn)的解碼。換句話說,任何基于Classes Dex整包加密的方案在程序運(yùn)行之前必然會在內(nèi)存中對字解碼進(jìn)行解碼,然后才輸入虛擬機(jī)中運(yùn)行。

  另外一個事實(shí),因?yàn)镃lasses Dex非常的大,所以虛擬機(jī)會通常傾向采用記憶Dump方法來加載速度。并且Classes Dex也類似ERS,也類似PE,所以基于這樣的一些方案,就以下的一些脫殼的方案,最基礎(chǔ)的方法就是去查看MAX文件,從中找到Classes Dex的地址。

  去年的年底的時候,當(dāng)時的加入方案還非常的初級,我記得有好幾家,名勝比較響亮的加密應(yīng)用,可以直接看到解密后的Dex的地址,你可以把它CAP出來,就可以解密了,所以當(dāng)時等于形同虛設(shè)。

  隨著技術(shù)的發(fā)展,現(xiàn)在的加固方案商都會采取一些手段來保護(hù),比如從內(nèi)存中直接加內(nèi)存解碼,或者在加載之后通過MAX調(diào)用,把文件映射給轉(zhuǎn)化為文件共供血量的過程,在MAX中看不見文件映射的信息,很難找到MAX。

  即使做到這樣還是有機(jī)可乘的,第一,通常MAX文件比較大,需要連續(xù)的文件,所以在MAX中是能夠找到一些蛛絲馬跡的。其次,因?yàn)樵诩虞dDEX文件的時候會采取MAX方法,這決定了它是是和頁對齊的,所以我們可以變異MAX的表象,讀取它的每一個表象開頭的四字節(jié),判斷它是否是MAX字位,如果是那它就是MAX,現(xiàn)在在網(wǎng)上也有類似的代碼做這個事情。

  今年五月份的時候,應(yīng)該是百度的安全實(shí)驗(yàn)室的一個工程師,他做了一個項(xiàng)目,他可以實(shí)現(xiàn)包括對于不少通用加固方案的脫殼工作,這也是一種方案,以及我今天跟大家介紹的,如何通過反射的方法來獲取DEX的方案。

  下面我介紹一下五款常用加固產(chǎn)品的原理和脫殼的方法。

  首先是這個行業(yè)的創(chuàng)始人在國內(nèi),就是梆梆加固,它應(yīng)該是這個行業(yè)最早的倡導(dǎo)者,我相信它也有最多的用戶量。針對梆梆的加固我準(zhǔn)備了兩個案例,第一個,就是梆梆的企業(yè)級用戶,就是國美在線,第二個,就是我自己的一個上傳的產(chǎn)品進(jìn)行了加密。

  梆梆實(shí)際上對企業(yè)用戶和免費(fèi)用戶的提供的防護(hù)級別不同的,我稍候會向大家解釋。目前,梆梆的代碼是支持X86平臺。對梆梆的分析過程中我發(fā)現(xiàn)一些問題,首先就是stub classes并非必須。

  第二,梆梆為了支持Art,在內(nèi)部裝了一個東西,這個文件是來自于安卓4.4的。對于梆梆這樣的產(chǎn)品,對它如何能夠?qū)崿F(xiàn)脫殼包括解密操作呢?我們知道企業(yè)版本和免費(fèi)用戶版本是有區(qū)別的。

  對于企業(yè)版本梆梆使用了內(nèi)存加DEX方法。被梆梆加固的應(yīng)用沒有做所謂的DEX OPX操作的,這樣的話會導(dǎo)致一些程序加固后的行為有差異,或者性能變差。

  這時企業(yè)版本,做了更多的防護(hù),對于公開版本而言的話,梆梆使用了標(biāo)準(zhǔn)的開放方式,從文件中下載的方式,同時也沒有將DEX下載地址往后,就是繞可四字節(jié)的方式,使用公開版本加固過后的產(chǎn)品,是可以通過MAX的方式找到加固后的代碼。

  另外,對梆梆分析過程中我們發(fā)現(xiàn)對應(yīng)用的修改比較多,比如它會同時啟動三個進(jìn)程,相互之間tress,其實(shí)這是一個偽命題,所以我個人建議這個功能可以砍掉。

  同時梆梆會在運(yùn)行過程中會發(fā)送一些特殊的kust,這樣會降低代碼的可靠性。同時脫殼后的話,梆梆在加殼時在原始的文件中也插入了相應(yīng)的代碼,這個在脫殼中都要移除。

  第二,基于Classes Dex加固方案是來自于愛加密。它的做法和梆梆大同小異,原始的Classes Dex會被加密后放在assets下。它的方案相對而言可能更加成熟一些,但是跟梆梆比也有劣勢,它是不支持安卓L的,只支持ARM平臺。

  愛加密相對于梆梆在自我調(diào)控方面做了比較多的工作,在公開的版本,它在下載Dex時用了四個方法,在MAX中看不到任何痕跡的,一些關(guān)鍵的指針被它替換成錯誤的指針,這樣的話使用標(biāo)準(zhǔn)的脫殼工具是很難對其直接進(jìn)行脫殼的。如何來解決脫殼問題呢?

  其實(shí)有一個辦法,首先目標(biāo)用戶中選擇隨意的MAX方法,將其傳遞給GNI,獲得內(nèi)部的一個MAS對象,MAS有一個指針的地址,這個文件就在它所在的區(qū)域中,然后在PROMAX中尋找這個地址的頁表象,然后真正的DEX就藏在這個地址中,然后用這個地址尋找起始,就能找到DEX,我們測試結(jié)果也是跟梆梆一樣,使用了將DEX地址從4K對齊位向后偏移8個字節(jié),這樣就很好地避開那個。

  第三個產(chǎn)品就是360?,F(xiàn)在360應(yīng)用中心推出了一款加固寶產(chǎn)品,它也是和梆梆、愛加密一樣,是基于Classes Dex加固的這樣一款產(chǎn)品,實(shí)驗(yàn)原理都是非常接近的。

  我們在對比的時候,發(fā)現(xiàn)我們將360加固解包后和原始的APK有些須的差異,我們認(rèn)為這是360對APK做了一些所謂的性能優(yōu)化,包括像構(gòu)造函數(shù)優(yōu)化等等,這些都是在標(biāo)準(zhǔn)的ODS做的優(yōu)化。360目前是支持X86,也能在安卓上運(yùn)行。

  上面就是最傳統(tǒng)的Classes Dex加密方法的案例和分析,下面我想跟大家介紹的是基于字節(jié)碼變形的實(shí)現(xiàn),會更加有趣一些,這些方案的出現(xiàn),其實(shí)它們?yōu)榱私鉀Q一個問題,就是我剛才跟大家介紹的,對于任何Classes Dex加密的產(chǎn)品,一旦找到了地址之后,所有的加密都無所遁形,你可以輕易地下載出來,對它為所欲為。這就有了字節(jié)碼變形加密方案,它本身是一個執(zhí)行機(jī)密的腳本。

  換句話說,虛擬機(jī)只要完成了對這個文件的加載,文件中很多部分的格式也好,數(shù)據(jù)也好,所以它只需要將這些格式破壞掉,記憶中下載不出來的Classes文件是非法文件,失效文件。為了實(shí)現(xiàn)這樣的目的目前有兩種方案:第一,在加固的時候,首先去蘊(yùn)藏一些DEX中一些關(guān)鍵的代碼,然后在加載的時候再由程序修復(fù)。

  因?yàn)樾迯?fù)的過程不是發(fā)生在文件本身,即便我們輕易找到了DEX的加載地址,下載后還是不可執(zhí)行的文件。我們有兩個方法,一個,是加密的時候把JAVA的方法改成Lunix方法,將字節(jié)碼進(jìn)行隱藏,在運(yùn)行的時候再將字節(jié)碼恢復(fù),這個是騰訊采用的方法。

  第二,在加固的時候把DEX的BAD COAD改了,放在其他地方,這個方法是360的方法。第二種方案,在DEX加載后破壞內(nèi)存中DEX鏡像關(guān)鍵結(jié)構(gòu)體,使得你下載出來的結(jié)構(gòu)無法被靜態(tài)分析工具或者其他工具來分析,包括像DEX,這個方法是目前百度采用的方法。

  如何對其進(jìn)行脫殼呢?首先單純的記憶DUMP是無效的,單純的對其脫殼的話,是對破壞的一方進(jìn)行修復(fù),對DEX TEDER在運(yùn)行的時候?qū)⑵淦茐闹翟谏院蛴?jì)算出來的。對于像某些支持ARK的方案,還有比較獨(dú)特的方案,就是劫持系統(tǒng)的DEX的 OAT,這樣把原始的偷出來。

  第二種,像騰訊和360對MAX進(jìn)行處理,來隱藏其字節(jié)碼方案,也有對應(yīng)的方法,就是修復(fù)MAX。

  下面我想跟大家分享一下我們對市面幾款使用變形技術(shù)的加固產(chǎn)品的技術(shù)細(xì)節(jié)的分析。首先,就是騰訊,騰訊的加固產(chǎn)品應(yīng)該說是,我個人認(rèn)為是最別出心裁的,對于其他家的加固產(chǎn)品,通常是對應(yīng)一個PK上去,加固一個回傳過來,但是在騰訊中需要填寫需要加固的函數(shù)名,為什么會有這樣的情況,這跟它的做法是直接相關(guān)的。

  因?yàn)轵v訊的應(yīng)用加固方案在加固的時候會將真正的函數(shù)的類型從JAVA函數(shù)改為linux函數(shù),將關(guān)鍵的結(jié)構(gòu)體給清空,讓靜態(tài)分析工具認(rèn)為這個函數(shù)是沒有任何字節(jié)碼的,就可以跳過,對于未加固的函數(shù)沒有任何變化。

  我們注意到騰訊的加固其實(shí)并沒有真正把字節(jié)碼藏起來,給放到其他地方,字節(jié)碼其實(shí)還在這個DEX文件中,只不過它修改了函數(shù)到字節(jié)碼的指針,讓靜態(tài)分析工具和虛擬機(jī)認(rèn)為這個函數(shù)是不需要字節(jié)碼的,解密的時候也是同樣的做法,找到函數(shù)和字節(jié)碼的對應(yīng),恢復(fù)就好了。

  這個是打開了一個騰訊應(yīng)用加固方案后的,一個被加密的偽函數(shù),這個函數(shù)里設(shè)置了AK了,它的代碼屬性被設(shè)成NO,就是沒有代碼。我們打開DEX文件本身,我們發(fā)現(xiàn)字節(jié)碼還保存著,只是你們不知道如何將它和函數(shù)利用起來。

  這個方案其實(shí)非常的有開創(chuàng)性,我個人覺得非常贊,但是最大的問題在于,由于ART原理,這個不可能支持ART的,因?yàn)樵贏RT運(yùn)行中,因?yàn)锳RT運(yùn)行環(huán)境首先將DEX文件編譯成本地代碼,然后在這個過程中它生成的并非是DEX,而是ELF格式的一個本級代碼,騰訊這種做法不可能在ART環(huán)境下,在運(yùn)行時重新將這個函數(shù)指向另外一個地方,所以目前騰訊的方案仍然是完全不支持ART的,我覺得未來這個方案可能也無法支持ART。

  解密其實(shí)非常簡單,使用DVL的函數(shù)蓋到MASCOAD的地址,計(jì)算出這個偏移量,然后就可以修復(fù)這個函數(shù)的類型。所以我個人認(rèn)為這個方案是非常巧妙的。當(dāng)然就像我PPT中寫的,這個字節(jié)碼是無法保存的,安全感會比較差一些。

  最后一個方案,也就是最近剛剛百度發(fā)布的一個混合的方案。百度的方案是混合了Classes Dex加固以及Classes Dex字節(jié)碼變形的兩種方式的一個方案,應(yīng)該說在目前是最為完善的。

  百度的方案對于DEX加固這塊,它和360,和梆梆和愛加密是完全相同的,也并無太多新意。但是另外一邊,它是如何來隱藏DEX的內(nèi)容呢?

  當(dāng)使用百度加固方案后,它會將很重要的DEX的頭的重要的位置給清空,包括DEX TIDER,當(dāng)你下載不出來的時候,這個文件實(shí)際上是無法識別,也無法做靜態(tài)分析的。地可以看到DEX頭全是零,包括后面的OPT信息全是零了。怎么樣來實(shí)現(xiàn)脫殼?

  脫殼方法相對而言也比較簡單,既然百度將信息清空了,我們將其還原就是了?;贒EX的一些特性,它是連續(xù)的,并且不允許有空隙的,我們是可以根據(jù)Aseent的格式是固定的,而且百度沒有將每個字段的長度給清零,所以我們只要算出來第一個Aseent的位置,然后Aseent加,把每個數(shù)字填起來就可以了。

  后面后這個DEX可以成功地被其他的靜態(tài)工具分析了。相對而言百度的加固我個人認(rèn)為比較完善的,因?yàn)樗Y(jié)合了現(xiàn)在的兩種方式,同時也有比較高的Dop難度,還支持X86和安卓平臺。

  但是百度加固會在原始DEX文件中插入很多百度代碼,我個人比較不喜歡這樣的行為,這是從我們自己工具里摘取出來的代碼,它是來重構(gòu)DEX TIDER。

  最后我想提一下360早期版本,實(shí)際上360最新版本中已經(jīng)使用了類似梆梆和愛加密的方法,在它早期的方法也是有創(chuàng)意的,這種方法破解難度很大,但是它在目前的版本上為什么沒有延續(xù),我覺得還是跟兼容性相關(guān)。因?yàn)槟壳皝砜吹脑挘蠨EX字節(jié)碼變形的方案和ART都存在著或多或少接入性問題。

  最后,我最近做的一些研究的總結(jié)。首先,我們認(rèn)為應(yīng)用加固的產(chǎn)品本身技術(shù)也好,包括攻防也好,是高速發(fā)展,去年搜集這個關(guān)鍵詞應(yīng)該看不到太多的信息,今年搜加固可以搜到大量的信息,我們也看到隨著早期的DEX文件加密的方式的成熟,現(xiàn)在其實(shí)也有更多更新的方式在重現(xiàn),加殼的強(qiáng)度也會越來越高,據(jù)傳言國內(nèi)已經(jīng)有一些廠商實(shí)現(xiàn)了類似PC上面的技術(shù),能夠進(jìn)一步提升加固強(qiáng)度,但是目前沒有看到在公開市場上有這樣的案例。

  第二,ART是安卓的未來,從安卓L開始。ART本質(zhì)是在運(yùn)行前將字節(jié)碼編譯為本地指令,任何試圖將這個解碼隱藏,都會導(dǎo)致使本地指令無法執(zhí)行,這也是目前360和騰訊無法解決的。未來可能有其他的方式,像安卓MASS上面,有的人做的方案,能夠未來對EOT進(jìn)行PACH,我們認(rèn)為ART在加固方面還有很多空間,目前還不是很成熟。

  最后,應(yīng)用加固它其實(shí)還是有很多兼容性問題的,在實(shí)際測試過程中我們也注意到,像不同的硬件平臺,像不同版本的系統(tǒng),甚至像不同廠商的手機(jī),為什么會有這樣的問題呢?

  因?yàn)樽骷庸讨泻芏嗖僮魇切枰ㄟ^反射來做的,還有很多操作是許多對結(jié)構(gòu)體進(jìn)行修改,我們知道安卓是開放系統(tǒng),任何廠家都可以修改這些結(jié)構(gòu)體,這就導(dǎo)致了在某些手機(jī)上面這個結(jié)構(gòu)體的偏移量,或者位置、地址是不同的,這會影響它同其他設(shè)備兼容性的問題。

  在最近一段時間我的很多朋友問我,對堅(jiān)固問題怎么看?從目前來看,我認(rèn)為加固并不是萬能藥,而且有很多脫殼工具。對開發(fā)者而言,一個完整的體系才是他所需要的,他需要多管齊下,才能真正解決APK安全問題,單純加固肯定是不足夠的。

    文章來源:http://chenjava.blog.51cto.com/374566/1592770

上一篇:安卓防火墻 PS DroidWall

下一篇:360譚曉生:安全體系已經(jīng)從城墻防御變成塔防立體防御