2016-01-26 61 views
0

我在Android中有一個應用程序,需要使用root修改其他應用程序的專用數據庫。目前的方法適用於所有設備,包括Lollypop,但由於SELinux,似乎在棉花糖設備上失敗。使用root訪問權限修改Android 6.0+中的另一個應用程序的SQLite數據庫

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

  • 從根:
    • 複製目標數據庫以我的應用程序的文件夾中保存權限和所有權(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上的問題呢?

回答

0

您可以通過代碼關閉執行模式並使用adb shell su 0 setenforce 0移至寬容模式。

在寬容模式下,您可以在沒有SELinux的情況下在普通電話上做任何事情。

一旦執行模式關閉,你可以做任何你之前做的事情。

+0

許多手機不允許您使用setenforce(請參閱https://android.stackexchange.com/questions/54577/how-can-i-change-selinux-from-enforcing-to-permissive-on上的答案) -samsung-galaxy-note-3) – user2443357

+0

@ user2443357因爲你的設備非常紮實,所以你應該可以做到,無需擔心。 –

+0

不,我試過它在兩個紮根設備(一個5.0和一個6.0),它也沒有工作。除了根訪問以外,您還需要一個不同的內核。從我連接到的答案中:「顯然,自從AOS> 4.4以來,Google開始使用一種永久實施模式,它實際上實施了SELinux策略,這些電話已經通過內核中的DCONFIG_ALWAYS_ENFORCE = true內核配置標誌禁用了Permissive選項。刷新不安全的內核(例如CF_Root)或禁用此標誌的全新內核。「 – user2443357

0

我剛剛爲我的一個應用程序完成了類似的工作,因此它適用於Pixel設備上的Android 7。

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

一旦完成,我將數據庫文件移回原始位置,chown/chgrp將它們還原到擁有的應用程序的uid,然後恢復它們。

這是一個巨大的痛苦。但它似乎在我有限的測試中工作到目前爲止。但請注意,在Android的更高版本中,toolbox命令似乎已被toybox命令取代,這實際上會影響chown/chgrp。工具箱版本允許在同一命令中更改所有者和組。 Toybox不這樣做,所以你必須同時發出chown和chgrp命令。

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

相關問題