編輯:關於Android編程
今天我們來看一下Android中的屏幕錄制功能帶來的一個漏洞問題,在之前的一篇文章中介紹了關於Android5.0新增的Api來進行錄制屏幕視頻,不了解的同學,可以點擊這裡。當時記得我們在使用這個api的時候,系統會給一個授權提示:
這個對話框是系統彈出來的提示消息,主要由兩部分組成,應用的名稱+提示文案,看似是一個很平常的授權對話框,但是這背後卻有這個一個很大的UI漏洞,而且在之前的一篇文章中了解到,這個錄制屏幕功能的危險性還是很大的。那麼這個UI漏洞是啥呢?
其實很簡單,就是Android系統中在彈出對話框的時候,如果內容過多,會采用滾動樣式,來展示全部消息,而不是使用字符省略的方式。那麼這裡就存在一個問題了,如果把應用的名稱故意弄的很長,導致後面一段提示文案:“將開始截取您的屏幕上顯示的所有內容”給抵到底部,只有滑動的時候才能看到,這樣來騙取用戶點擊立即開始。同時再把應用的名稱改成一些銀行或者是社交賬號,支付應用的提示文案,比如:“xx寶新增了特性...點擊立即開始,即可體驗!”,而用戶相信就開始點擊了,當然這裡還需要一個功能,就是監聽系統的TopActivity,當監聽到用戶打開了銀行app或者是社交app的時候,就去申請權限,彈出對話框!
下面通過MediaProjectionManager的源碼來分析一下,授權提示流程:
在使用錄制屏幕功能的時候,去授權頁面調用的是createScreenCaptureIntent方法,獲取授權Intent:
源碼了解到了,這裡調用的是MediaProjectionPermissionActivity來進行授權:
這裡直接用系統對話框展示了。
那麼下面就來演示一個例子,比如現在惡意軟件在後台監聽到了用戶啟動了某某應用app,然後就啟動授權界面:
惡意app的名稱為:
這就看到了,這些提示信息,對於用戶打開銀行app的時候給與提示感覺還是很正常的,而且一般彈出的提示對話框,用戶不會去滑動看到底部的,而關鍵提示信息就在底部:
所以,這裡就是一個UI漏洞,Google在處理這個對話框的時候,沒有使用省略號來做處理,而用滾動方式,但是最重要的提示信息卻被搞到底部了,用戶很難發現,很多用戶就認為很正常按照提示點擊立即開始了,一旦授權了,那麼惡意app就在後台偷偷的錄制你的屏幕,當你輸入賬號和密碼的時候也都是可以被記錄了。在把錄制app發到服務端進行分析。賬號就會被盜取!
上面分析完了這個漏洞,其實理解還是很簡單,就是一個UI漏洞,在關鍵中的提示信息展示的時候,沒有做省略處理,從而把最重要的提示文案給隱藏了。導致用戶被騙取了授權。
該漏洞實際上是由於Google沒有制定合理的Android應用名稱規范導致,綜合表現為如下兩點:
1) 沒有規范應用名稱長度,使得應用名稱可為任意長度;
2) 沒有規范應用名稱字符集,如應用名稱可包含換行符和制表符。
那麼關於這個漏洞我們該怎麼修復了呢?
當然Google在後續的6.0系統中進行修復了這個問題,修復之後的效果:
采用了省略號代替了,不會把重要的提示信息給隱藏了。那麼對於5.0系統的用戶該怎麼辦呢?這個漏洞依舊存在,這就要求我們開發者做一下工作了,在Android中涉及用戶隱私的Acitivity中(例如登錄,支付等其他輸入敏感信息的界面中)增加屬性:
WindowManager.LayoutParams.FLAG_SECURE
看一下屬性源碼說明:
該屬性能防止屏幕被截圖和錄制。這個屬性就是可以防止當前Activity不會被錄制,我們可以做一個案例:
還記得上一篇內容中,我們使用MediaProjection進行截圖功能,如果加上了這個屬性,再次截圖,效果如下:
看到下面的截圖是一片漆黑,截圖失敗的,而且這時候使用adb shell screencap 命令去截圖也是失敗的:
所以從這裡可以看出來,其實adb shell screencap和screenrecord命令底層的實現和MediaProjection是一樣的。
下面再來看看視頻錄制功能:
看到了,我們的app,沒有被錄制,也是一片漆黑,這個屬性就是為了防止當前應用被錄制的功能!
所以在5.0的系統中,或者對於銀行app,社交app,支付app等,開發者應該把當前登錄的Activity添加這個屬性是最安全的!如果你沒有添加的話,就加上吧,給自己的app加上一份保險!
到這裡,我們就分析完了這個錄制功能的UI漏洞,下面來總結一下
第一、漏洞產生的原因
因為Google在處理對話框提示的時候,沒有做字符限制,導致一些重要的提示信息被遮擋
第二、漏洞的危險
惡意app利用這個UI漏洞,把自己的app名稱弄得很長,而且在後台監聽用戶打開了一些支付app,銀行app之後,就彈出這個授權對話框,但是因為名稱太長了,重要的提示文案被蓋住了,用戶很容易被騙取授權
第三、漏洞修復
Google在6.0以後進行了修復,使用字符限制功能,但是對於沒有升級到6.0的用戶,這時候對於我們開發者就需要在自己的項目中給Activity添加安全屬性,特別是登錄頁面,這樣就可以防止當前頁面被錄制或者截屏了。
Android中5.0好不容易釋放了錄制屏幕功能的api,結果就弄出這個漏洞,也是服了Google了,本來錄制功能就非常危險,卻在授權的時候,還有這麼一個UI漏洞,讓用戶被惡意app騙取授權,在後台偷偷錄制桌面信息了,人生處處是坑,Android處處是漏洞!
最近閒著沒事做了一個Android小程序,具體如下:效果圖:原始界面點擊按鈕運行 運行後界面實現代碼:public class Mai
在大多數的騷擾攔截類的軟件中都會有定時攔截這個實用的的功能,其實,也不難實現。 看圖: 在未選中啟用時間段時
本文總結分析了Android編程獲取控件寬和高的方法。分享給大家供大家參考,具體如下:我們都知道在onCreate()裡面獲取控件的高度是0,這是為什麼呢?我們來
Android與Unity交互研究 Android與Unity交互研究 unity與android交互的由來 unity簡單介紹 unity與android交互