DRM,英文全稱為Digital Rights Management,譯為數字版權管理。它是目前業界使用非常廣泛的一種數字內容版權保護技術。隨著知識產權保護受重視的程度日益提高,Android也加入了DRM來有效保護數字版權。
DRM不是一項技術,而是一類技術。很多機構和聯盟都提出過相應的DRM標準。例如Open Mobile Alliance推出的OMA DRM、Marlin Developer Community提出的Marlin DRM,蘋果的Fairplay和微軟的Play Ready/Windows DRM。而Google則通過收購Widevine公司推出了Widevine DRM。
DRM代碼結構大體可分為三部分:
第一部分是Android中的基本框架,包括WVMExtractor等。這部分代碼在AOSP中都可以看到,屬于Open Source的內容。這部分代碼大多沒有實質性內容,相關功能的實現封裝在第二部分的專利代碼包中。
第二部分是Widevine的專利代碼包。這部分代碼需要得到Google授權后才能得到。該包提供了很多Widevine專用庫用于完成Widevine DRM權限檢查和解密。同時,它還提供了一些Sample App用于測試。
第三部分是手機廠商自身的安全認證。Widevine是一個很強的版權控制體系,它甚至可在硬件層與廠商的安全機制綁定。很多知名的手機廠商都在boot等底層中加入自己的安全機制,只有通過可信賴的boot loader進行刷機才能得到具有正常權限的手機軟件,并可以使用Widevine。這也是為什么很多破解的手機無法使用Widevine的原因.
Android設計了一個通用的DRM軟件框架,不同的DRM解決方案可通過Plugin的方式集成到Android系統中,左圖所示為Android中的DRM軟件架構
1).DRM Framework API模塊是Framework層暴露給App的接口。
2).DRM Framework API模塊通過Binder機制和位于drmserver進程中的DRM Manager模塊通信。DRM Manager加載并管理系統中所有的DRM插件。
3).DRM Plugins是真正實現權限管理、數字內容解密等工作的模塊。根據DRM標準的不同,這些Plugins的實現亦不相同。另外,一個手機可能會集成多個DRM Plugin。這是因為媒體文件如果采用不同的DRM解決方案進行加密的話,手機在播放它們時,DRM Manager需找到對應的DRM Plugin以進行解密。
MediaCodec模式:MediaCodec、MediaCrypto以Java API的形式直接暴露給應用層。應用層能夠控制解碼、解密的過程。
Crypto Plugin是實際完成解密的模塊。