피드로 돌아가기
I Brute-Forced 2 Million Hashes to Get a Shiny Legendary Cat in My Terminal. It Has Max SNARK and a Propeller Hat.
Dev.toDev.to
Security

18만 분의 1 확률, FNV-1a와 Mulberry32로 구현한 결정론적 펫 브루트포싱

I Brute-Forced 2 Million Hashes to Get a Shiny Legendary Cat in My Terminal. It Has Max SNARK and a Propeller Hat.

ithiria8942026년 4월 2일9intermediate

Context

Claude Code /buddy 시스템은 계정 ID 기반의 결정론적 시드 방식을 사용함. 사용자는 부여된 해시 값에 따라 고정된 펫을 할당받음. 무작위 재추첨이나 교환 기능이 없는 구조적 한계가 존재함.

Technical Solution

  • FNV-1a 해시 함수와 Mulberry32 PRNG 알고리즘을 Node.js로 역공학하여 구현
  • identity + "friend-2026-401" 문자열 조합을 통한 결정론적 시드 생성 로직 구축
  • 50만 개 이상의 후보 ID를 고속으로 연산하여 희귀도와 종을 매칭하는 브루트포스 파이프라인 설계
  • accountUuid의 우선순위 덮어쓰기(Override) 메커니즘을 분석하여 정체성 변조 스크립트 개발
  • 500만 건의 대규모 캔디데이트 검색을 통해 특정 외형과 스탯 조합을 찾는 Shiny Hunt 모드 구현
  • 서버측 재로그인 시 발생하는 UUID 초기화 문제를 해결하기 위한 설정 파일 강제 삭제 및 복구 자동화 스크립트 제공

Impact

  • 50만 건의 후보군 연산을 약 0.4초 만에 완료
  • 10만 건의 시도당 약 0.081초의 처리 속도 기록
  • 초당 약 120만 개의 해시 연산 수행
  • 1/180,000 확률의 Shiny Legendary 조합을 500만 건 시도 내에 확보

Key Takeaway

시드 기반의 결정론적 생성 시스템은 알고리즘이 노출될 경우 클라이언트 측의 단순 연산만으로도 결과값을 예측 및 조작할 수 있는 취약점이 있음.


클라이언트 측에서 제어 가능한 시드 기반 생성 로직은 보안 취약점이 되므로, 중요한 희귀 자원 할당 시 서버 사이드 검증 및 난수 생성을 강제할 것

원문 읽기