Snapchat iOS API로 계정을 관리해요
자, 몇 달 동안 내 컴퓨터는 거의 아무것도 하지 않았어요. 사람들이 내가 그냥 얘기만 하는지 계속 물어보니까, 자세한 얘기를 하나씩 풀기 전에 내가 현재 어디에 있는지 솔직히 말해볼게요.
내부 API. 끝났어요.
저는 앱을 닫은 상태로 스냅챗의 비공개 엔드포인트에 바로 접근해서 스냅 보내기, 채팅 메시지 보내기, 스토리 올리기 등을 그대로 서버에 전송해요. 실제 클라이언트처럼 보이게 하는 작은 기능들도 다 있죠: markRead, 내가 원하는 때에 정확히 동작하는 타이핑 인디케이터, 내 백엔드를 경유하는 My AI 등요. 컵핏봇/내장 기능은その上에 동작해요. basically 앱이 하는 모든 걸 앱 없이 제가 그대로 따라 해요.
인증과 토큰. 끝났어요.
これが最初의 진짜 벽이었어요. 로그인, 토큰 갱신, 토큰 받아오기, 이 세 가지 흐름을 모두 앱 외부에서 재현했어요. 그리고 전체 시스템을 잠그는 건 스냅챗의 Argos 남용 방지 레이어와 X-Snapchat-ATT-Token 헤더였죠. 저는 스스로署名을 할 수 있을 정도까지 진행했고, 헤드리스 상태, 디바이스 없이 여러 모드에서 시도했어요. 서버는私が 오프라인으로 만든 attestation을 받아들이고 실제 토큰을 발급해 줘요. 이는 재현 가능한 결과이지, 우연한 한 번의 성공이 아니에요.
회원가입. 90% 완성됐어요.
필요한 건 다 갖추었어요. 저와 깨끗하고 반복 가능한 계정 생성 사이에 가로막고 있는 건 스냅이 아니라 애플이에요. 그게 바로 DeviceCheck죠. 디바이스에서 이 토큰이 실제로 어떻게 만들어지는지, 어떤 정보를 담고 있는지, 어디서 어떤 검증을 받는지 이해하려고 말도 못 하게 많은 시간을 쏟아부었어요. 지금은 이렇게 말할게요: 대부분의 글이 다루는 것보다 훨씬 더 실리콘 깊숙이에 뿌리박혀 있어요. 그리고 널리 퍼져 있는 많은 '방법'들은 아예 잘못된 층을 건드리고 있어요. 저는 결과를 얻었어요. 지금은 그걸 그대로 들고 있어요.
사실 웹 스냅챗 계정 생성은 더 쉬운데, iOS 방식만큼 멋지지 않죠. DeviceCheck을 써서 계정 신뢰도를 최대한 높일 수 있긴 해요.
참고로 저는 iPhone 8에 iOS 16.7.16, Dopamine 2 루트隐藏 상태에서 작업하고 있어요. 제 스냅챗 API 버전은 실제로 최신 버전인 14.13.0.53이에요.
첫 글에서는 깊이 파고들고 싶지 않은 정보들이 많지만, 궁금한 점 있으면 편하게 물어봐 주세요. 제가 스냅챗 API에 대해 상대적으로 더 많이 아는 것 같아서 기꺼이 답변해 드릴게요.
영어가 유창하지 않아서 언어 실수에 대해 양해 부탁드려요.
대시보드. 진행 중이에요.
이게 바로 실제 프로젝트예요. 역엔지니어링은 그저 기초일 뿐이에요. 아이디어는 하나의 계정 관리 API 뒤에 전체 iOS 스택을 배치해서, 한 곳에서 계정과 토큰, 행동을 모두 조종하고 스냅챗을 아예 열지 않는 거예요. 제가 지금 마무리하고 있는 부분이에요.
그렇다면 제 현재 상황은 이렇습니다.
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO------ ~87%
약 87% 정도 왔어요. 남은 건 대시보드 마무리하고 깔끔한 DeviceCheck를 적용하는 거예요. 마지막 13%가 가장 어려운 부분이지만, 제가 그걸 하고 있어요.
이건 파트 0이에요. 다음 글에서는 각 부분을 더 깊이 파고들 예정이에요. 계속 지켜봐 주세요. 그냥 빈말만 늘어놓는 게 아니라 정말 흥미로운 걸 보여 드릴게요. 안전하게 지내세요 <3