1. 程式人生 > >android6.0第三方APP獲得裝置節點的訪問許可權

android6.0第三方APP獲得裝置節點的訪問許可權

之前使用android4.4的系統進行開發時 system/app(系統自帶APP) 目錄下的 app 可以直接訪問 dev 目錄下的裝置節點,Android 5.0 以後,因為採取了 SEAndroid/SElinux 的安全機制,即使擁有 root許可權,或者對某核心節點設定為 777 的許可權,仍然無法在 JNI 層訪問。

這裡先了解一下 SEAndroid app 的分類
SELinux(或SEAndroid)將app劃分為主要三種類型(根據user不同,也有其他的domain型別):

  1. untrusted_app 第三方app,沒有android平臺簽名,沒有system許可權
  2. platform_app 有android平臺簽名,沒有system許可權
  3. system_app 有android平臺簽名和system許可權

從上面劃分,許可權等級,理論上:untrusted_app < platform_app < system_app

那麼第三方APP,在SElinux下,如何獲得對一個核心節點的訪問許可權
分下面三個步奏:

  1. 在 android/external/sepolicy/file_contexts 檔案中新增:
    /dev/relay u:object_r:relay_device:s0
    其中“relay”是我的裝置節點名稱,可自行更改,“relay_device”是自定義裝置名

  2. 在 android/external/sepolicy/device.te 檔案中新增:
    type relay_device, dev_type, mlstrustedobject;
    其中“relay_device”需要跟上面自定義的裝置名一致
    注:
    mlstrustedsubject:這一attribute包含了所有能越過MLS檢查的主體domain。
    mlstrustedobject:這一attribute包含了所有能越過MLS檢查的客體type。

  3. 在 android/external/sepolicy/untrusted_app.te 檔案中新增:
    allow untrusted_app relay_device:chr_file rw_file_perms;
    修改完後重新編譯系統,最好將裝置節點的許可權也改為777(chmod 777 /dev/relay)
    如果不想買次重啟都需要修改許可權,在 /system/core/rootdir 目錄下的 ueventd.rc 檔案新增修改許可權即可

tips:
因為有些第三方APP我們可能需要寫成系統自帶的軟體,所以需要將它放入system目錄,這裡說一下訪問system目錄的指令:首先執行“mount”可以檢視目前 system 目錄的掛載情況,我可以查詢到的情況如下:

/dev/block/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0

之後使用“mount”命令即可:

mount -o remount rw /dev/block/by-name/system /system

之後把 apk 複製到 system/app 下,並且將 apk 許可權改為644,進入檢視lib/armeabi資料夾下有沒有 .so檔案,因為有些apk檔案是要呼叫動態連結庫的,你不拷貝的話,就沒有辦法執行!會報錯,如果有so的話, 將這些*.so檔案都拷貝到/system/lib資料夾下,重啟後即可。

相關推薦

android6.0第三方APP獲得裝置節點訪問許可權

之前使用android4.4的系統進行開發時 system/app(系統自帶APP) 目錄下的 app 可以直接訪問 dev 目錄下的裝置節點,Android 5.0 以後,因為採取了 SEAndroid/SElinux 的安全機制,即使擁有 root許可權,或

linux IIC子系統分析(九)——例項分析通過裝置節點訪問I2c裝置

在《 linux IIC子系統分析(四)——I2c bus初始化》 中我們建立了I2C 匯流排驅動,I2C adapter device 和adapter drivers也在這時建立在我們實際開發中,I2C 匯流排驅動一般晶片原廠會提供,我們開發一般是設計裝置驅動。在訪問I2

在asp.net core2.1中新增中介軟體以擴充套件Swashbuckle.AspNetCore3.0支援簡單的文件訪問許可權控制

Swashbuckle.AspNetCore3.0 介紹 一個使用 ASP.NET Core 構建的 API 的 Swagger 工具。直接從您的路由,控制器和模型生成漂亮的 API 文件,包括用於探索和測試操作的 UI。 專案主頁:https://github.com/domaindrivendev/Sw

Android6.0之後如何優雅的進行各種許可權申請

前言: 最近在公司做一個關於地圖的APP,所以需要對地圖的定位許可權進行申請,剛開始瘋狂的在AndroidManifest.xml檔案裡面寫申請許可權,一系列的報錯和百度後才發現問題的所在,故此寫下此部落格也給自己和正準備採坑的小夥伴們一個提醒。(針對那些對安

淺談android6.0的新特性之執行時許可權處理解析

一.相關介紹 新的許可權機制更好的保護了使用者的隱私,Google將許可權分為兩類,一類是Normal Permissions,這類許可權一般不涉及使用者隱私,是不需要使用者進行授權的,比如手機震動、訪問網路等;另一類是Dangerous Permission

Android應用層對裝置訪問許可權的實現

android應用層對裝置的訪問許可權的實現 如果應用程式出現開啟裝置許可權不夠的錯誤,可能是建立裝置節點時賦予的許可權不夠。 問題:攝像頭總是許可權不夠,只能在shell下重新設定可用。 分析:android對裝置節點的管理不是使用udev,在init裡面,syst

MTK 平臺Android6.0 系統整合第三方apk 的解決策略

比如我要整合的apk 的名字叫ATest.apk 1.在package/app/目錄下面面加入一個資料夾資料夾名字:ATest(這裡最好使用apk 一樣的名字,方便以後更好的程式碼維護,如果使用其它隨便命名的名字也是可以得。) 2.把ATest.apk 放入到ATest 資料夾下,

Android app 線上更新那點事兒(適配Android6.0、7.0、8.0

一、前言 app線上更新是一個比較常見需求,新版本釋出時,使用者進入我們的app,就會彈出更新提示框,第一時間更新新版本app。線上更新分為以下幾個步驟: 1, 通過介面獲取線上版本號,versionCode 2, 比較線上的versionCode 和本地的versi

[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法

android在hal下 如何獲得對一個核心節點訪問許可權

Android 5.0以上,我們發現jni通過hal層去操作核心節點時PERMISSION DENIED 即使在Android原始碼工程目錄下,進入到system/core/rootdir目錄,裡面有一個名為ueventd.rc檔案,往裡面新增一行:/dev/h

解決Android6.0以上掃描WIFI獲得列表為空

我們知道Android SDK23之後Google對許多許可權進行了修改,比如wifi和藍芽。在Android6.0及以上掃描WIFI必須先開啟GPS,否則掃描得到的WIFI列表為空。解決方法如下: 1.首先在AndroidManifest.xml檔案中再增加以下許可權

[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果

Android O 裝置不允許安裝第三方APP

遮蔽手動安裝APK vendor/mediatek/proprietary/packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallStart.java public class Inst

Android6.0之AMS通過socket與zygote通訊建立app程序

轉自:https://blog.csdn.net/love000520/article/details/70230784 前面分析到了ActivityStackSupervisor類中的startActivityUncheckedLocked方法,該方法主要是為要啟動的activity準備一個t

Android6.0 藍芽搜尋不到裝置原因,MIUI許可權申請機制

為提供更高的資料保護 Android6.0版本上增加了關於Wifi和藍芽的許可權。 藍芽搜尋到裝置需要用到定位服務,所以在開發中 targetSdkVersion 大於等於23(6.0) 需要在程式碼中進行許可權獲取 需要在配置檔案中申請兩個許可權: <uses

Android app實現自更新和安裝,許可權檢測適配Android6.0以下和Android6.0和Android7.0和Android8.0總結篇

首先下載問檔案需要在AndroidManifest.xml裡新增SD卡讀寫許可權,下面兩個許可權:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <us

關於android6.0動態許可權造成的app crash問題

今天我們為公司內部員工開發的app出現了一個bug,因為我們的app要繫結imei所以我就讀取imei並且有個許可權READ_PHONE_STATE就是這個許可權出現了問題,我就納悶了怎麼會有問題呢,我已經在manifest上聲明瞭,然後我就看一下他的android版本6.

[Android6.0][MTK6737] 修改預設允許位置來源第三方應用安裝

修改方法 修改預設允許位置來源第三方應用安裝 Change-Id: Ic8526ec6483afcd60b9e6deed86d42acb2f014e3 diff –git a/base/packages/SettingsProvider/res/valu

MTK6580(Android6.0)-使用DTS註冊平臺裝置、匹配平臺驅動

一、初始化device treefile:kernel-3.18/init/main.casmlinkage __visible void __init start_kernel(void) { ... setup_arch(&command_line);

android6.0 adbd深入分析(一)adb驅動初始化、讀取adb節點執行緒

adbd之前看過一次,覺得程式碼太複雜然後,又是adb client  adb server adbd交織在一起感覺看起來太累,最近專案需要把它大致看完了,梳理下,感覺從adbd能學到很多東西,在此總結下,adbd的程式碼。 我只分析我看懂了,不可能面面俱到。而且主要注重在