緣起

最初會用到這玩意兒,是高中科展時為了要撈出 Line、Facebook messenger 的聊天訊息進行分析。當時為了這東西不知道搞了多久,最後還是靠隊友 Carry 才生出這份 code。

後來做的神魔關卡備份外掛也是靠這它才得以順利完成,再謝謝一次神奇的小夥伴。

為什麼

Android APP 在執行時會被限制在一個沙盒(sandbox)中,對於系統資源的存取會被隔離,大致如下圖所示;因此若要存取別的 APP 存放在 /data/data/ 中的資料,勢必得從其他地方下手。

所以要怎麼做?

複製貼上就可以了。
基本上就是先拿 Root 權限,然後執行 linux 的複製指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void copy(string resorsePath, string targetPath){
Process suProcess = null;
try {
suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
os.writeBytes("mkdir -p " + targetPath + "\n");
os.writeBytes("cp -r " + resorsePath + " " + targetPath + "\n");
os.writeBytes("exit\n");
os.flush();

} catch (IOException e) {
e.printStackTrace();
}
}

收工!