Android 中的那些許可權

2021-06-26 18:37:41 字數 4042 閱讀 3968

隨著智慧型手機的普及,越來越多各式各樣的應用和服務出現在手機平台上。這些應用和服務要訪問手機上的

資源,就牽涉到許可權問題。手機又是乙個非常敏感的平台,涉及到使用者的很多個人資訊,隱私等等,在這種背景

下許可權控制顯得非常有必要。

1.android

中已經定義了

permission

這個概念來管理系統中的許可權,但是乙個惡意程式可能會申請超過其需求不必要的許可權,獲取使用者資訊,對手機進行破壞等等,怎麼樣能夠更嚴格的控制系統中的行為?有三個方案: 1)

android

不是定義了

permission

嗎?我們可以通過去除惡意

的許可權,達到控制的目的。但是這樣會帶來乙個問題,當該

需要訪問資源時

ams會

checkpermission

,如果它的

permission

被去除了,系統就會拋

exception

,可能會

crash

。這樣帶來的使用者體驗不好,使用者會說

正在執行怎麼出錯停止執行了? 2)

在系統中訪問特定資源的地方加

hook

,如果不允許該

訪問資源,返回無效值,使其得不到有用資訊或者無法寫入資訊。

hook

通過root

,程序注入的方式實現。此方案的缺點是系統需要

root

,而root

會給手機帶來很多風險,所有

都可以獲取最高

root

許可權。市面上的手機安全軟體都是通過這種方式,不

root

就不能進行許可權控制。 3)

如果系統本身已經擁有這樣的

hook

點,則不需要

root

也可以實現許可權控制。具體做法是單獨執行乙個安全程序,如果有訪問資源的行為,從

hook

點發起ipc

呼叫到安全程序,安全程序根據訪問者的

package name

,uid

,pid

等資訊決定允不允許訪問。這是我們的方案,系統內部已經整合了安全機制,真正做到不

root

也安全的

android

系統。 2.

那麼我們就來看看哪些許可權是使用者關心的,怎麼處理才可以滿足許可權控制需求並獲得最佳體驗。首先是一些敏感資料。 1)

資料庫資訊,比如聯絡人資訊,聯絡歷史,簡訊等。這些資訊都是很重要的,而很多

android

中是以provider

的形式儲存,通過

contentresovler

訪問,可以擁有

query

,insert

,delete

,update

操作。不同資訊在資料庫中通過

url區分,每一條記錄是一行,通過檢測判斷

url和

資訊,決定允不允許讀寫。 a.

query操作

通過特定

url查詢,返回對應

cursor

。如果禁止此次查詢,可以返回乙個

wrapcursor

,該cursor

是對原來資訊的封裝,

拿到之後獲取不到裡面的任何資訊,沒有行、列,任何操作都會返回無效值。 b.

insert操作

往對應url

中插入一行,返回插入後的那一行。如果禁止此次寫操作,返回

null

,不執行插入操作。

c.delete操作

將對應url

中刪除若干行,返回刪除行數。如果禁止刪除,返回

-1,不刪除任何內容。

d.update操作

更新url

中的若干行,返回更新行數。如果禁止更新,返回

-1,不進行任何更新。

2)手機中有很多跟硬體相關資訊,比如

imsi

,imei

,手機號碼等。這些資訊標示著這部手機在網路中的身份。通過

telephonymanger

拿到手機資訊

phonesubinfo

,再使用

phonesubinfo

的方法獲取對應資訊。不想讓

獲取這些有用資訊,只要在

phonesubinfo

的這些方法中返回

null

就可以。 a.

imei

:國際移動裝置身份碼,與每台手機一一對應,而且該碼是全世界唯一的。

phonesubinfo

的getdeviceid

方法獲取。

b.imsi

:國際移動使用者識別碼,區別移動使用者的標誌,儲存在

sim卡中,可用於區別移動使用者的有效資訊。

phonesubinfo

的getsubscriberid

方法獲取。 c.

手機號碼:

phonesubinfo

的getline1number

方法獲取。

3)android

中有兩種跟手機位置相關的資訊,一種是通過

gps獲取的精確位置資訊(

fine_location

),一種是通過基站獲取的粗略位置資訊(

coarse_location

)。具體實現是

通過locationmanager

的requestlocationupdate

方法註冊乙個

listener

,當位置資訊變化時通知

。使用者可能不希望暴露自己的位置,那麼可以在此方法中真正註冊

listener

之前返回,使

無法獲取手機位置資訊。

3.android

手機中的敏感行為: 1)

打**

乙個哪怕是後台的

service

都可以申請這個許可權,並且偷偷的打**,而使用者只想讓特定軟體具有該功能,比如系統自帶的

phone

。如何控制打**許可權呢?打**實際上最終通過

startactivity(intent(action_call))

啟動的呼叫介面,進行撥號。如果我們禁止打**,只要在

ams中

startactivity

這個動作真正執行之前返回就可以了。

2)**錄音

這個許可權比打**還要危險,因為打**還要彈出系統呼叫介面,而錄音則可以靜默執行。如果有惡意程式在後台錄音,會造成使用者隱私甚至是商業秘密等洩露。對通話進行錄音要通過

mediarecorder

物件來操作,設定錄音**為**

setaudiosource(voice_call

)。如果要禁止,在其開始錄音(

mediarecorder.start

)真正執行之前返回,或者使其無法正常

start。

3)發簡訊

很多都申請這個許可權,大都是為了方便使用者使用其服務,但是也不乏發簡訊扣費的服務,如果使用者玩遊戲時不小心點了某個視窗就有可能定製了某服務,幾塊錢就花出去了。更嚴重的是

可以悄悄地在後台傳送簡訊,導致使用者資訊洩露。傳送簡訊需要通過

smsmanager

提供的send

方法,在真正開始傳送之前檢查傳送發起者是否合法,如果禁止就返回,使傳送動作沒有真正執行。

4)在通知欄彈通知

手機的螢幕本來就小,很多軟體偏偏又要在通知欄彈很多廣告之類的通知,讓很多使用者很苦惱。彈通知是通過

notificationmanager

的notify

方法,最終在

notificationmanagerservice

的enqueuenotificationinternal

方法中加入通知佇列。在此之前做檢查,不希望彈的通知不准加入佇列,就可達到控制彈通知的目的。

4.綜上,我們的方案是系統本身就提供許可權檢查機制,不需要將手機

root

。在訪問敏感資源或行為時,提示使用者,阻止使用者不希望的訪問,讓使用者真正做手機的主人,使潛在的危險降低到最小。

Android上被濫用的那些許可權

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!現在的android手機,很多東西都被濫用,也沒用爛了。其中乙個就是許可權。下面是幾個被用爛了的許可權 1.萬惡的boot completed,誰都想一開機就起來。為了kpi,必須起來。使...

修改Android中的檔案許可權

在android中有乙個精簡版的linux系統,因為是linux系統,那麼有時候在寫android應用程式的時候會遇到許可權問題。我們都知道在shell中可以通過chmod命令來修改許可權,所以就希望通過程式來執行shell中的命令,如何來做呢?看下面 private booleanruncomma...

Android中執行許可權的申請

在android開發中,針對版本越來越高的手機,各種許可權都需要使用者手動授權,所以關於手機許可權的申請是必不可少的,如呼叫手機拍照的功能,需要手機的讀寫許可權,下面介紹乙個超級好用的工具,只需在build中引入,就可以輕鬆的申請各種許可權。implementation com.yanzhenjie...