簡體   English   中英

使用root訪問權限在Android 6.0+中修改另一個應用的SQLite數據庫

[英]Modify another app's SQLite database in Android 6.0+ using root access

我在Android中有一個應用,需要使用root修改其他應用的私有數據庫。 當前方法適用於Lollypop之前(包括Lollypop)的所有設備,但是由於SELinux,似乎無法在棉花糖設備上使用。

要修改數據庫,該應用程序執行以下操作:

  • 從根:
    • 將目標數據庫復制到我的應用程序的文件夾中,以保留權限和所有權(cp -p)
    • 更改權限(chmod 777)
  • 從應用程序中,使用SQLiteDatabase類打開數據庫並執行查詢
  • 從根
    • 移回數據庫並還原權限

但是,在棉花糖上,嘗試使用SQLiteDatabase打開復制的數據庫失敗,並產生以下AVC拒絕:

avc: denied { open } for path="/data/data/<my app package>/cache/<database>.db" dev="dm-0" ino=509488 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=0

我嘗試過的唯一一件事是以root用戶身份在文件上運行chcon u:r:untrusted_app:s0 ,但它說權限被拒絕。

此外,根據我在這里閱讀的內容: https : //source.android.com/security/selinux/ ,似乎SELinux在5.0版本中設置為強制模式,因此在6.0上這只是一個問題但是不是5.0嗎?

我剛剛為我的一個應用程序完成了類似的操作,因此它可以在Pixel設備上的Android 7上運行。

像您一樣,我將原始數據庫文件復制到應用程序的位置。 然后,我不僅將其chmod,而且將其chown / chgrp到我的應用程序的uid中。 最后,將數據庫文件chcon到在其原始位置找到的上下文中。 然后,我可以通過我的應用程序中的SqliteDatabase類訪問和操作它們。

完成后,我將數據庫文件移回其原始位置,對它們進行chown / chgrp回到擁有應用程序的uid,然后將其還原。

這是一個巨大的痛苦。 到目前為止,它似乎在我的有限測試中仍然有效。 但是請注意,在更高版本的Android中,工具箱命令似乎已被toybox命令所取代,這確實會影響chown / chgrp。 工具箱版本允許在同一命令中更改所有者和組。 Toybox並非如此,因此您必須同時發出chown和chgrp命令。

可能還會有其他命令更改。 例如,在Pixel上,grep命令現在是獨立的二進制文件,而不是工具箱或玩具箱的一部分。

您可以通過代碼使用adb shell su 0 setenforce 0關閉強制模式並轉為許可模式。

在許可模式下,您可以做與沒有SELinux的普通電話一樣的操作。

強制模式關閉后,您可以執行以前的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM