X 可以截取整个桌面的屏幕截图。我想在发出这些调用时检测它们,但通过 ebpf 或 sysdig 之类的方式,而不是在服务器级别修补调用。我该如何做到这一点?是否有一个程序也可以做到这一点?
答案1
[更多的是评论而不是答案,但评论太长了]
执行此操作的程序必须在服务器级别挂钩 X11 调用(通过类似机制XACE
, ~ 就像 ebpf 或 sysdig 对内核中的调用所做的那样)。我不知道有什么现成的东西可以做到这一点,但我没有对此事做太多研究;-)
如果您只想监视 X11 客户端执行的请求,您可以使用RECORD
扩展名(如xtruss
确实)或强制客户端通过 X11 代理,例如xscope
并使用根窗口作为源(或不属于该客户端的任何窗口/像素图)查找任何CopyArea
、等请求。GetImage
总的来说,过分关注 X11 应用程序是否能够进行“截图”是毫无意义的,因为任何能够访问 X11 服务器的程序都可以做更多的事情,如果不可信,就不应该留在它附近。此外,在同一用户下运行的本地进程也可以ptrace(2)
相互通信并直接读取彼此的内存。
答案2
是的,我宁愿更专注于其他事情,而不是想知道 X11 应用程序是否正在截图,但我想我现在应该解决这个问题。
网上似乎没有任何关于如何编写这些 x11 挂钩的材料,但我会研究一下 xtruss。
我现在正在运行 xtruss。使用我从 xwininfo -root -tree 获得的 X id,我设置 xtruss 来监视该资源。但是,当我执行 xwd -i -out 文件时,xtruss 不会报告任何内容。测试方法是否错误?