2017-08-28 217 views
2

如何查询当前窗口/ Android应用程序的活动以检查window flag FLAG_SECURE?这可能使用ADB或任何其他命令行工具对付APK?如何通过命令行从当前APK屏幕查询FLAG_SECURE?

我的用例是:我想查询设备,看看是否在当前屏幕上启用FLAG_SECURE。我无法访问源代码,我只是将APK作为黑盒验收测试工具。

注意,这另一个问题是类似的,没有答案:Android - Window Flags

+0

我会想象它是在亚行'壳dumpsys'输出的地方。找到它的位置,并解析该输出以编程方式确定它,将是一件苦差事。 – CommonsWare

+0

@CommonsWare我尝试了你的建议,但不幸的是,在整个dumpsys输出中,FLAG_SECURE与不是页面之间没有区别。 –

+0

令人惊讶。但是,在这种情况下,我怀疑你运气不好。 – CommonsWare

回答

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().flagsFLAG_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 
1

无论任何安全层是当前可见不管具体窗口可以通过运行该命令中找到:

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

这将返回值0没有安全层可见1对于某些安全层可见

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

+1

SecureLayer可见性标志已从SurfaceFlinger dumpsys输出中删除https://android.googlesource.com/platform/frameworks/native/+/b5b3563%5E!/ –