恢复 Android App 的截屏功能

今天遇上某 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 () {
// https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SECURE
var FLAG_SECURE = 0x2000;
var Window = Java.use("android.view.Window");
var setFlags = Window.setFlags; //.overload("int", "int")

setFlags.implementation = function (flags, mask) {
console.log("Disabling FLAG_SECURE...");
flags &= ~FLAG_SECURE;
setFlags.call(this, flags, mask);
// Since setFlags returns void, we don't need to return anything
};
});

执行 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

参考


恢复 Android App 的截屏功能
https://usmacd.com/cn/disable_security_flags/
作者
henices
发布于
2023年9月6日
许可协议