Android自複製傳播APP原理學習(翻譯)

 Android自複製傳播APP原理學習(翻譯)java

1 背景介紹c++

論文連接:http://arxiv.org/abs/1511.00444git

項目地址:https://github.com/Tribler/self-compile-Androidgithub

 

吃完晚飯偶然看到這篇論文,當時就被吸引了,立刻翻譯總結了一下。若有錯誤歡迎斧正。網絡

該論文的研究出發點比較高大上這裏咱們就很少說了,簡而言之就是想經過移動設備來實現一個自組網,在發生災難的時候,手機之間可以自動傳輸關鍵數據,減小損失。整個目標經過設計一個可以實現自編譯、自變異和病毒式傳播的「自治app」實現。下面咱們直接去了解它的核心原理。app

2自治app的設計工具

1.要求可以同時使用多種網絡鏈接方式如WIFI、蜂窩網絡、藍牙等。學習

2.最好系統自己開源,主要是方便獲取軟件的編譯工具以及瞭解相關編譯過程。ui

因此選擇了Android系統。同時注意到自治app的關鍵功能最好不須要root權限就能順利完成。翻譯

3.1病毒式的傳播

核心原理圖

 

簡而言之就是在同一個無線網域中,可以經過NFC和藍牙進行傳播,而後這個網域中若是有一臺機器可以鏈接外網的話,就經過這臺機器傳播到外網去。

3.2 自編譯

爲了可以在各個設備、平臺上運行APP,這個app就必須包含全部系統版本的編譯套件。最有效的方法就是在這個APP中內嵌一個app編譯工廠,此工廠包含全部須要的編譯和鏈接工具。要完成自我編譯主要須要以下3類原數據:

①app源碼;

②第三方庫;

③編譯、連接工具

固然,若是app中含有c/c++代碼的話,還須要一些ndk工具。

3.3 自變異

主要是爲了經過變異來讓app可以在各類不一樣的環境中存活下去。主要方式就是讓app自身可以將代碼、資源文件、和新的或者更改後的庫文件集合在一塊兒,讓它變成一個萬精油的app,進而適應各類設備(固然,就惡意代碼而言,能夠經過變異來減小被殺軟報毒的機率)。

3.4無害的組件

在app中嵌入一些無害的組件(軟硬件都可),或者將「關鍵邏輯」嵌入到無害的app中,能夠迷惑用戶,減小被發現的機率。好比嵌入到計算器中。固然爲了省得被查水錶,給app簽名的時候最好用別人的,或者默認的debug key。

4 具體實現

主要就是構建一個內嵌的編譯環境,而且這個編譯環境要是全java的。因爲Android自己就是開源的,因此獲取各個編譯工具以及瞭解它的編譯原理並不難,而且除了aapt以外,其餘工具基本都是使用java寫的。

具體的編譯過程見圖3。固然網上也有不少相關文章。

 

4.1重寫aapt

aapt的功能這裏就很少說了。主要看如何將這部分native代碼移植到java代碼中。這方面的工做已經有現成的工具可使用了,就是JavaIDEdroid。同時須要注意,aapt在工做的時候須要的那些native庫文件都被集中到了一個so文件中。因此爲了實現徹底的NDK無關性,這裏只須要對aapt的代碼進行移植便可。

4.2 Java編譯器

這裏選擇使用Eclipse的Java編譯器ECJ,由於這個編譯器是使用java寫的。

4.3 Dalvik轉換

Android使用dex格式的可執行文件。在Android5.0以前的版本中使用Dalvik VM來運行dex文件,後來使用ART代替了DVM,不過ART是向後兼容的,因此也是執行dex文件。所以就須要將java字節碼轉換爲dex格式的dalvik字節碼。整個轉換工做經過一個叫作dx的工具包實現。Dx在進行轉換的時候比較吃內存,若是一次性轉換太多東西的話容易crash,可是好在咱們能夠分塊對上面提到的各個java庫進行轉換。轉換完成後在經過DexMerger進行組合。好消息是,dx和DexMerger都是用java寫的。

4.4 打包工具

APK的打包主要是經過ApkBuilder工具實現,它也是用java寫的。ApkBuilder包括用於完成java代碼編譯的Android.jar庫文件,用於完成最後連接工做的Java KeyStore文件(這個文件在對apk進行簽名的時候用到)等等。

4.5簽名問題

若是兩個apk的包名相同,簽名也相同,那麼新的apk就能夠完美替換舊的apk。可是自變異的apk卻不行。它要麼被當作一個新的app安裝,要麼由於包名相同但簽名不一樣而被拒絕安裝。因此爲了解決這個問題,可以使用ZipSigner工具,這個工具可使用任意的Key Store文件(自己默認包含debug key)對apk進行簽名。因此能夠經過這個工具使用debug key對自變異的apk進行簽名。

4.6無線傳播

主要就是經過NFC來開啓藍牙傳輸,而後經過藍牙來傳輸apk文件。整個傳輸過程能夠作成全自動化的。

5 總結

這個論文首先提出並實現了在Android平臺可以自動重編譯、自變異和病毒式傳播的「自治型app」,雖然做者的出發點是好的,可是不免會被有心之人利用,作成惡意代碼加以傳播。同時很容易聯想到,咱們徹底能夠將這些Android平臺的編譯工具替換爲其餘系統平臺的編譯工具,程序經過檢測當前所處的系統環境,選取相應的編譯套件,進而實現跨平臺感染。

相關文章
相關標籤/搜索