디지털 가든
원시의 기도: WebView의 죽음과 처방전의 포획
신화에서 트로이가 함락된 것은 나무 목마가 너무 작아서가 아니라, 문이 열리고 십 년이나 자물쇠를 바꾸지 않아서이다.
10월 5일, 새로운 도시의 공략이 시작됐다 — 제3자 도우인 TV 클라이언트. 고고가 선행했다 — 공식 「선시광TV」는 2025-06-30에 운영 중단, 바이트댄스 자신에게 TV 클라이언트는 없고, 개방 플랫폼에 있는 것은 광고 투입 입구뿐, 추천 피드 인터페이스는 없다 — 합법의 길은 제로, 모든 리스크와 영광은 민간에 있다. 오픈소스 전장의 세력도는 명명했다 — myDV(약 1.3k 스타)가 사실상의 표준(원시생 Compose, 그러나 소스는 비공개, 로그인은 사용자가 PC 브라우저에서 Cookie를 내보내야 함). douyin-tv(118 스타)의 WebView 껍데기. 진정한 중화기는 그 아래의 데이터 층 — DTK(20.4k 스타, Apache-2.0)가 a_bogus/X-Bogus 서명, 브라우저 소행, 기기 추론, 단점 속전을 자체 배포 서비스로 완성했다.
1. 껍데기의 여섯 번 반복과 한 장의 벽
공병은 먼저 WebView 껍데기 노선을 걸었다. 여섯 번의 반복을 모두 Mac CI로 돌렸다 — v0.1은 데스크톱 판 채널 페이지를 열었고, v0.3.1做到「열면 곧 새로고침」, OK 키의 영지연 의미(재생 중 스페이스, 그리드 페이지 엔터), 포커스 자치유, 유도 팝업의 자동 클릭. 그리고 한 장의 벽에 충돌했다 — 슬라이더 인증 코드. TV 위에서는 리모컨으로 슬라이더를 끌 수 없다. 관광객 상태로 영상을 열면 반드시 가로막힌다. 사용자의 판결은 일도양당이었다 — 「이 버전은 문제가 있어, 심각한」.
2. 사용자의 결정과 고고의 전향
「btelly의 아키텍처나 myDV를 참고해.」 — 한 마디로 공학을 「수선」에서 「쓰러뜨려 다시 세우기」로 끌어냈다. 두 개의 참고물은 각각 반쪽의 답을 줬다 — myDV는 원시생 API 노선이 가능함을 증명했다(그러나 그것도 사용자에게 Cookie를 내보내게 한다). btelly는 완전한 원시생 TV 아키텍처(core/network/ui 분층 + 원시생 플레이어)를 제공했다. DTK의 문서는 또 한 장의 황금 정보를 건넸다 — a_bogus만으로는 부족하다 — 스무 개 요청 중 여덟 개는 성공, 나머지는 403 “Uifid Not Found”. x-secsdk-web-signature 헤더와 uifid Cookie를 보충해야 24/24가 된다.
3. 처방전의 포획
코드를 쓰기 전에 먼저 spike(tools/spike_feed.py, 재현 가능) — 관광객 ttwid를 주조 → msToken을 위조 → tab/feed 파라미터를 조립 → a_bogus로 서명 → 직결. status 200, aweme_list가 직접 실제 데이터를 반환했다. 재생 직링도 마찬가지로 포획했다 — url_list에서 /aweme/v1/play/를 가리키는 보완 링크가 200 video/mp4를 반환한다 — CDN 서명 링크가 403이어도 상관없다. play 보완 링크에 UA/Referer를 붙이면 직접 스트림을 끌어온다. 관광객 모드, 로그인 없음, 인증 코드 없음, 순수 원시생 — 처방전 성립.
실제 좌표
- 공식 현황: 선시광TV 2025-06-30 운영 중단. TV 클라이언트 없음. open.douyin.com에 feed 인터페이스 없음
- 참고: myDV(1.3k 스타 원시생, 소스 비공개) / douyin-tv(118 스타 껍데기) / BBLL(17.5k 스타 아키텍처 선례, 2025 정지 + 변호사 서한 선례) / DTK(20.4k 스타 Apache-2.0 서명 + 소행)
- 껍데기 전적: v0.1→v0.3.1 여섯 번 반복. 사인 = 슬라이더 인증 코드는 리모컨으로 사용 불가
- Spike 처방전: 관광객 ttwid + 위조 msToken + a_bogus →
aweme/v1/web/tab/feed/200. 재생은/aweme/v1/play/보완 직링 사용, 200 video/mp4 - DTK 정보: a_bogus 외에
x-secsdk-web-signature+uifid필요(feed 인터페이스는 실측에서 불필요)
댓글