今天遇上某 App 禁止截屏,其实就是使用了下面这段代码
1
| getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
使用 frida 脚本可以绕过绕过这个限制 (使用 frida 需要将手机 root)。
1 2 3 4 5 6 7 8 9 10 11 12 13
| Java.perform(function () { var FLAG_SECURE = 0x2000; var Window = Java.use("android.view.Window"); var setFlags = Window.setFlags;
setFlags.implementation = function (flags, mask) { console.log("Disabling FLAG_SECURE..."); flags &= ~FLAG_SECURE; setFlags.call(this, flags, mask); }; });
|
执行 frida 命令 frida -U -l disable.js -n com.apps.android --no-pause
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ frida -U -l disable.js -n com.apps.android --no-pause
[Pixel 2::com.apps.android]-> [Pixel 2::com.apps.android]-> [Pixel 2::com.apps.android]-> Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE... Disabling FLAG_SECURE...
|
值得注意的是,这里使用了 -n
参数, attach 到目标进程,要不 App 会自动重启。看到输出调试信息后,
就可以正常截屏了。
使用 objection
objection「2」有此功能,执行下面命令即可: android ui FLAG_SECURE false
但是我测试失败了。
截屏小技巧 (lzx)
Android 截屏,可以使用一个快速的技巧 adb exec-out screencap -p > test.png
参考