
X kann Screenshots des gesamten Desktops machen. Ich möchte diese Aufrufe erkennen, wenn sie getätigt werden, aber über etwas wie ebpf oder sysdig, anstatt die Aufrufe auf Serverebene zu patchen. Wie kann ich das machen und gibt es ein Programm, das das auch kann?
Antwort1
[eher ein Kommentar als eine Antwort, aber zu lang für einen Kommentar]
Ein Programm, das dies tun würde, müsste sich in die X11-Aufrufe auf Serverebene einklinken (über einen Mechanismus wieXACE
, ~ genau wie ebpf oder sysdig es mit den Aufrufen im Kernel machen). Ich kenne kein Fertigprodukt, das das kann, aber ich habe auch nicht allzu viel zu dem Thema recherchiert ;-)
Wenn Sie nur die Anfragen eines X11-Clients überwachen möchten, können Sie denRECORD
Erweiterung (alsxtruss
tut) oder zwingen Sie den Client durch einen X11-Proxy wiexscope
und suchen Sie nach allen CopyArea
, GetImage
, usw. Anfragen, die das Stammfenster als Quelle verwenden (oder ein beliebiges Fenster/Pixmap, das NICHT diesem Client gehört).
Im Allgemeinen ist es ziemlich sinnlos, sich darüber zu sorgen, dass eine X11-Anwendung „Screenshots“ machen kann, da jedes Programm mit Zugriff auf einen X11-Server viel mehr kann und, wenn es nicht vertrauenswürdig ist, NICHT in der Nähe davon liegen gelassen werden sollte. Außerdem können lokale Prozesse, die unter demselben Benutzer laufen, ptrace(2)
sich gegenseitig ansprechen und direkt den Speicher des anderen lesen.
Antwort2
Ja, ich würde mich lieber auf andere Dinge konzentrieren, als mich zu fragen, ob eine X11-App Screenshots macht, aber ich dachte, ich würde diesem Drang vorerst nachkommen.
Es scheint im Internet kein Material zum Schreiben dieser x11-Hooks zu geben, aber ich werde mir xtruss ansehen.
Ich verwende im Moment xtruss. Mit den X-IDs, die ich von xwininfo -root -tree erhalten habe, stelle ich xtruss so ein, dass diese Ressource überwacht wird. Wenn ich jedoch eine xwd -i -out-Datei ausführe, meldet xtruss nichts. Ist die Testmethodik falsch?