防止 Android 應用內截圖 | Makito Log

防止 Android 應用內截圖

很多時候,用戶需要在我們的應用中輸入類似於身份證號、密碼、銀行卡號等敏感信息,此時如果在後臺不懷好意的應用程序對這些敏感頁面進行截圖,將導致用戶的個人信息泄露。 Android 爲我們提供了一種可以防止 Activity 被截圖的方案來保護用戶的隱私。

setContentView 前向窗口添加一個 FLAG_SECUREFLAG

0x00 代碼#

public class TestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
        setContentView(R.layout.main);
    }
}

0x01 實機測試#

無法通過物理組合鍵截圖
無法通過物理組合鍵截圖

通過 Shell 強行截圖成功 但輸出的截圖文件除 StatusBar 含有不規則的像素外幾乎爲全透明
通過 Shell 強行截圖成功 但輸出的截圖文件除 StatusBar 含有不規則的像素外幾乎爲全透明

0x02 結語#

Android 使用 FLAG_SECURE 限制了 SurfaceFlinger 的功能,也用它將圖形緩存區標記爲不可截圖,從而一定程度上的保證了屏幕區域的安全,正常開發的情況下推薦使用。

當然,如果你的用戶安裝了 Xposed 框架,別費盡心思了。Forget it~ :D