• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于代碼特征多維度分析實(shí)現(xiàn)Android應(yīng)用的版權(quán)保護(hù)

      2014-10-29 20:27:31李青
      中國新通信 2014年19期
      關(guān)鍵詞:版權(quán)保護(hù)

      李青

      【摘要】 隨著智能終端的普及,Android平臺的市場占有率已經(jīng)躍居世界首位,基于Android的應(yīng)用開發(fā)日益增多。但由于Android系統(tǒng)的開源性和開放性,在給開發(fā)帶來巨大方便的同時(shí),也給一些惡意開發(fā)者破解和修改Android應(yīng)用留有可乘之機(jī)。這些惡意開發(fā)者通過利用反向工程工具來修改他人的應(yīng)用后,冠以自己的名稱對外進(jìn)行發(fā)布銷售,嚴(yán)重?fù)p害了原作者的利益,更有甚者在其中穿插了黃色反動(dòng)信息,嚴(yán)重違反了國家的法律政策。本文提出通過提取Android應(yīng)用代碼特征后,利用組件相似度檢測、Java類布局比較、代碼控制流比較以及文本相似度比較四個(gè)維度來進(jìn)行盜版應(yīng)用自動(dòng)檢測。并基于該方法對Android應(yīng)用發(fā)布平臺反盜版的系統(tǒng)架構(gòu)進(jìn)行了設(shè)計(jì)實(shí)現(xiàn)。

      【關(guān)鍵詞】 Android應(yīng)用 版權(quán)保護(hù) 反向工程 代碼特征

      一、引言

      依賴著整個(gè)手機(jī)行業(yè)從功能機(jī)時(shí)代跨越至智能機(jī)時(shí)代的科技飛躍,Android操作系統(tǒng)已經(jīng)迅速崛起,成為全球市場占有率首位的智能移動(dòng)終端操作系統(tǒng)。它的使用涵蓋了智能手機(jī)、平板電腦、電視機(jī)頂盒以及其他嵌入式便攜電子設(shè)備。

      Android操作系統(tǒng)在如此短的時(shí)間內(nèi)取得了巨大的市場成功,很大一部分要?dú)w功于系統(tǒng)的開放性和易于上手的開發(fā)套件。Google公司為Android開發(fā)者提供了手把手的起步文檔、簡單易用的開發(fā)套件和在線論壇。系統(tǒng)基于Linux開發(fā),代碼開源可讀,任何個(gè)人和第三方廠商都可以很快速的寫出一個(gè)屬于自己的應(yīng)用。也正是因?yàn)橄到y(tǒng)的開放性和技術(shù)的透明,不良開發(fā)者可以比較容易的對應(yīng)用進(jìn)行反向工程,對原有應(yīng)用進(jìn)行小規(guī)模篡改,替換內(nèi)部的資源文件,改頭換面后作為自己的應(yīng)用推向市場,從而從中獲利。

      對于各類應(yīng)用發(fā)布平臺而言,盜版應(yīng)用會導(dǎo)致平臺內(nèi)應(yīng)用大量同質(zhì)化,產(chǎn)品品質(zhì)下降,同時(shí)降低平臺聲譽(yù),帶來法律風(fēng)險(xiǎn)。從長遠(yuǎn)來看,這種行為更嚴(yán)重?cái)_亂了Android應(yīng)用市場秩序,且影響整個(gè)產(chǎn)業(yè)鏈的健康發(fā)展。

      令人擔(dān)憂的是,當(dāng)下各種應(yīng)用發(fā)布平臺僅能做到對版權(quán)文檔進(jìn)行書面審核和人工測試。這種測試主觀因素高,且費(fèi)時(shí)費(fèi)力。鑒于此,本文設(shè)計(jì)了一套較有效的借助代碼特征分析和數(shù)據(jù)庫存儲比對的自動(dòng)化工具來進(jìn)行輔助檢測。

      二、Android應(yīng)用篡改和盜版方式分析

      知己知彼,百戰(zhàn)不殆。只有深入了解不良開發(fā)者如何篡改應(yīng)用,才能從源頭上抑制他們的欺騙手段。通常不良開發(fā)者有兩類。

      一類是“盜版商”,他們獲取利益的主要手段是將市面上的應(yīng)用進(jìn)行小規(guī)模的修改,重新包裝,然后作為一款新的應(yīng)用進(jìn)行上市推廣。通常他們會首先獲取Android應(yīng)用的可執(zhí)行文件(apk文件),通過反向工程工具(例如APKTools)進(jìn)行反編譯。在反編譯后得到資源文件、配置文件、smali代碼和動(dòng)態(tài)鏈接庫文件。其中,資源文件是安卓應(yīng)用在執(zhí)行過程中所需要的一些圖片、布局和字符串等文件;配置文件是Android應(yīng)用的權(quán)限設(shè)置和一些基本程序信息;smali代碼實(shí)質(zhì)上為反編譯后的代碼,但是可讀性較差,如果原作者在編譯時(shí)使用了代碼混淆,smali基本不可讀懂;動(dòng)態(tài)鏈接庫為程序運(yùn)行過程中需要調(diào)用的一些外部函數(shù)。從反編譯后得到的這些素材來看,修改者最容易做到的是直接替換資源文件,特別是更換圖片或者字符串(參見圖1)。而更有能力的開發(fā)者,在源代碼未被混淆的前提下,則可以通過修改配置文件和smali代碼,繞過一些校驗(yàn)功能,并增加一些自己的功能代碼,使得新的程序與原有程序在體驗(yàn)上有一定差異。

      另一類是“翻版商”,他們和“盜版商”的最大區(qū)別是:“盜版商”通常沒有應(yīng)用的源碼,他們的主要盜版工具是反向編譯;而“翻版商”實(shí)際上是原版應(yīng)用的作者或者獲得了原版應(yīng)用的源碼?!胺嫔獭笨梢詫υ创a進(jìn)行大量的類名替換或者函數(shù)名替換、注入新的代碼邏輯或者修改資源以后,將原應(yīng)用改頭換面作為一款新的應(yīng)用推向市場?!胺嫔獭蓖ㄟ^將一款應(yīng)用復(fù)制為多款應(yīng)用來躲避應(yīng)用市場的監(jiān)督管控,達(dá)到大量吸費(fèi)的目的。

      但無論上述哪種不良開發(fā)者,通常都會從成本出發(fā),避免對應(yīng)用進(jìn)行過于復(fù)雜的修改。一般的做法是直接替換資源文件,使應(yīng)用的體驗(yàn)有直接的變化。如果一款應(yīng)用只是部分借鑒了另一款應(yīng)用的思路或者功能,但是算法和架構(gòu)完全自行重寫,那么就不能夠認(rèn)為是惡意盜版。這就好比OICQ和ICQ的關(guān)系,不能認(rèn)為他們功能類似,就認(rèn)定前者盜版后者。因此,“盜版程序”和“翻版程序”從代碼分析上來看,基本特征都得以保留。這也為接下來子反盜版之路中的“證據(jù)”捕捉,提供了足夠的信息。(圖1)

      三、四種代碼相似度判定維度介紹

      針對上述不良開發(fā)者通用的盜版手段,本文將著重從反編譯后的代碼尋找蛛絲馬跡,以此來判定兩個(gè)Android應(yīng)用是否在整體上相似。這可以從四個(gè)方面入手。

      3.1 組件相似度

      在Android操作系統(tǒng)中,應(yīng)用程序執(zhí)行的單元是系統(tǒng)預(yù)定義的各種組件。組件相似度檢測可通過解析安裝包中的配置文件內(nèi)容來得到程序的各個(gè)組件聲明和之相關(guān)聯(lián)的參數(shù)及資源信息,最終進(jìn)行相似度比較。

      確切的說,Android操作系統(tǒng)提供給開發(fā)者預(yù)先封裝好的類作為應(yīng)用程序中的基本組件,它們是:Activity、Service、Content Provider和BroadcastReceiver。而在組件之間,Android系統(tǒng)提供了Intent作為內(nèi)部信息傳送方式。任何Android應(yīng)用,都需要通過繼承、調(diào)用和擴(kuò)展以上四大基本組件來構(gòu)造自己。

      同時(shí),Android系統(tǒng)要求開發(fā)者在一個(gè)配置文件(AndroidManifest.xml,參見代碼1)中將自己定義的組件以及組件間用于通信的Intent全部聲明出來。該配置文件同時(shí)還定義了整個(gè)應(yīng)用所需要的系統(tǒng)權(quán)限。

      因此,通過解析反編譯后的AndroidManifest.xml便可以知道,一個(gè)應(yīng)用中有多少個(gè)自定義Activity、Service、Content Provider和BroadcastReceiver,同時(shí)也能知道,他們之間誰和誰交互了哪些Intent。

      對于普通的修改者而言,這個(gè)方法幾乎完全可以決定源碼拷貝是否存在。而對于有能力替換所有文件名稱甚至類定義的不良開發(fā)者而言(雖然從成本考慮通常不會如此,且迄今為止smali注入基本都僅限于函數(shù)級,該假設(shè)僅為了考慮到所有可能性),以上各種組件聲明、組件和組件之間的通信關(guān)系,也能給兩個(gè)應(yīng)用的相似度判斷帶來很大的幫助。

      代碼1. AndroidManifest.xml樣例

      3.2 Java類布局比較

      Android操作系統(tǒng)的代碼開發(fā)是基于Linux和Java的。 Java語法中,每定義一個(gè)類,都需要指定這個(gè)類所在的包(Package),以及該P(yáng)ackage下的各層目錄。這是一種樹型結(jié)構(gòu),表示了包、目錄路徑和類的關(guān)系。樹的根節(jié)點(diǎn)代表程序的根目錄(即最頂層的包),分支節(jié)點(diǎn)代表程序子目錄,葉子節(jié)點(diǎn)是具體的類。

      通過反編譯后的smali代碼,可以推導(dǎo)出軟件的整體類布局樹,然后通過樹路徑相似度矩陣算法或者編輯距離算法比較得出Java類布局相似度。

      3.3代碼控制流比較

      一個(gè)應(yīng)用包含的自定義函數(shù)少則數(shù)十個(gè),多則上萬個(gè)。這些函數(shù)之間有著錯(cuò)綜復(fù)雜的調(diào)用關(guān)系。把函數(shù)的調(diào)用關(guān)系抽象出來,可以得到一個(gè)有向圖。圖中每個(gè)節(jié)點(diǎn)代表一個(gè)函數(shù),有向邊代表與之相連的兩個(gè)節(jié)點(diǎn)(函數(shù))之間存在調(diào)用關(guān)系。這樣的有向圖,在本文中被定義為代碼控制流。(見圖2)

      圖2. 代碼控制流比較

      較有能力的不良開發(fā)者可以通過smali注入來進(jìn)行函數(shù)級的修改。然而與一個(gè)應(yīng)用中數(shù)量巨大的函數(shù)調(diào)用關(guān)系相比,這點(diǎn)修改在代碼控制流相似度比較中通常顯得微不足道。

      3.4 文本相似度比較

      文本相似度比較已經(jīng)廣泛應(yīng)用于信息檢索、機(jī)器翻譯、自動(dòng)問答等系統(tǒng)。目前可以搜索到的算法就有余弦算法、BM25算法、Nakatsu算法和LD算法等多種。

      反編譯后的smali代碼本質(zhì)依然是文本文檔,將傳統(tǒng)文本的比較方法借鑒到代碼比較中也不算是完全的創(chuàng)新手段。相信大多數(shù)程序員都有過使用diff命令或者BeyondCompare這樣的工具進(jìn)行代碼比較。只是此處的文本相似度更具備函數(shù)級的針對性,而非diff命令的逐行文本精確匹配方式。

      我們已經(jīng)在文章中多次強(qiáng)調(diào),不良開發(fā)者不會投入巨大的精力去修改通篇代碼。并且在現(xiàn)實(shí)中,也沒有人有能力去通過修改smali來完全替換類級別的構(gòu)造。如果原作者在編譯過程中開啟了代碼混淆,反編譯后的smali代碼將完全不可讀??紤]到以上這些因素,在代碼層面上,引入文本相似度比較手段,針對作者自定義的函數(shù)進(jìn)行相關(guān)性統(tǒng)計(jì),在協(xié)助判定兩個(gè)應(yīng)用的相似度上,是相當(dāng)有效的手段。

      四、基于多維度的應(yīng)用相似度判定算法

      正如前文中描述的,通過反編譯應(yīng)用的APK包,可以得到該應(yīng)用的配置文件、smali代碼、資源文件和動(dòng)態(tài)鏈接庫。忽略掉容易被替換的資源文件和不會被改變的動(dòng)態(tài)鏈接庫。上述四個(gè)維度相似度的判定將主要利用配置文件和smali代碼。其中:

      1、通過比較兩個(gè)應(yīng)用的配置文件(AndroidManifest.xml)中組件和組件間的通信關(guān)系(Intent),可以得到組件相似度的最終值,設(shè)為A。

      2、解析smali代碼中各文件的頭部信息,查找關(guān)鍵字為.class之后的內(nèi)容,便可得到包和目錄路徑(參見代碼2)。將路徑信息抽象為路徑樹后,利用樹相似度比較算法,可以得到應(yīng)用的Java類布局相似度,設(shè)為B。

      3、通過分析smali代碼和smali語法說明可以知道,smali代碼中函數(shù)調(diào)用都是以invoke-xxxx{parameter}, methodtocall的格式進(jìn)行的。以invoke-作為關(guān)鍵字查找,定位到methodtocall(被調(diào)用函數(shù))[2],便可以得到代碼控制流圖(參見代碼2),然后使用同構(gòu)圖算法進(jìn)一步得到應(yīng)用的代碼控制流相似度,設(shè)為C。

      4、最后,使用invoke-查找出所有的函數(shù)調(diào)用行,通過空格分解出關(guān)鍵字,分別定義為操作符、參數(shù)、被調(diào)函數(shù)。在去除操作符、參數(shù)、系統(tǒng)函數(shù)調(diào)用等可能干擾文本特征的因素后,利用余弦相似度算法(當(dāng)然,其他文本相似度比較算法也可)對兩組應(yīng)用的smali代碼進(jìn)行文本相似度檢測,則可以得到文本相似度,設(shè)為D。

      根據(jù)應(yīng)用的特質(zhì)和應(yīng)用平臺自身的情況,可以將上述四種比較結(jié)果直接輸出進(jìn)行可視化比較,考慮有2個(gè)維度的相似度在80%以上即可判定為相似。通常情況下,組件相似度和文本相似度比較能夠快速的定位到直接替換資源文件的“盜版軟件”,而Java類布局相似度和代碼控制流相似度能夠準(zhǔn)確定位替換了源碼函數(shù)名和類名的“翻版軟件”。(代碼2)

      五、應(yīng)用相似度判定系統(tǒng)設(shè)計(jì)

      以上算法使用了四個(gè)維度相似度判定后的方式,這為實(shí)際生產(chǎn)使用提供了可操作性。對于一個(gè)應(yīng)用發(fā)布平臺而言,在系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)時(shí)需要兼顧成本和效率。

      對于每一個(gè)進(jìn)入系統(tǒng)的應(yīng)用,反編譯該應(yīng)用后,系統(tǒng)應(yīng)當(dāng)存儲應(yīng)用的組件結(jié)構(gòu)、組件關(guān)系、樹形結(jié)構(gòu)、有向圖結(jié)構(gòu)、配置文件和smali文件關(guān)鍵字向量。在日常的業(yè)務(wù)流程中,通常需要在線進(jìn)行應(yīng)用特征查找和比對,考慮到應(yīng)用發(fā)布的數(shù)量巨大,這些數(shù)據(jù)也并非結(jié)構(gòu)化數(shù)據(jù),使用針對大數(shù)據(jù)和文本處理設(shè)計(jì)的Nosql數(shù)據(jù)庫能夠較好的降低成本提高效率。而出于快速響應(yīng)的要求,在運(yùn)算方面,建議使用多服務(wù)器并行的算法,利用分布式運(yùn)算來縮小整體運(yùn)算時(shí)間,提升用戶感知。使用Map-reduce的算法加多臺刀片機(jī)可能要比使用少量的多CPU小型機(jī)要更加經(jīng)濟(jì)和有效[3]。

      應(yīng)用相似度的最終結(jié)果可以使用報(bào)表或者圖形化界面展示,作為應(yīng)用發(fā)布平臺流程環(huán)節(jié)中的參考。應(yīng)用發(fā)布平臺既可以在應(yīng)用申報(bào)過程中利用該能力判定一款新應(yīng)用是否與平臺中已有應(yīng)用重合。也可以反向利用該能力,在某款平臺中應(yīng)用需要重傳包體的時(shí)候,檢測包體是否被改動(dòng)過,避免二次測試?yán)速M(fèi)人力。

      六、結(jié)束語

      隨著Android陣營的日益強(qiáng)大,Android應(yīng)用市場的管理也將越來越規(guī)范化。對于各應(yīng)用發(fā)布平臺而言,如何有效的保障平臺內(nèi)應(yīng)用水準(zhǔn),縮短應(yīng)用審批流程,提高應(yīng)用上線速度,將決定其成敗。

      本文使用了組件相似度比較、Java類布局比較、代碼控制流比較和文本相似度比較四個(gè)維度,探測應(yīng)用相似度,最終輸出報(bào)表或者圖形化界面,供應(yīng)用評審人員參考和查證。應(yīng)用發(fā)布平臺可以在以較低的成本建設(shè)該能力平臺后,使用該能力進(jìn)行應(yīng)用的初步篩選盜版和簡化應(yīng)用二次測試過程,從而減少人力成本,提高審核效率。然而,Android作為Java語言的延伸產(chǎn)品,想要完全防止代碼反編譯和篡改幾乎不可能。技術(shù)的進(jìn)步會使應(yīng)用篡改的手段更加豐富,防范和鑒別不良應(yīng)用的方式也需要隨著時(shí)代和科技的進(jìn)步不斷的優(yōu)化和擴(kuò)展。

      參 考 文 獻(xiàn)

      [1] Android-apktool A tool for reverse engineering Android apk files[EB/OL]. http://code.google.com/p/android-apktool 2003-11-11.

      [2] Smali An assembler/disassemble for Androids dex format[EB/OL]. https://code.google.com/p/smali. 2013-11-11.

      [3]潘偉,利用文本余弦相似度實(shí)現(xiàn)Android應(yīng)用的版權(quán)保護(hù)[J],中國新通信,2014(2),P53-55.

      [4] Cosine similarity From Wikipedia, the free encyclopedia[EB/OL]. http://en.wikipedia.org/wiki/Cosine_similarity. 2014-4-14.

      [5] How to avoid reverse engineering of an APK file? [EB/OL]. http://stackoverflow.com/questions/13854425/how-to-avoid-reverse-engineering-of-an-apk-file. 2013-2-8

      猜你喜歡
      版權(quán)保護(hù)
      自媒體生態(tài)下網(wǎng)絡(luò)出版版權(quán)保護(hù)探究
      圖書出版版權(quán)保護(hù)的困境與出路思考
      科技傳播(2019年23期)2020-01-18 07:58:34
      影響圖書出版產(chǎn)業(yè)效益的版權(quán)保護(hù)關(guān)鍵要素研究*
      中國出版(2019年23期)2020-01-11 08:23:14
      中文科技期刊版權(quán)保護(hù)存在的問題與解決策略
      科技傳播(2019年24期)2019-06-15 09:30:02
      版權(quán)保護(hù)與文化強(qiáng)國建設(shè)關(guān)系探討
      數(shù)字版權(quán)保護(hù)技術(shù)應(yīng)用產(chǎn)業(yè)聯(lián)盟正式成立
      出版人(2017年8期)2017-08-16 11:45:36
      當(dāng)前傳統(tǒng)媒體版權(quán)保護(hù)的難點(diǎn)及對策
      傳媒評論(2017年3期)2017-06-13 09:18:10
      互聯(lián)網(wǎng)環(huán)境下的音樂版權(quán)保護(hù)
      傳統(tǒng)媒體版權(quán)保護(hù)面臨八大難關(guān)
      新聞傳播(2016年9期)2016-09-26 12:20:15
      論圖書編輯的版權(quán)保護(hù)意識
      出版與印刷(2016年3期)2016-02-02 01:20:12
      上饶县| 疏附县| 岳西县| 喀喇沁旗| 舞钢市| 南木林县| 沂南县| 乐东| 营山县| 泰兴市| 高淳县| 钦州市| 铜鼓县| 东港市| 浙江省| 桃源县| 西平县| 荥经县| 金坛市| 宜黄县| 赤城县| 龙游县| 木兰县| 贵德县| 萨嘎县| 宜君县| 新密市| 定西市| 河北区| 荃湾区| 都匀市| 华宁县| 行唐县| 合作市| 柳江县| 南昌市| 邓州市| 沈丘县| 三原县| 清原| 莱州市|