如何查询Android应用的当前窗口/活动以检查window flag FLAG_SECURE?这是否可以使用ADB或任何其他命令行工具对抗APK?
我的用例是:我想查询设备以查看当前屏幕上是否启用了FLAG_SECURE。我无权访问源代码,我只是使用APK作为黑盒验收测试人员。
请注意,此其他问题类似且未得到答复:Android - Window Flags
答案 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