Android安全防護的「多工視窗中的介面高斯模糊處理」其實是個騙局?

編碼美麗發表於2018-07-09
一、情景介紹

應用開發過程中安全問題的確需要系統考慮也要開發者自己多考慮,一個小的細節可能會讓你的應用變的更安全,最近在用招商銀行App的時候無意中發現了iPhone上多工一個好玩的東西:

640?wx_fmt=png

看到招商銀行的應用有一個特別的地方就是當應用出現在多工中的時候介面被高斯模糊處理了,也就是看不到介面內容了,你看後面的今日頭條還是可以看到內容的,為什麼看不到這個應該都知道為了安全,假如招商應用當前的介面是餘額介面無意中被人看到多工視窗資訊等於就被人看到餘額,這個還是很危險的,因為比如像我的賬戶餘額一般不超過兩位數,如果這麼高的餘額被人看到了很危險的。


二、高斯模糊處理方式

然後我就好奇去網上一搜iPhone的這種技術處理是怎麼做到的,其實沒搜尋之前也大致猜到了,因為我們開發過iOS都知道有兩個回撥方法就是應用退到後臺和應用返回前臺,其實Android中也有這些事件但是和iPhone相比太多了處理起來很麻煩,而且iPhone多工就是雙擊Home鍵即可,但是Android機型很多需要處理多種機型的事件很麻煩:

640?wx_fmt=png

網上資料一大堆都是關於iPhone的,感興趣的同學可以百度自行實踐一下,很簡單就是在退出後臺之後把當前的應用UIWindow圖片取出來然後高斯模糊一下在設定回去即可,而關於Android的呢相關知識呢?我們在搜一下:

640?wx_fmt=png

看到了嗎?竟然沒有大部分都還是iPhone的,而且都是求助,也就說肯定有人想實現這樣的邏輯,那Android中到底能實現嗎?不多說了直接看看手機上驗證一下:

640?wx_fmt=png

我用oppo手機檢視的確可以呀,所以我就開始寫程式碼實現了,因為大致思路上面都說到了,我們首先監聽系統的開啟多工鍵事件,oppo手機開啟多工就是長按home鍵,所以我們只需要監聽長按home鍵事件即可,這個網上有方案了通過廣播就可以實現了,監聽到多工開啟的時候我們就把當前我們自己應用的TopActivity介面獲取到然後高斯模糊處理在用一個新的控制元件展示圖片,把新的控制元件放到View中即可,這裡需要了解Android中介面的結構:

640?wx_fmt=png

Android中每個Activity也會對應一個Window,我們可以在Activity中獲取到這個一般都是PhoneWindow,這個和iPhone非常類似,Window中包含了一個根檢視DecorView,這個其實是一個FrameLayout佈局,然後他還有一個ContentView,也是一個FrameLayout佈局,而且他的id是R.id.content,而後面我們呼叫setContentView等方法其實就是把我們自定義的佈局加到這個ContentView中。所以我們現在如果有了TopActivity之後就可以獲取當前的View檢視的介面圖片,這個網上也有對應的方法可以獲取當前Activity的截圖:

640?wx_fmt=png

有了Bitmap我們在高斯模糊處理一下,然後新建一個ImageView,把圖片設定展示處理之後,再把這個ImageView控制元件直接放到ContentView中,因為他是FrameLayout的所以可以疊加展示最上面一層。當應用回到前臺的時候就把當前最頂端的View移除也就是把高斯模糊的ImageView控制元件移除即可。


有了這些知識時候我們還需要利用一個棧維護當前的應用的Activity資訊,每次Activity銷燬就從棧中移除pop一下即可,每次onCreate的時候就放到棧頂push一下即可。然後每次需要操作的時候就取出棧頂activity操作即可,這個利用Java中的Stack資料結構即可。然後我們從網上找了一個比較通用的監聽多工事件:

640?wx_fmt=png

有了事件之後就開始新增控制元件:

640?wx_fmt=png

那下面開始執行程式吧:

640?wx_fmt=png


三、原來是個騙局

看到日誌了,說明我們新增的程式碼成功了但是可惜的是,他並沒有變模糊。

640?wx_fmt=png

然後就折騰了一上午,就換個手機試試發現一個奇葩的現象:

640?wx_fmt=png

小米4手機的招商銀行竟然沒有高斯模糊處理,那麼這裡就有兩種可能了,一種是小米4手機實現不了這個功能,還有一種就是oppo手機系統做了高斯模糊,所以我們直接驗證第二種即可,我們知道這種多工一般都在系統的UI包中:

640?wx_fmt=png

一般都是在 /system/priv-app/SystemUI.apk 中,手機root之後把這個apk匯出來看看:

640?wx_fmt=png

在recent目錄下逐個查詢之後看到這裡載入應用的縮圖和圖示資訊,繼續往下看:

640?wx_fmt=png

這裡看到核心點了,就是判斷是否為安全類應用,如果是就把圖片高斯模糊處理了,所以到這裡我們就清楚了這些操作原來是oppo手機系統做了,並非應用自己做的,那麼我們繼續看看這個安全類應用怎麼判斷的:

640?wx_fmt=png

檢視這個安全白名單是什麼:

640?wx_fmt=png

看到這裡有一些安全應用的特殊字元,如果應用的名稱包含了這些字元就認為是安全進行高斯模糊處理,我們為了驗證就把我們的應用名稱改成帶有支付字樣的看看會不會被高斯模糊:

640?wx_fmt=png

看到這裡把應用的名字加了支付字樣,系統就自動進行模糊處理了,好了到這裡我們就發現了Android中的高斯模糊處理其實是特定手機做的,那應用本身可以做嗎?通過案例可以看到應該很難實現,因為系統展示多工介面的時機早於我們監聽到的home鍵時機,所以我們操作修改介面已經晚了。所以這個就是為什麼標題說是騙局了,因為被oppo手機欺騙了,害的我折騰那麼長時間去實現結果還沒有成功。


那麼上面的高斯模糊處理不了?假如我們想讓應用安全點就是不要在多工中洩露資訊可以怎麼做呢?我們有兩種體驗很差的方式實現,一種是在當前Activity頁面新增安全屬性:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

這個新增之後應用在多工介面中就顯示透明樣式了:

640?wx_fmt=png

看到了吧,當前應用的頁面展示透明瞭,但是這樣的體驗是不是很差呀,使用者發現覺得很奇怪的,所以為了安全應用自己衡量,當然還有一種方式在application標籤中新增屬性:android:excludeFromRecents="true"  這樣應用就不會出現在多工列表中了,這樣使用者會覺得更奇怪,因為多工很多時候是為了更好的啟動應用,而你把它給隱藏了使用者體驗會更差。所以從上面來看,應用退到後臺介面有些資料的確敏感需要處理,但是也需要考慮使用者體驗。而對於Android中要想修改多工中的介面的話只能系統來做。應用自身是做不了的。


嚴重說明

本文的目的只有一個就是學習逆向分析技巧,如果有人利用本文技術進行非法操作帶來的後果都是操作者自己承擔,和本文以及本文作者沒有任何關係,本文涉及到的程式碼專案可以去編碼美麗小密圈自取,長按下方二維碼加入小密圈一起學習探討技術

640?wx_fmt=png


四、總結

有時候我們會發現應用的安全問題不值得忽視,一個小的問題做好了防護,會對使用者安全隱私提供了一份保障,銀行app的餘額要是被人看到了會很危險的,讓別人知道你那麼窮是多麼受打擊。所以為了保護使用者的自尊心必須要做好安全防護。


手機檢視文章不方便,可以網頁看

http://www.520monkey.com


《Android應用安全防護和逆向分析》 

 點選檢視圖書詳情

640?wx_fmt=jpeg

長按下面

相關文章