[Android]利用run-as命令在不root情況下讀取data下面的數據


 

前言

  這一段時間都在做換膚功能,遇到很多問題,解決后又有新的問題,這里分享一則,想在不使用shareUserId來實現多APK共享資源,也建議謹慎使用shareUserId。
 
聲明
  歡迎轉載,但請保留文章原始出處:) 
    博客園:http://www.cnblogs.com
    農民伯伯: http://over140.cnblogs.com 

正文

  一、關鍵步驟

    主要是run-as命令:
over@over-ThinkPad-R52:~$ adb shell
$ run- as com.package
$ cd /data/data/com.package
$ ls
databases
lib
$ cd databases
$ ls
preferences.db
$ cat preferences.db > /mnt/sdcard/preferences1.db   

代碼說明:

注意com.package換成自己的完整包名,關鍵是run-as命令,最后使用cat命令把數據庫拷貝到sd卡下面。

 

  二、補充

    同事分享/data/data/package/lib這個目錄是可以直接訪問的,也就是說adb shell后雖然無法讀取/data目錄,但是可以直接訪問這個目錄下的文件,可以通過上面的run-as命令看得出其權限與其他目錄的權限是不同的,為system權限,這為多apk共享so提供了便利,這也是Vitamio所使用的方式。

    2012-6-14

         如果簽名了並且指定設置了android:debuggable="false"將無法使用該命令。 

    2012-7-13

         感謝網友分享(見評論),注意不要把adb shell 和 run-as作為一條命令一起執行,例如:adb shell run-as com.pack

 

  三、參考文件
     android上使用手機跑adb存取data資料夾[blogspot]
     Why do I get access denied to data folder when using adb?

 

結束

關於共享數據也可以研究一下/data/data/package/files,使用openFileOutput的第二個參數來指定訪問權限。事物總有其多面性,本文有鼓勵窺視apk之嫌,方法分享給你,至於你用來做什么我可以管不了了 :) 也算是一種黑客精神,提醒大家開發應用時切勿對重要的數據明文存放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM