我在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上的問題呢?
許多手機不允許您使用setenforce(請參閱https://android.stackexchange.com/questions/54577/how-can-i-change-selinux-from-enforcing-to-permissive-on上的答案) -samsung-galaxy-note-3) – user2443357
@ user2443357因爲你的設備非常紮實,所以你應該可以做到,無需擔心。 –
不,我試過它在兩個紮根設備(一個5.0和一個6.0),它也沒有工作。除了根訪問以外,您還需要一個不同的內核。從我連接到的答案中:「顯然,自從AOS> 4.4以來,Google開始使用一種永久實施模式,它實際上實施了SELinux策略,這些電話已經通過內核中的DCONFIG_ALWAYS_ENFORCE = true內核配置標誌禁用了Permissive選項。刷新不安全的內核(例如CF_Root)或禁用此標誌的全新內核。「 – user2443357