스크린샷을 찍기 위해 Xorg에 대한 호출을 어떻게 감지합니까?

스크린샷을 찍기 위해 Xorg에 대한 호출을 어떻게 감지합니까?

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는 아무 것도 보고하지 않습니다. 테스트 방법이 잘못된 걸까요?

관련 정보