C.W.K.
Stream
Lesson 03 of 05 · published

재현으로 불투명 타깃을 증명해

~11 min · recopy-compare, opaque-target, window-match, reproduction

Level 0차가운 부싯돌
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"타깃을 검사 못 하면, 재현해. 다시 복사해 — 같은 단어가 돌아오면, 같은 선택이 아직 거기 있어."

다시 읽을 요소가 없어

네이티브 재증명은 포커스된 요소와 그 범위 읽기에 기댔어. 불투명 타깃 — Track 3 의 Chromium 과 Electron 앱 — 은 다시 읽을 그 요소를 안 줘서, '범위 비교' 접근 전체가 테이블에서 빠져. 못 보는 걸 검사 못 해. 근데 그래도 타깃을 다른 방식으로 증명할 수 있어, 이 앱들이 미덥게 지원하는 한 가지를 써서: 복사.

재현으로 증명

아이디어는 선택을 재현해서 증명하는 거야. Cmd+C 를 다시 내고 내려침에 캡처한 정확한 텍스트가 클립보드로 돌아오면, 같은 선택이 여전히 같은 데서 활성이야 — 앱이 방금 널 위해 증명한 거야. 다른 문자열이 돌아오면(또는 아무것도), 대기 동안 선택이 바뀐 거고, 교체하면 안 돼. 재현이 검사를 대신해: 타깃을 볼 순 없어도, 선택을 다시 보여달라 하고 안 바뀐 걸 확인할 순 있어.

네이티브:  요소 다시 읽기 -> 범위 비교         (검사)
불투명:    같은 창? + 재복사 -> 텍스트 비교      (재현)

둘 다 같은 질문에 답해 — '내가 캡처한 정확한 선택이
아직 활성인가?' — 타깃이 허락하는 무슨 수단으로든.

같은 창, 같은 선택

불투명 증명엔 두 부분이 있어. 먼저, 같은 포커스된 창이 여전히 최전면인지 확인 — 이 앱들이 노출하는 더 거친 정체성. 둘째, 재현을 돌려: 새롭고 되돌릴 수 있는 Cmd+C(Track 3 의 그 되돌릴 수 있는 프로브, 완전한 페이스트보드 보존까지 다), 그 결과가 캡처한 선택과 같아야 해. 창이 맞고 그리고 재복사가 정확한 텍스트를 재현할 때만 Flint 이 타깃을 증명된 걸로 다뤄. 어느 확인이든 실패하면 결과를 대신 클립보드로 보내.

상태를 검사 못 할 때, 재현하는 게 유효한 증명이야. 검증이 항상 값을 직접 읽는 걸 뜻하진 않아. 때로 조건이 여전히 성립하는지 아는 정직한 방법은 그걸 만든 걸 다시 트리거해 같은 결과가 나오는지 확인하는 거야. 재현은 알려줄 수 있는 것에서 검사보다 약하지만, 검사가 불가능한 데선 동일한 출력을 내는 충실한 재트리거가 진짜, 변호 가능한 증명이야 — 상태가 성립했다고 가정하는 것보다 훨씬 나아.
재복사는 또 하나의 되돌릴 수 있는 프로브 — 같은 완전 복원을 빚져. 불투명 타깃 증명은 원래 읽기가 그랬듯 클립보드를 빌리니까, 같은 의무를 나라: 페이스트보드 전체를 먼저 스냅샷하고, 비교 복사를 하고, 뒤에 전부 복원 — 성공이든 불일치든. 사용자 클립보드를 조용히 먹은 증명 단계는 한 안전을 다른 걸로 맞바꾸는 거야. Track 3 의 되돌릴-수-있는-프로브 규율은 일회성 트릭이 아냐; Flint 이 뭔가 알려고 클립보드를 만질 때마다 재사용돼.

Code

불투명 타깃 증명: 같은 창 + 선택 재현·swift
func proveOpaque(_ snap: TargetSnapshot) -> Bool {
    // 1. 같은 포커스된 창이 여전히 최전면(불투명 앱이 노출하는 정체성).
    guard let front = NSWorkspace.shared.frontmostApplication,
          front.processIdentifier == snap.pid,
          sameFocusedWindow(as: snap) else { return false }

    // 2. 새롭고 되돌릴 수 있는 복사로 선택을 재현 (Track 3).
    //    capturePasteboard -> Cmd+C -> 읽기 -> restorePasteboard, 항상.
    let reproduced = probeSelectionViaCopy()   // 완전히 클립보드 보존

    // 같은 텍스트 돌아옴 == 같은 선택 여전히 활성 == 교체 안전.
    return reproduced == snap.selection
}

External links

Exercise

Electron 채팅 앱에, 완전한 불투명 증명을 설계하고 각 단계가 뭘 배제하는지 이름 붙여: (1) 같은 포커스된 창 확인, (2) 되돌릴 수 있는 재복사, (3) 캡처한 선택과 비교. 그다음 재현이 네이티브 범위 검사보다 약한데도 여기서 왜 받아들일 만한 증명인지, 그리고 재복사가 Track 3 로부터 무슨 의무를 물려받는지 설명해.
Hint
창 확인이 '사용자가 창/앱 전환' 을 배제; 재복사가 '선택 바뀜/무너짐' 을 배제; 비교가 '이제 다른 텍스트 선택됨' 을 배제. 재현이 받아들일 만한 건 불투명 타깃엔 검사가 불가능하고, 동일 텍스트를 내는 충실한 재복사가 같은 선택이 활성임을 진짜 증명하니까. 물려받는 의무는 되돌릴-수-있는-프로브 규율: 비교 복사 둘레에서 페이스트보드 전체를 스냅샷·복원, 모든 경로에서.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.