# 난독화된 TikTok VM을 리버스 엔지니어링하기

> Clean Markdown view of GeekNews topic #20465. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20465](https://news.hada.io/topic?id=20465)
- GeekNews Markdown: [https://news.hada.io/topic/20465.md](https://news.hada.io/topic/20465.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-04-22T09:55:10+09:00
- Updated: 2025-04-22T09:55:10+09:00
- Original source: [github.com/LukasOgunfeitimi](https://github.com/LukasOgunfeitimi/TikTok-ReverseEngineering)
- Points: 8
- Comments: 1

## Summary

**TikTok**은 **가상 머신(VM)**을 사용하여 보안을 강화하고 난독화를 수행합니다. 이 프로젝트는 `webmssdk.js` 파일을 리버스 엔지니어링하여 **서명 알고리즘(X-Bogus, _signature) 복원**을 목표로 합니다. **바이트코드**는 복잡한 암호화 방식으로 구성되어 있으며, 이를 디컴파일하여 **의미 있는 함수 수준으로 복원**합니다. 프로젝트는 **보안 분석** 및 **교육 목적**에 적합하며, TikTok VM의 지속적인 업데이트에 따라 구조 변경 시 새로운 디컴파일이 필요합니다.

## Topic Body

- **TikTok**은 **가상 머신(VM)** 을 사용하여 보안 및 난독화 계층을 강화함  
- 이 프로젝트는 이 **웹 기반 가상머신(VM)을 리버스 엔지니어링**하여 보안 우회 및 요청 서명 생성 방식을 분석함  
- 핵심 대상은 `webmssdk.js`로, 이는 **X-Bogus 및 _signature 생성에 관여하는 VM 코드**를 포함함  
- 프로젝트는 자바스크립트 난독화를 해제하고, TikTok VM의 바이트코드를 분석 및 디컴파일하여 **의미 있는 함수 수준으로 복원**함  
- 이를 통해 인증이 필요한 요청(예: 댓글 작성) 시 필요한 `_signature` 생성까지 가능해짐  
- VM은 정교하게 설계되어 있으며, **루프, 예외 처리, 범위 관리 등 고급 바이트코드 구조**를 갖춤  
  
---  
  
### TikTok VM 리버스 엔지니어링 프로젝트 개요  
  
- TikTok은 자바스크립트 기반의 난독화된 가상머신(VM)을 사용하여 클라이언트 요청 서명 생성, 데이터 보호, 보안 우회 방지를 수행함  
- 이 프로젝트는 `webmssdk.js` 파일의 난독화 해제 및 디컴파일을 통해 **서명 알고리즘(X-Bogus, _signature) 복원**을 목표로 함  
  
### 핵심 기능 및 구조 분석  
  
#### 난독화 해제  
  
- TikTok은 문자열을 배열과 브래킷 표기법으로 인덱싱하여 난독화함  
  
  ```js  
  r[Gb[301]](Gb[57], e)  
  ```  
  
- `Gb` 배열의 복호화는 고정된 문자열 테이블을 사용하여 치환 처리됨  
- 해당 패턴을 모두 디코딩한 후, 읽기 쉬운 **점 표기법(dot notation)** 으로 변환  
  
#### 함수 호출 난독화 제거  
  
- 함수들이 배열 `Ab`에 저장되어 인덱스로 호출됨  
  
  ```js  
  Ab[31](args) → Ab31(args)  
  ```  
  
- AST 파서를 활용하여 이를 개별 함수로 분리하고 이름 지정 후 호출 방식도 수정함  
  
#### 바이트코드 복호화  
  
- 바이트코드는 base64 + gzip + leb128 + XOR 암호화로 복잡하게 구성됨  
  
  ```js  
  r = XOR 키 계산  
  압축 해제 및 leb128 디코딩으로 명령어 세트 재구성  
  ```  
  
- 각 함수는 바이트코드 기반으로 구성되며, 디컴파일 과정을 통해 함수 구조 복원  
  
#### TikTok VM 특징  
  
- **중첩 함수, 스코프 관리, 예외 처리**, 조건 분기 등 일반적인 VM보다 고도화됨  
- 각 명령어는 `switch`가 아닌 `if-else` 구조로 위장되어 있음 → 이를 **switch case 형태로 복원**  
  
### 디컴파일 및 디버깅  
  
- 각 바이트코드 함수는 일반 JS 함수 수준으로 디컴파일되어 [VMxxx.js](./decompiler/functions) 형태로 저장됨  
- 예: [VM223](./decompiler/functions/VM223.js)는 **랜덤 문자 생성기**  
- 디버깅은 Chrome의 **Tampermonkey + CSP 우회 확장**을 사용하여 원본 JS를 디컴파일 파일로 대체하며 수행  
  
### 서명(Signing) 분석  
  
#### 요청 헤더 구조  
- 서버 요청 시 3개의 추가 헤더가 포함됨  
  - `msToken` : 서버에서 발급됨, 매 요청마다 재생성됨  
  - `X-Bogus` : webmssdk.js에서 요청 기반으로 생성됨  
  - `_signature` : 인증이 필요한 요청에서 사용됨, webmssdk.js 생성  
- 일반적인 사용자 조회 요청은 `X-Bogus`만 필요  
- 댓글 작성 같은 인증 요청은 `_signature`도 필요  
  
#### VM 함수 흐름  
  
- **VM86**: 전체 서명 생성의 진입점  
- **VM113**: `X-Bogus` 생성  
- **VM189**: `_signature` 생성  
- [signer.js](./decompiler/signer.js)로 이 흐름을 재현하여 URL 서명 가능  
  
### 부가 보호 메커니즘  
  
- 마우스 추적: [VM120](./decompiler/functions/VM120.js)  
- 환경 체크: [VM265](./decompiler/functions/VM265.js)  
- 그러나 이는 모두 **클라이언트 측 보호이며 서버 통신 없음** → 서명 생성에는 무시 가능  
  
### 주의 사항 및 유지보수  
  
- TikTok VM은 **지속적으로 업데이트됨** → 구조 변경 시 새로운 디컴파일 필요  
- 이 프로젝트는 주로 **보안 분석, 봇 방지 기술 연구, 교육 목적**에 적합

## Comments



### Comment 37474

- Author: neo
- Created: 2025-04-22T09:55:10+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43747921) 
* 나는 자주 끊기고 오류 메시지를 보여주는 스트리밍 웹사이트를 사용하고 있음. JavaScript 코드를 분석하여 해결책을 찾고 있으며, AI 도우미가 난독화된 코드를 이해하는 데 큰 도움이 되었음
  - AI를 통해 난해한 JavaScript 함수를 더 이해하기 쉽게 재작성하고 주석을 추가할 수 있음
  - AI가 변수나 함수 이름을 추측하여 코드의 고수준 동작을 이해하는 데 도움을 줌
  - 비슷한 작업을 하는 사람들에게 AI 에이전트를 도구로 사용하는 것을 강력히 추천함

* 웹에서 실행되는 JavaScript 파일을 난독화 해제된 파일로 교체하여 TikTok을 정상적으로 사용할 수 있음
  - Tampermonkey와 CSP 확장 프로그램을 사용하여 파일을 차단된 출처에서 가져올 수 있음
  - Chrome DevTools의 Local Overrides를 사용하여 제3자 확장 프로그램 없이도 동일한 효과를 얻을 수 있음

* 코드를 숨기기 위해 많은 노력을 기울이는 것 같음. 이는 프로그램의 최적화를 방해하고 복잡성을 증가시켜 오류를 더 많이 발생시킬 수 있음
  - 봇을 막으려는 의도는 이해하지만, 더 효과적인 방법이 필요함
  - 클론을 막을 수는 없으며, 클론은 작동 방식을 보고 블랙박스 스타일로 역설계할 수 있음

* TikTok VM을 역설계한 예시를 북마크에서 찾았음
  - [링크1](https://www.nullpt.rs/reverse-engineering-tiktok-vm-1)
  - [링크2](https://ibiyemiabiodun.com/projects/reversing-tiktok-pt2/)

* 역설계 노력에 대한 글을 읽는 것을 항상 즐기며, 이번 글은 따라가기 쉬웠음
  - 많은 웹사이트와 봇 보호 서비스는 환경 검사와 마우스 움직임 추적을 기본으로 함
  - 이러한 조치가 무력화된 후 서비스가 메커니즘을 변경하는 데 걸리는 시간을 보는 것은 항상 흥미로움

* 소셜 미디어 플랫폼이 이 정도의 난독화를 사용하는 정당한 이유는 없음

* VM이 무엇인지에 대한 질문
  - VM을 사용하여 다양한 운영 체제에서 테스트 환경을 구축한 경험이 있음
  - JavaScript Virtual Machine은 호스트 OS 위에서 자체 운영 체제로 작동함
  - TFA에서 논의된 VM은 이러한 종류의 VM이 아님
  - 최근 다양한 맥락에서 "VM"이 사용되고 있어 혼란스러움

* Lynx와 관련된 VM인지에 대한 질문
  - [LynxJS](https://lynxjs.org/) 링크 제공
  - Hacker News에서 논의됨 [링크](https://news.ycombinator.com/item?id=43264957)

* iOS 앱에도 VM이 있는지에 대한 질문
  - VM이 Apple의 정책에 반할 것이라고 생각함

* TikTok 봇 작업을 잠시 했었는데 매우 어려웠음
