Playball Logo

Command Palette

Search for a command to run...

목차 열기

04. 마우스 궤적 합성

공격 에이전트가 방어 시스템과 가장 첨예하게 맞부딪히는 지점이 마우스 궤적입니다. 어떤 원칙을 잡느냐에 따라 탐지 회피 수준과 수행 속도가 결정됩니다.

설계 철학 — 형태와 속도의 분리

핵심 원칙

속성전략이유
형태 (직선성·손떨림)수집된 인간 샘플 분포에서 샘플링 + 가우시안 변동동일 시그니처 형성 방지, 통계 기반 탐지 회피
속도 (평균 속도·머뭇거림)"티켓팅 장인" 페르소나 고정값인간 분포 상위 극단 → 경쟁 우위 확보

"티켓팅 장인" 페르소나 정의

어디를 클릭할지 이미 알고 있고 망설임 없이 그쪽으로 직행하는 숙련자

특성값 (범위)
평균 이동 속도2.0 ~ 2.8 px/ms
클릭 전 머뭇거림8 ~ 20 ms
경로 직선성인간 상위 분포 (0.93~0.98 근처)
손떨림 수직 표준편차0.5 ~ 2.0 px

왜 평균 인간을 그대로 모사하지 않는가

선택지문제
평균 인간 분포 그대로티켓팅에서 너무 느림 → 공격 자체가 무의미
한 사람 패턴 완전 고정동일 시그니처 → 통계 기반 탐지에 취약
형태는 다양·속도는 고정탐지 회피 + 경쟁력 둘 다 달성

6단 합성 파이프라인

매 클릭마다 시작점과 끝점을 받아 6단계를 거쳐 마우스 이동 경로를 생성합니다.

[1] 샘플링         인간 궤적 샘플 모음에서 균등 랜덤 선택
       ↓
[2] 미세 변동      직선성·떨림에 가우시안 변동 주입
       ↓
[3] 속도 덮어쓰기  원본 속도 폐기, 장인 페르소나 고정값 교체
       ↓
[4] 곡선 생성      비대칭 제어점 두 개로 3차 베지어(Cubic Bezier) 곡선
       ↓
[5] 떨림 주입      경로 수직 방향으로만 N(0, σ) 가우시안 노이즈
       ↓
[6] 역계산 검증    실측 직선성·떨림 역계산 + 감사 로그 기록

단계별 세부

1단 — 샘플링

항목내용
입력수집 샘플 뱅크 (50+ 개)
방식균등 랜덤으로 1개 선택
출력직선성·떨림 값 쌍
의미이번 클릭의 "캐릭터" 결정

2단 — 미세 변동 주입 (Gaussian jitter)

항목
직선성에 더할 변동 표준편차σ ≈ 0.015
떨림에 더할 변동 표준편차σ ≈ 0.35 px
클램핑 범위 (직선성)0.55 ~ 1.0
클램핑 범위 (떨림)0 ~ 25 px

의미 — 같은 샘플을 뽑아도 매번 미묘하게 다른 캐릭터로 변주됩니다.

3단 — 속도·머뭇거림 덮어쓰기

  • 원본 샘플의 속도·머뭇거림 값은 버리고, 장인 페르소나 고정값으로 교체
  • 이 단계가 "속도 분리"를 실현하는 핵심

4단 — 곡선 생성 (Cubic Bezier with asymmetric control points)

항목계산식
이동 벡터(dx, dy) = end - start
이동 거리dist = sqrt(dx² + dy²)
곡률 진폭amp = dist · sqrt(max(0, 1/linearity − 1)) · 0.45
진폭 상한min(220, dist · 0.65)
곡선 방향50:50 확률 무작위

제어점 배치

제어점위치오프셋
p1시작점에서 이동 벡터의 30% 지점amp · (0.95 ± 0.15) 수직 + 진행방향 -18~18 px
p2시작점에서 이동 벡터의 70% 지점amp · 0.70 · (1 ± 0.15) 수직 + 독립 진행방향 오프셋

의미 — 비대칭 제어점으로 자연스러운 S자형 곡선 생성. 각 제어점마다 미세 랜덤이 들어가서 매번 모양이 다릅니다.

5단 — 포인트별 떨림 주입

항목
포인트 수14 ~ 110 (이동 시간 / dt_ms)
기본 dt_ms10 ms
떨림 방향경로와 수직 방향으로만
떨림 분포N(0, σ) — σ는 2단에서 결정된 값

왜 수직 방향으로만 주입하나

이유설명
생물학적 관찰 근거사람의 손떨림은 목표 진행 방향과 수직인 축에서 주로 관찰됨
적중 정확성 유지진행 방향 노이즈는 타이밍·착지점을 흐트러뜨림, 수직은 경로 모양만 흔듦

6단 — 역계산 검증

생성된 좌표 시퀀스
    ↓
실측 직선성·떨림 재계산
    ↓
감사 로그에 { 목표값, 실측값 } 함께 기록

용도 — 합성이 의도대로 됐는지 사후 확인. 실측값이 목표 분포 범위를 벗어나면 합성기 튜닝 필요.

포인트 간 타이밍

근거
0.3 ~ 0.9 ms (비균일)고성능 게이밍 마우스 폴링 주기(0.1250.25ms @ 48kHz)보다 보수적, OS 스케줄러·브라우저 이벤트 큐 불규칙성 모사

장거리 이동 최적화 — 숙련자 사전 위치 선점 모델

구역·좌석 버튼까지 수백 픽셀 이동 시 전 구간 곡선 합성은 누적 지연을 유발합니다. 이를 해결하기 위해 사전 위치 선점 모델을 적용합니다.

┌─────────────────────────────────────────────────┐
│ [1] 버튼 출현 전부터 타깃 예상 위치 근처로      │
│     마우스 미리 이동                             │
│         ↓                                       │
│ [2] 실제 버튼이 DOM에 나타남                     │
│         ↓                                       │
│ [3] 짧은 보정 이동으로 클릭                     │
└─────────────────────────────────────────────────┘

비유 — e-sports 프로의 pre-aim, 숙련 타이피스트의 홈 포지션과 같은 원리. 사람이 실제로 숙련된 상태에서 하는 행동을 모델링한 것입니다.

인간 샘플 수집

수집 방식

항목내용
도구브라우저에 스크립트 주입해 실제 사용자 마우스 이벤트 기록
수집 이벤트이동, 누르기, 놓기
목표 규모50개 이상 다양한 거리·방향 커버
수집 지침일부러 "장인처럼 직선적이고 빠르게" 클릭 → 타깃 페르소나 분포 확보
저장 포맷구조화된 샘플 파일 (궤적별 특성 지표)

추출하는 특성 지표

지표계산 방식
총 이동 거리인접 포인트 간 유클리드 거리의 합
직선 거리첫 포인트와 마지막 포인트의 유클리드 거리
직선성직선 거리 / 총 이동 거리
평균 속도총 이동 거리 / 소요 시간
경로 비율총 이동 거리 / 직선 거리
머뭇거림인접 세그먼트 이동 거리 ≤ 3 px 또는 속도 ≤ 30 px/s 구간 시간 누적
손떨림 표준편차시작-끝점 선분에 대한 중간 포인트들의 수직 거리 표준편차

검증

실제 에이전트가 생성한 궤적이 수집 샘플 분포와 일치하는지 사후 검증합니다.

검증 항목방식
직선성 분포수집 샘플 p5~p95 범위 안에 에이전트 로그가 들어오는지 확인
떨림 분포동일 방식으로 떨림 표준편차 검증
전체 분포 일치Kolmogorov-Smirnov 스타일 분포 일치 검증

기록되는 이벤트

이벤트내용
TRAJ_SYNTH합성 완료 시점. 목표 지표(linearity, tremor)와 실측 지표 비교

참조