无码日韩精品一区二区三区浪潮_99国产精品久久久久9999高清_亚洲熟妇无码久久观看_亚洲a∨无码一区二区猫咪

微信掃碼登錄

其他登錄方式

綁定手機(jī)號(hào)

注冊(cè)

忘記密碼

用戶協(xié)議

綁定手機(jī)號(hào)

近期有不法分子打著愛盈利的旗號(hào),制作“愛盈利”名稱的App,并偽造愛盈利證件,騙取用戶信任,以抖音點(diǎn)贊賺錢或其他方式賺錢為名義,過程中以升級(jí)會(huì)員獲得高傭金為名讓用戶充值。
愛盈利公司鄭重聲明:我司沒有研發(fā)或運(yùn)營(yíng)過任何名為“愛盈利”的APP,我司做任務(wù)賺錢類產(chǎn)品從沒有讓任何普通用戶充值升級(jí)會(huì)員。我公司產(chǎn)品均在本網(wǎng)站可查詢,請(qǐng)將網(wǎng)站拉至底部,點(diǎn)擊“關(guān)于我們”可查看愛盈利相關(guān)產(chǎn)品與服務(wù)。
溫馨提示:當(dāng)遇到此類問題請(qǐng)撥打官方電話或添加官方微信,以免財(cái)產(chǎn)損失。愛盈利官網(wǎng)地址:www.jza6.com。
  • 推廣與合作
X

數(shù)據(jù)運(yùn)營(yíng)丨知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

來源: 352709

“知物由學(xué)”是網(wǎng)易云易盾打造的一個(gè)品牌欄目,詞語出自漢?王充《論衡?實(shí)知》。人,能力有高下之分,學(xué)習(xí)才知道事物的道理,而后才有智慧,不去求問就不會(huì)知道?!爸镉蓪W(xué)”希望通過一篇篇技術(shù)干貨、趨勢(shì)解讀、人物思考和沉淀給你帶來收獲的同時(shí),也希望打開你的眼界,成就不一樣的你。

以下為文章正文:

想知道Android App常見的保護(hù)方法及其對(duì)應(yīng)的逆向分析方法嗎?

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

網(wǎng)易云易盾資深安全工程師 鐘亞平

3月17日,安卓巴士全球開發(fā)者論壇在重慶舉辦,網(wǎng)易資深安全工程師鐘亞平出席交流活動(dòng),并做《安卓APP逆向與保護(hù)》的演講。在分享中,他介紹了 Android App常見保護(hù)方法及其對(duì)應(yīng)的逆向分析方法,以及分析了常見的加固方案原理與對(duì)抗方法。

安卓APP安全包含很多內(nèi)容,本次分享了混淆代碼、整體Dex加固、拆分 Dex 加固、虛擬機(jī)加固等方面。事實(shí)上,這些內(nèi)容也是國(guó)內(nèi)近幾年Android App安全保護(hù)的一種主要趨勢(shì)。

一、混淆代碼

Java代碼是非常容易反編譯的,作為一種跨平臺(tái)的、解釋型語言,Java 源代碼被編譯成中間“字節(jié)碼”存儲(chǔ)于class文件中。由于跨平臺(tái)的需要,這些字節(jié)碼帶有許多的語義信息,很容易被反編譯成Java源代碼。為了很好地保護(hù)Java源代碼,開發(fā)者往往會(huì)對(duì)編譯好的class文件進(jìn)行混淆處理。

混淆就是對(duì)發(fā)布出去的程序進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能,而混淆后的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。ProGuard就是一個(gè)混淆代碼的開源項(xiàng)目,能夠?qū)ψ止?jié)碼進(jìn)行混淆、縮減體積、優(yōu)化等處理。

Proguard處理流程圖如下所示,包含壓縮、優(yōu)化、混淆、預(yù)檢四個(gè)主要環(huán)節(jié):

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

?        壓縮(Shrink):檢測(cè)并移除代碼中無用的類、字段、方法和特性(Attribute);

?        優(yōu)化(Optimize):對(duì)字節(jié)碼進(jìn)行優(yōu)化,移除無用的指令。優(yōu)化代碼,非入口節(jié)點(diǎn)類會(huì)加上private/static/final,沒有用到的參數(shù)會(huì)被刪除,一些方法可能會(huì)變成內(nèi)聯(lián)代碼;

?        混淆(Obfuscate):使用a、b、c、d這樣簡(jiǎn)短而無意義的名稱,對(duì)類、字段和方法進(jìn)行重命名;

?        預(yù)檢(Preveirfy):在Java平臺(tái)上對(duì)處理后的代碼進(jìn)行預(yù)檢,確保加載的class文件是可執(zhí)行的。

在分享中,鐘亞平展示了利用Proguard,對(duì)Dex2jar進(jìn)行反編譯處理后的Apk效果示例:

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

Proguard處理后

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

Proguard混淆器不僅能夠保護(hù)代碼,而且能夠精簡(jiǎn)編譯后的程序大小,減少內(nèi)存占用。

混淆代碼逆向分析

如果想要反編譯混淆代碼,鐘亞平分享了一個(gè)國(guó)外的工具DEGUADR,它能夠通過統(tǒng)計(jì)的方式來解混淆。雖然這個(gè)工具的正確率達(dá)不到100%,但是能在一定程度上幫助反編譯代碼。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

使用DEGUADR解混淆的示例:

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

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加固

為了加強(qiáng)Android保護(hù)強(qiáng)度,隨著安全技術(shù)的發(fā)展,又出現(xiàn)了新型的“加固技術(shù)”。DEX加固是對(duì)DEX文件進(jìn)行加殼防護(hù),防止被靜態(tài)反編譯工具破解而泄露源碼,最剛開始出現(xiàn)的是整體加固技術(shù)方案。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

整體加固技術(shù)的原理如上所示,包括替換application/classes.dex、解密/動(dòng)態(tài)加載原classes.dex、調(diào)用原application相關(guān)方法、將原application對(duì)象/名稱設(shè)置到系統(tǒng)內(nèi)部相關(guān)變量四大環(huán)節(jié)。其中最為關(guān)鍵的一步就是解密/動(dòng)態(tài)加載原classes.dex,通過加密編譯好的最終dex源碼文件,然后在一個(gè)新項(xiàng)目中用新項(xiàng)目的application啟動(dòng)來解密原項(xiàng)目代碼并加載到內(nèi)存中,再把當(dāng)前進(jìn)程替換為解密后的代碼,能夠很好地隱藏源碼并防止直接性的反編譯。

整體Dex加固逆向分析

整體Dex加固逆向分析有兩種常用的方法。其一是在內(nèi)存中暴力搜索 dex/n035,再 dump。以下是在32位系統(tǒng)中的效果示例:

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

另一種方法就是通過HookdvmDexFileOpenPartial(void* addr, int len, DvmDex**)。

三、拆分Dex加固

隨著業(yè)務(wù)規(guī)模發(fā)展到一定程度,不斷地加入新功能、添加新的類庫,代碼在急劇膨脹的同時(shí),相應(yīng)的apk包的大小也急劇增加,那么簡(jiǎn)單的整體加固方案就不能很好地滿足安全需求,在整體加固方案之外又出現(xiàn)了拆分加固的技術(shù)方案。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

但是如上所示,dex文件在加固時(shí),針對(duì)中間缺失的一部分?jǐn)?shù)據(jù)會(huì)以解密后的數(shù)據(jù)來替換,有的時(shí)候這種拆分替換也會(huì)導(dǎo)致數(shù)據(jù)不準(zhǔn)確。那么到底應(yīng)該拆分什么樣的數(shù)據(jù)呢?就需要了解一下dex文件的數(shù)據(jù)結(jié)構(gòu)。

Dex文件結(jié)構(gòu)極為復(fù)雜,以下圖示選取了其中較為重要的內(nèi)容。事實(shí)上,dex文件是一個(gè)以class為核心組裝起來的文件,其中最重要的是classdata和classcode兩部分,有其特定的接口和指令數(shù)據(jù),選取這兩部分來拆分的話,即使拆分出來也不會(huì)泄露class數(shù)據(jù)和字節(jié)碼數(shù)據(jù),反編譯出來也不完整,安全性較高。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

拆分Dex加固逆向分析

對(duì)于dex拆分加固的逆向分析,如下所示,可以用classdata替換從而組裝成新的dex文件,雖然和原來的dex文件不會(huì)完全一致,但也在一定程度上復(fù)原了被拆分?jǐn)?shù)據(jù)的樣子。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

但要注意的是,這種方法僅適用于被拆分出去的數(shù)據(jù)變形一次性完成,也就是說,在有其他保護(hù)思路的情況下盡量避免使用,而且即使有需要也盡量選在用到這個(gè)類的時(shí)候才去恢復(fù)。

此外還有一個(gè)更底層一些的工具dexhunter,這個(gè)工具較為前衛(wèi),但同時(shí)也有一些局限性,譬如部分指令數(shù)據(jù)會(huì)被優(yōu)化,形成的代碼界面不是很美觀等等。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

四、虛擬機(jī)加固

虛擬機(jī)加固也屬于dex拆分加固的一種,它是對(duì)字節(jié)做了一些變化處理。如下所示,這是一個(gè)正常安卓系統(tǒng)中的代碼,在其中進(jìn)行了虛擬機(jī)加固操作:

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進(jìn)行替換,然后進(jìn)行加固編譯,這樣子操作后,即使把替換后的數(shù)據(jù)恢復(fù)了,也不會(huì)

虛擬機(jī)加固逆向分析―HOOK JNI 接口

這種方式下的逆向分析,一方面可以通過HOOK JNI 接口來實(shí)現(xiàn),它有兩種實(shí)現(xiàn)方式。

其一是類成員/靜態(tài)變量操作相關(guān)接口,比如:

?        GetStaticDoubleFieldSetStaticDoubleField GetDoubleField SetDoubleField …

?        (byte, object, int,long…)

其二是反射調(diào)用類方法,比如:

?        CallVoidMethodACallBooleanMethodA CallShortMethodA CallObjectMethodA …

?        CallStaticVoidMethodACallStaticBooleanMethodA CallStaticShortMethodA CallStaticObjectMethodA …

?        (byte, int, long,double …)

?        CallObjectMethodA(JNIEnv* env, jobject object, jmethoID method, …)

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

通過HOOKJNI 接口實(shí)現(xiàn)虛擬機(jī)加固逆向分析

通過HOOK JNI 接口不用逆向底層,就可以了解APP大致的調(diào)用流程。但是對(duì)于復(fù)雜的調(diào)用過程,或者虛擬化方法數(shù)量較多的情況,這種逆向分析手段看起來會(huì)比較混亂;對(duì)于不需要返射到Java層執(zhí)行的指令,如算術(shù)、邏輯運(yùn)算等,則無法監(jiān)控到。

虛擬機(jī)加固逆向分析―分析指令操作碼映射

另一方面,也可以通過分析指令操作碼映射來逆向分析。在同一加固版本,或者映射關(guān)系相同的情況下,可以采取以下所示的方法:

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

但在實(shí)際情況中,每次加固時(shí)的映射關(guān)系都是隨機(jī)變化的,如下所示,這種情況下就無法直接建立映射關(guān)系。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

不依賴于操作碼的映射關(guān)系只與虛擬機(jī)結(jié)構(gòu)有關(guān),所以需要根據(jù)偏移關(guān)系建立映射關(guān)系,從而進(jìn)行逆向分析。

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

知物由學(xué) | 干貨!一文了解安卓APP逆向分析與保護(hù)機(jī)制

以上就是此次《安卓APP逆向與保護(hù)》主題的全部分享內(nèi)容。

安卓APP逆向保護(hù)作為開發(fā)工作中的重要內(nèi)容,一直是網(wǎng)易云易盾致力于提供的應(yīng)用服務(wù)?!昂罄m(xù),我們將在SO加密保護(hù)方面進(jìn)行更加深入的研究,鐘亞平最后說到。

相關(guān)閱讀:

知物由學(xué)第一期:知物由學(xué) | AI時(shí)代,那些黑客正在如何打磨他們的“利器”?(一)

知物由學(xué)第二期:知物由學(xué) | AI時(shí)代,那些黑客正在如何打磨他們的“利器”?(二)

知物由學(xué)第三期:知物由學(xué) | 一文讀懂互聯(lián)網(wǎng)內(nèi)容審核機(jī)制


愛盈利-運(yùn)營(yíng)小咖秀(www.jza6.com) 始終堅(jiān)持研究分享移動(dòng)互聯(lián)網(wǎng)App運(yùn)營(yíng)推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識(shí)內(nèi)容;是廣大App運(yùn)營(yíng)從業(yè)者的知識(shí)啟蒙、成長(zhǎng)指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺(tái);

想了解更多移動(dòng)互聯(lián)網(wǎng)干貨知識(shí),請(qǐng)關(guān)注微信公眾號(hào)運(yùn)營(yíng)小咖秀(ID: yunyingshow)

評(píng)論

相關(guān)文章推薦

SELECT dw_posts.ID,dw_posts.post_title,dw_posts.post_content FROM dw_posts INNER JOIN dw_term_relationships ON (dw_posts.ID = dw_term_relationships.object_id) WHERE 1=1 AND(dw_term_relationships.term_taxonomy_id = 3312 ) AND dw_posts.post_type = 'post' AND (dw_posts.post_status = 'publish') GROUP BY dw_posts.ID ORDER BY RAND() LIMIT 0, 6

京ICP備15063977號(hào)-2 ? 2012-2018 aiyingli.com. All Rights Reserved. 京公網(wǎng)安備 11010102003938號(hào)