如何通过命令行从当前APK屏幕查询FLAG_SECURE?

时间:2017-08-28 22:43:08

标签: android adb

如何查询Android应用的当前窗口/活动以检查window flag FLAG_SECURE?这是否可以使用ADB或任何其他命令行工具对抗APK?

我的用例是:我想查询设备以查看当前屏幕上是否启用了FLAG_SECURE。我无权访问源代码,我只是使用APK作为黑盒验收测试人员。

请注意,此其他问题类似且未得到答复:Android - Window Flags

2 个答案:

答案 0 :(得分:2)

通过运行此命令,无论特定窗口如何,当前是否可以看到任何安全层:

adb shell "dumpsys SurfaceFlinger | grep -o secureVis=. | cut -d= -f2"

将返回{em>没有安全层可见的0值,或某些安全层的1

isSecure可能看起来更合适,但事实并非如此。它总是出于某种原因显示1,可能只是说设备通常支持安全页面。

答案 1 :(得分:1)

只需检查FLAG_SECURE输出中的mAttr行,您就可以了解某个特定窗口是否设置了dumpsys window <window id>

~$ dumpsys window com.android.settings | grep '   mAttrs='
    mAttrs=WM.LayoutParams{(0,0)(fillxfill) sim=#20 ty=1 fl=#85810100 pfl=0x20000 wanim=0x103046a vsysui=0x700 needsMenuKey=2}

fl=值是该窗口的WindowManager.LayoutParams().flags(十六进制)。 FLAG_SECURE是一个位掩码,其值为0x2000。您可以在adb shell

中进行检查
for f in $(dumpsys window com.android.settings | grep '   mAttrs=' | grep -o ' fl=#[^ ]*'); do [[ $((16#${f#*#}&8192)) -ne 0 ]] && echo 'FLAG_SECURE is set' || echo 'FLAG_SECURE is not set'; done