五種控制Android應用的權(quán)限的方法

2012-02-11 09:48:41來源:月光博客作者:fcerebel

這篇文章目的在于介紹Android系統(tǒng)上控制權(quán)限的方法,讀者只要使用過Android,或是對智能機平臺有所了解,就能看懂,不需要專門的編程知識。

這篇文章目的在于介紹Android系統(tǒng)上控制權(quán)限的方法,讀者只要使用過Android,或是對智能機平臺有所了解,就能看懂,不需要專門的編程知識。

1  為什么Android總是事無巨細地告訴你應用索取的每一項權(quán)限?

相比Apple,Microsoft嚴格控制生態(tài)系統(tǒng)(從蘋果給開發(fā)者的"App Store Guideline"可見一斑),只允許通過官方應用商店安裝應用,并對每份上傳進行仔細地審查而言,Android的開放就意味著,Google需要向用戶提供一系列用于為自己負責的流程、工具。所以在安裝應用前,Android總是要事無巨細地告訴你,應用肯需要控制什么權(quán)限。

同樣,開發(fā)者也制作了一系列易用的工具,用以鑒別可疑的應用程序,或是控制權(quán)限。

Android權(quán)限

圖1 Android 官方市場會強制提醒用

Andoird哪里開放了?

在Android中,用戶能自由從本地安裝應用,自由地對SD卡進行操作,自由選擇應用市場。

如果愿意放棄保修,用戶還能輕易地實行root,解鎖基帶(baseband)。只有一些產(chǎn)品會嚴密地鎖定bootloader(如摩托羅拉)。

最重要的是,因為ASOP(Android源代碼開放計劃)的存在,絕大部分的Android代碼都是開源的,開發(fā)者可以由此對Android系統(tǒng)進行深入的修改,甚至可以自行編寫一個符合Android規(guī)范的系統(tǒng)實例(如Cyanogen Mod)。正是因為ASOP,這篇文章才可能介紹多達5種原理不同的權(quán)限控制方法。

 

 

圖2 Android開源計劃的標志

開放的風險

不考慮Symbian,Windows Phone 6.5(及以下)平臺,那么幾乎所有的智能手機病毒都是Android平臺的,甚至官方Android Market也鬧過幾次烏龍。在國內(nèi)水貨橫行的市場,情況更是火上澆油,不法業(yè)者可以在手機的ROM,甚至是bootloader中做好手腳,讓用戶有病無法醫(yī)。

在Android中,用戶可以允許系統(tǒng)安裝來自"未知源"(也就是非Google官方的,或手機預置市場的)應用程序。于是,移動平臺最重要的門神------數(shù)字簽名就被繞過了。

圖3 Android 允許未知安裝未知來源的應用程

圖3 Android 允許未知安裝未知來源的應用程

出于Android的開放性,也有不允許"未知源"的反例:亞馬遜的Kindle Fire平板使用了深度定制的Android,它只允許安裝來自亞馬遜官方商店的應用程序。

圖4 亞馬遜的 Kindle Fire 僅允許通過自帶的市場安裝應用

圖4 亞馬遜的 Kindle Fire 僅允許通過自帶的市場安裝應用

2  Android有哪些"權(quán)限"

首先需要明確一下Android中的種種"權(quán)限"。Android是在Linux內(nèi)核上建立一個硬件抽象層(Android HAL),通過Dalvik以及各種庫來執(zhí)行android應用的。在手機啟動時,首先需要由Bootloader(HTC手機上稱作Hboot)引導Linux及手機上各個硬件設(shè)備的驅(qū)動程序,之后才啟動Android系統(tǒng)。所以其實我們會涉及到四種不同涵義的權(quán)限:

Android權(quán)限(Permission)

這指Android中的一系列"Android.Permission.*"對象,是本文的中心內(nèi)容。

Google在Android框架內(nèi)把各種對象(包括設(shè)備上的各類數(shù)據(jù),傳感器,撥打電話,發(fā)送信息,控制別的應用程序等)的訪問權(quán)限進行了詳細的劃分,列出了約一百條"Android.Permission"。應用程序在運行前必須向Android系統(tǒng)聲明它將會用到的權(quán)限,否則Android將會拒絕該應用程序訪問通過該"Permission"許可的內(nèi)容。

比方說,搜狗輸入法提供了一個智能通訊錄的功能,用戶可以在輸入聯(lián)系人拼音的前幾個字符,或首字母,輸入法就能自動呈現(xiàn)相關(guān)聯(lián)系人的名字。為了實現(xiàn)這個功能,輸入法必須聲明它需要讀取手機中聯(lián)系人的能力,也就是在相關(guān)代碼中加上聲明"android.permission.READ_CONTACTS"對象。

圖5 搜狗輸入法的智能聯(lián)系人功能
圖5 搜狗輸入法的智能聯(lián)系人功能

原生Android只提供了對"一刀切"式的管理,要么同意使用,否則就根本就不安裝應用程序。當用戶遇到希望使用程序的同時,又想禁止部分Permission的場合,他就無路可走。

于是,不少開發(fā)者就搗鼓出了"第三條道路";可惜的是,沒有一種方法能同時做到既不需要將手機固件Root,又完全不涉及對原始應用程序進行反向工程的方法。

Root

Root指獲得Android所在的Linux系統(tǒng)的Root(根)權(quán)限,有了根權(quán)限,你才能對Linux做出任意的修改。iOS中的越獄(Jailbreak) 相當于獲得iOS系統(tǒng)的Root權(quán)限(iOS是一種類Unix系統(tǒng),和Linux都使用Root的概念)。在已Root的設(shè)備中,通常都是使用一個叫"Superuser"(簡稱SU)的應用程序來向許可的程序授以Root權(quán)限。

Bootloader的解鎖(Unlock)

利用數(shù)字簽名,Bootloader可以限定只有正確簽名的系統(tǒng)可以被引導。在修改固件以獲得Root以前,解鎖Bootloader通常是必須的。安裝第三方修改、編譯的固件也需要解鎖Bootloader。

基帶(Radio)解鎖

在Android系統(tǒng)中,基帶是上層軟件與手機中無線設(shè)備(手機網(wǎng)絡(luò),Wi-Fi,藍牙等)的驅(qū)動程序之間的中介。國外的網(wǎng)絡(luò)運營商很喜歡鎖定基帶,從而保證用戶只能使用運營商自己指定的sim卡。在我國,鎖定基帶是非法的,手機制造商、網(wǎng)絡(luò)運營商也不可以通過鎖定基帶的方法對待違約客戶。iOS的"解鎖"就是解鎖iOS中的基帶軟件。

為什么要控制Android權(quán)限

魚和熊掌不可兼得,Android的世界有很多自由,壞人也能自由地做壞事。它的生態(tài)系統(tǒng)很強調(diào)自主:用戶可以自主地減小風險,僅使用官方市場的應用程序,也可以自主地解除安全限制,從而獲得更多自由。因此,在遇到壞事的時候,用戶也不得不自主一下:

1, 抵制不道德,乃至非法行為

幾乎所有的Android安全軟件都能對來電、信息進行控制,以減少騷擾。

另一方面,很多應用都會要求它們實際功能以外的權(quán)限,表現(xiàn)在非(主動)告知地搜集設(shè)備序列號,位置信息,誘使用戶默認地上傳聯(lián)系人列表等方面。

更壞一點的應用程序,則會踏入犯罪的范疇,比如能偷偷發(fā)出扣費信息,或是作為黑客的偷窺工具。

2, 減少惡意軟件的損害

惡意軟件即便潛伏成功,也難以獲得權(quán)限,從而減少損失。

3, 用戶有權(quán)自主地在抑制應用程序的部分權(quán)限時,繼續(xù)使用該應用程序,而只承擔由于自行設(shè)置不當而帶來的后果。

用戶擁有設(shè)備的所有權(quán),因此有權(quán)自主控制設(shè)備上的內(nèi)容、傳感器等對象的訪問;同時有權(quán)(不)運行,(不)編譯設(shè)備上的應用程序。

大多數(shù)應用程序在運行時,并未達成主動告知的義務(wù),是失誤;然而即使主動告知,用戶還是可以不理會。

為什么Android官方市場的強制提醒權(quán)限的行為不屬于主動告知:

通過Android官方市場,"打包安裝器"安裝應用程序時,所顯示的"權(quán)限"僅是在安裝包內(nèi)AndroidManifest.xml聲明的值,而非應用程序?qū)嶋H上會調(diào)用的內(nèi)容。該值僅用來表明Android系統(tǒng)能向應用授予的最大可能的權(quán)限。即便一個"Hello World"式的應用程序,也可以在AndroidManifest.xml中聲明所有可能的Android Permission。

這就是說,在AndroidManifest.xml中聲明的值與應用程序?qū)嶋H調(diào)用的權(quán)限有關(guān)聯(lián),但不等同,且這種提示是由Android系統(tǒng)負責實施的強制行為。

正確的理解是:"應用程序(被迫地)讓Android系統(tǒng)告知用戶,它在AndroidManifest.xml中所聲明的事項。"

這意味著應用程序在使用重要權(quán)限前,依然需要自行、主動地通知用戶相關(guān)事宜。 
然而,即便只是讓一半的應用程序達到以上的標準,也是不可能的。應用程序需要通過收集用戶信息,程序的錯誤日志。從而統(tǒng)計用戶的喜好,改進程序。另一方面,這也是發(fā)送精確廣告但不追溯到用戶身份信息的方式,這一點對于免費應用而言,是極其重要的。我們之所以能知道不同型號手機的占有率,應用軟件的流行度,是與這樣的統(tǒng)計不可分離的。

一旦每個應用程序都專業(yè)地主動發(fā)出提醒,不專業(yè)的用戶(大多數(shù)用戶都是不專業(yè)的)通常會將之視為如同海嘯警報一般的危機。

這么做對誰都沒有好處------用戶方的隱私權(quán)是毋庸置疑的,然而應用程序方面的獲取信息記錄的需求也是無可阻擋的。如果每個用戶都打算阻止,只會落得被迫接受不平等條約的下場,在溫飽以前,不會有人考慮小康的問題。

于是,現(xiàn)狀就變得有趣:用戶人享受著相同的服務(wù);其中大部分用戶出于不知情/好意,默默地向開發(fā)者、廣告商提供了信息,剩下的少數(shù)用戶則能阻斷這種勞務(wù)。而作為維持Android平臺的信息商人Google,只確保在它的地盤里,不會發(fā)生觸碰底線的事情。

一句話總結(jié):

設(shè)備是我的,不管你怎么說,反正我說了算,但我說的話大多是不算數(shù)的。    

3  權(quán)限控制的方法

這里開始介紹各種控制Android權(quán)限的辦法?上У氖牵瑤缀跛械氖侄味夹枰獙υO(shè)備進行Root,如果不這么做,則需要付出不小代價。

App Shield(國內(nèi)常見的名字:權(quán)限修改器)

它是一個需要付費的Android應用,其原理是修改應用程序的apk安裝包,刪除其中AndroidManifest.xml文件內(nèi),用于聲明權(quán)限的對應"Android.Permission.*"條目,然后再用一個公開的證書對安裝包重新簽名(需要允許"未知源"),這樣一來,應用程序就不會向系統(tǒng)申請原先所需的權(quán)限。當應用運行至相應的流程時,系統(tǒng)將直接拒絕,從而達到用戶控制權(quán)限的目的。

對于已安裝的應用,AppShield也會按照同樣方法制作好apk安裝包,然后讓用戶先卸載原始的應用,再安裝調(diào)整過的應用。除了該應用數(shù)字簽名外,用戶可以隨時通過執(zhí)行同樣的流程,將吊銷的權(quán)限恢復。

Apk文件的結(jié)構(gòu)

Android應用都是打包成以.apk擴展名結(jié)尾,實際上是zip的文件格式。

一個合法的apk至少需要這些成分:

根目錄下的"AndroidManifest.xml"文件,用以向Android系統(tǒng)聲明所需Android權(quán)限等運行應用所需的條件。

根目錄下的classes.dex(dex指Dalvik Exceptionable),應用(application)本身的可執(zhí)行文件(Dalvik字節(jié)碼) 。

根目錄下的res目錄,包含應用的界面設(shè)定。(如果僅是一個后臺執(zhí)行的"service"對象,則不必需)

Apk根目錄下的META-INF目錄也是必須的,它用以存放應用作者的公鑰證書與應用的數(shù)字簽名。

當應用被安裝后,這個apk文件會原封不動地移至設(shè)備的data/app目錄下,實際運行的,則是Dalvik將其中Classes.dex進行編譯后的Classes.odex(存放在Dalvik緩存中,刷機時的'cache wipe就是清除Dalvik的odex文件緩存')。

優(yōu)點:

完全不需要Root,適用于所有版本的Android設(shè)備。不會損壞系統(tǒng),可以吊銷任意一項Android權(quán)限。

問題:

1,需要重新安裝應用,該行為可能會丟失應用的配置、歷史記錄。

2,執(zhí)行權(quán)限吊銷的應用的數(shù)字簽名會被更改,無法直接更新。對于那些設(shè)計不良(沒有意料到'不聲明權(quán)限'情況的),或有額外自校驗的應用,可能會無法運行。

3,無法用于設(shè)備上的預裝應用,除非制造商好心地將該應用設(shè)置為"可以刪除"的狀態(tài)。

4,這個方法修改了apk包中的內(nèi)容------盡管實際上AndroidManifest.xml和數(shù)字簽名并不算是應用程序的本身,但修改它們可能引發(fā)著作權(quán)的問題。

5,需要開啟"未知源"。

6,這是一個收費應用。 

CyanogenMod 7.1(及以上版本)

Cyanogenmod是一款著名的第三方編寫的開源Android ROM。

CM7.1加入了控制權(quán)限的開關(guān),官方的名稱是"Permission Revoking",任何非系統(tǒng)/保護應用在安裝后,可直接吊銷任意一項權(quán)限,其效果等價于直接刪除apk包中AndroidManifest.xml的對應條目,但不會引發(fā)自校驗的問題。CM的權(quán)限工具的作用等同于AppShield,無非是在Android自身的權(quán)限系統(tǒng)中添加了一個開關(guān)。

優(yōu)點:

免費,使用簡便,可隨時,任意地吊銷、恢復非預裝應用的任意一項權(quán)限;不存在數(shù)字簽名的問題,因而不影響使用自校驗的應用程序。

問題:

此功能僅在Cyanogen Mod 7.1及以上版本提供,無法用于其它rom。因為是由Android系統(tǒng)出面吊銷權(quán)限,其實現(xiàn)原理與App Shield完全相同,同樣的,應用程序會因為設(shè)計不良而出現(xiàn)崩潰。  

Permission Denied

這是可以吊銷任意Android應用(注意,不當?shù)氐蹁N系統(tǒng)應用的權(quán)限可能會導致手機固件損壞,無法啟動)的任意權(quán)限,對權(quán)限的修改在重啟后生效。

實現(xiàn)原理應該與Cyanogen Mod 7.1+完全相同,適用于任何已經(jīng)Root的系統(tǒng),因為一般的Android系統(tǒng)雖然事實上支持權(quán)限吊銷,但沒有像Cyanogen Mod那樣放置接口,因此需要重啟后才能應用權(quán)限配置。同樣也有系統(tǒng)出面拒絕權(quán)限而導致的崩潰現(xiàn)象。

優(yōu)點:

效果與Cyanogen Mod中的權(quán)限吊銷效果一致,且可吊銷系統(tǒng)應用的權(quán)限。同時提供了免費與收費版本,免費版并沒有基本功能的缺失。適用于所有版本號不低于1.6的Android設(shè)備。

問題:

調(diào)整后的權(quán)限需要重啟才能生效。設(shè)計不良的應用會崩潰。不恰當?shù)臋?quán)限修改會損壞系統(tǒng),導致無法開機。  

PDroid

PDroid實際上是一個Android內(nèi)核補丁加上一個用于管理的外部應用。補丁需要在Recover環(huán)境中刷入系統(tǒng),也可以由開發(fā)者自行移植入系統(tǒng)。該軟件在Android ASOP 2.3.4代碼基礎(chǔ)上開發(fā),僅適用于沒有改動內(nèi)核的Android 2.3系統(tǒng),目前還未支持Android 4。

為了避免Cyanogen Mod 7.1+權(quán)限吊銷(Permission revoking)導致的崩潰問題,以及后臺服務(wù)(如LBE,QQ手機管家等,PDroid的作者認為通過后臺服務(wù)攔截權(quán)限并不是好辦法),PDroid并不阻止應用程序聲明權(quán)限,但會在其實際索取相關(guān)信息時,予以阻止。通俗地說,就是簽署協(xié)議但不執(zhí)行。在PDroid的用戶界面,用戶能隨時精確地控制涉及隱私的各項權(quán)限。對于某些內(nèi)容,除了阻止外,用戶還可以偽造一個隨機或指定的數(shù)據(jù)。

可控制的內(nèi)容包括:

IMEI(可偽造)

IMSI(可偽造)

SIM卡序列號(可偽造)

手機號碼(可偽造)

來,去電號碼

SIM卡信息

當前蜂窩網(wǎng)絡(luò)信息

(以上七者均來自Android.Permission.READ_PHONE_STATE)

GPS定位信息 (可偽造,來自Android.Permission.FINE_LOCATION)

基站定位   (可偽造,來自Android.Permission.COARSE_LOCATION)

系統(tǒng)自帶瀏覽器的歷史,書簽(Android.Permission.BOOKMARKS)

聯(lián)系人    (android.permission.READ_CONTACTS)

通話記錄   (android.permission.READ_CONTACTS)

系統(tǒng)日志   (android.permission.READ_LOGS)

當前賬戶列表   (android.permission.GET_ACCOUNTS)

當前賬戶的授權(quán)碼  (android.permission.USE_CREDENTIALS)

短信,彩信 (可能與這5個權(quán)限有關(guān))

android.permission.READ_SMS

android.permission.RECEIVE_SMS

android.permission.SEND_SMS

android.permission.WRITE_SMS

android.permission.RECEIVE_MMS

日歷    android.permission.READ_CALENDAR

PDroid的內(nèi)核補丁并不通用,每一個Rom都需要特定的補丁。開發(fā)者除了提供了幾個特定機型下Cyanogen Mod,HTC Sense修改版ROM的專用補丁外,還推出了一個補丁生成工具(PDroid Patcher),用戶可以給自己的ROM生成專用的內(nèi)核補丁。使用該Patcher需要安裝JDK(java Development Kit)。

優(yōu)點:

PDroid避免了通過Android系統(tǒng)進行權(quán)限吊銷的導致的潛在崩潰問題,也不需要后臺服務(wù)。對隱私信息的控制是最精細的。盡管設(shè)備必須Root,但應用本身不需要Root權(quán)限。

問題:

安裝過程是最繁瑣,最不可靠的,容易導致ROM損壞,適用范圍也小,需要用戶有相當?shù)募寄?能安裝JDK,會刷機)才可使用;只提供對隱私有關(guān)權(quán)限的控制,不提供網(wǎng)絡(luò)訪問,的控制。以這些為代價,它幾乎沒有其它缺點。  

LBE安全大師

實際上最常用的是以LBE為代表的通過一個Root權(quán)限的后臺服務(wù)來攔截相關(guān)行為的工具。除了LBE外,還有QQ手機管家等應用。這里以LBE安全大師為例介紹。

LBE是國內(nèi)一個叫"LBE安全小組"開發(fā)的工具,支持Android2.0~4.0。它的核心功能是像殺毒軟件一般,通過一個需要Root權(quán)限的后臺服務(wù),劫持所有調(diào)用權(quán)限的行為,并放行用戶許可的部分(其官方宣傳為'API級別攔截')。它和PDroid一樣幾乎不會引發(fā)應用程序崩潰,它支持攔截幾個涉及用戶的關(guān)鍵權(quán)限(LBE手機管家3.1/3.2):

讀取短信  (android.permission.READ_CONTACTS)

聯(lián)系人記錄  (android.permission.READ_CONTACTS)

通話記錄  (android.permission.READ_CONTACTS)

定位   (Android.Permission.COARSE_LOCATION

Android.Permission.FINE_LOCATION)

手機識別碼  (與Android.Permission.READ_PHONE_STATE有關(guān))

通話狀態(tài)  (與Android.Permission.READ_PHONE_STATE有關(guān))

發(fā)送短信(具體原理不明,同樣類似于禁止這五個權(quán)限

android.permission.READ_SMS

android.permission.RECEIVE_SMS

android.permission.SEND_SMS

android.permission.WRITE_SMS

android.permission.RECEIVE_MMS)

撥打電話  (android.permission.CALL_PHONE)

通話監(jiān)聽  (android.permission.PROCESS_OUTGOING_CALLS)

除此以外,LBE還可以分別控制應用在Wifi,手機網(wǎng)絡(luò)的聯(lián)網(wǎng)權(quán)限,其原理是依靠IPtables防火墻,而非通過Android的"Internet"權(quán)限。

此外LBE手機管家還提供基于智能內(nèi)容審查的短信攔截、來電歸屬地顯示,以及禁用系統(tǒng)(保護)應用,進程管理,殺毒等功能。

LBE提供兩個版本,一個叫"LBE安全大師",是一個全面的手機管家類應用,更新比較頻繁,另一個版本(LBE手機隱私衛(wèi)士,LBE Security lite)僅提供權(quán)限方面的管理。

考慮到主要市場在國內(nèi),LBE的發(fā)行策略看上去有些奇怪,它在Google的官方市場并不發(fā)行最新版。通常只能只能在LBE的官方網(wǎng)頁,以及國內(nèi)的應用市場獲得最新版本。

優(yōu)點:

使用非常簡單,功能強大而全面,風險很小,可以控制系統(tǒng)應用。適用范圍廣,有很多替代產(chǎn)品。

問題:

需要后臺服務(wù) (盡管蠶豆網(wǎng)有個評測,認為它對能耗幾乎沒有影響),不能控制所有的Android權(quán)限。     

4  自啟動的控制

Android對后臺服務(wù)有著最好的支持。

在Android中可以自由地開發(fā)一種稱為'Service'的后臺運行的對象,加上沒有蘋果公司對應用程序的嚴格限制。諸如QQ掛機,即時調(diào)用第三方應用程序之類的形式都可以輕易實現(xiàn)。

為了全面支持后臺服務(wù),也為了適應移動設(shè)備資源緊張,不得不經(jīng)常清理內(nèi)存的問題,應用可在系統(tǒng)中設(shè)置觸發(fā)器,當系統(tǒng)發(fā)生了某個特定特定事件時(系統(tǒng)啟動,撥打電話,收發(fā)信息,安裝、卸載應用,插上電源等,或應用程序自行定義的事件),就會觸發(fā)啟動應用程序。

AutoStarts 自啟動管理

AutoStarts是一個收費應用,通過它,用戶能了解系統(tǒng)中每一項程序會在什么場合下被觸發(fā)運行。如果提供Root權(quán)限,則還能禁止這樣的行為。

這里以Google Maps應用6.2版為例。默認情況下,這款應用總是會保持后臺運行,并每小時向Google發(fā)送一次當前用戶的位置信息。為了阻止這樣的行為,需要聯(lián)合使用AutoStarts與任意一款進程管理應用:在AutoStarts中,阻止Google Maps的自行啟動(如圖),在每次使用完后,把Google Maps的進程殺掉。 

5  其他

Root帶來的風險

有一個鉆牛角尖的說法認為,一旦對設(shè)備進行了Root,便無安全一說,只要惡意程序一旦偷偷獲得Root級別,一切都是空談。

這種說法之所以鉆牛角尖,是因為:一方面Android中的Root權(quán)限通常都是需要用戶通過Superuser應用進行授權(quán)的,這已經(jīng)夠用,雖然不能指望Superuser無懈可擊;另一方面,控制Android權(quán)限主要是為了讓應用程序在"灰色地帶"的行為收斂一些,它們實際顯然不是病毒等犯罪軟件。

著作權(quán)的問題 (作者不是法律方面的專家,以下言論僅供參考)

我們知道,Android中的應用程序是基于Java語言編寫的。而為了達到跨平臺的目的,Java軟件是以字節(jié)碼(或叫中間代碼,bytecode),而非計算機能直接執(zhí)行的機器碼(Machine Code,有時也叫作Binary)的形式存在。因此執(zhí)行Java軟件時,需要一個Java虛擬機(Android系統(tǒng)中的Java虛擬機就是Dalvik)負責解釋運行,有的時候,虛擬機還會通過即時編譯(JIT)的方法將字節(jié)碼編譯為機器碼后再運行,以提高程序的執(zhí)行效率。

這就出現(xiàn)一個很有趣的現(xiàn)象:

除非另行規(guī)定,作為設(shè)備的擁有者,用戶總是可以自行決定如何使用軟件,能自行決定程序能否訪問用戶自己的計算機(移動設(shè)備亦然)里面的各個內(nèi)容、對象。

由此衍生出,在需要對代碼編譯、解釋的場合,用戶也能通過對編譯器(解釋器)的干預,來影響代碼的執(zhí)行效果。在Android中,用戶還可以在Dalvik解釋、編譯的時候動手。

這是因為,著作權(quán)僅保護了軟件代碼不受到非授權(quán)的反向工程,未授權(quán)傳播等侵犯。另一方面,對于Android上的Java,網(wǎng)頁中的javascript程序,賦予用戶解釋、編譯的權(quán)利是程序能執(zhí)行的先決條件;同時,軟件發(fā)行者發(fā)通常也會主動提出放棄這種權(quán)利(表現(xiàn)為'軟件按原樣提供'、'不對使用軟件造成的后果負責'等條目)

在編譯、解釋的過程中,需要通過匯編(Assemble),連接(Link)等方法將編譯好的對象(Object)、方法(Function)聯(lián)系起來。默認情況下,這些行為是由原始的代碼(源代碼、中間代碼)與編譯器(解釋器)決定的,但是用戶可以通過制約編譯器(解釋器)的設(shè)置,從而影響到最終代碼。這么做是沒有問題的。

還有一種,應用程序在安裝后,會在系統(tǒng)中產(chǎn)生一些緩存,或注冊一些信息。當其中的內(nèi)容有關(guān)用戶數(shù)據(jù)時,讀取或修改它們也是沒有問題的。這就是所謂"只要是你的東西總是你的";也是Cyanogen Mod、Permission Denied不會涉及版權(quán)問題的原因所在。

 總之,一個Android應用之所以能運行的前提是:

1,首先,用戶允許使用這個應用

這也可以理解成:用戶安裝了應用(以及因此設(shè)定的后臺對象),購買了預裝應用的手機。這一點即不影響應用程序的主動通知義務(wù),也不影響用戶事后的干預。

2,接下來,用戶允許Dalvik對該應用使用"解釋","JIT"的方法,從而該應用程序得以執(zhí)行。

3,用戶隨時可以對該應用作出任意不違反版權(quán)的干預。

所以,在沒有另行規(guī)定的前提下,用戶總是可以自行決定,通過給應用程序分配自定義的權(quán)限;或是在應用程序調(diào)取內(nèi)容,對象時予以阻斷。同時,用戶也需要自行承擔因不當操作產(chǎn)生的后果。    

附錄:

1、 數(shù)字簽名

數(shù)字簽名是一種使用了公鑰加密領(lǐng)域的技術(shù)實現(xiàn),用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證。數(shù)字簽名可以輕易地驗證完整性(正確性),合法簽署的數(shù)字簽名具有不可否認性。 (摘錄自維基百科"數(shù)字簽名"條目,有修改)

2、 版權(quán)聲明

文章中引用的圖標,圖片或圖片的部分,以及部分文字的引用,僅出于合理使用的目的,可能是持有人版權(quán)所有的。

關(guān)鍵詞:Android權(quán)限

贊助商鏈接: