難読化されたTikTok VMをリバースエンジニアリングする
(github.com/LukasOgunfeitimi)- TikTok は 仮想マシン(VM) を使用して、セキュリティと難読化の層を強化している
- このプロジェクトは、この Webベースの仮想マシン(VM)をリバースエンジニアリングし、セキュリティ回避とリクエスト署名生成の仕組みを分析する
- 中核となる対象は
webmssdk.jsで、X-Bogus および _signature の生成に関与するVMコードを含んでいる - プロジェクトでは JavaScript の難読化を解除し、TikTok VM のバイトコードを解析・デコンパイルして、意味のある関数レベルまで復元する
- これにより、認証が必要なリクエスト(例: コメント投稿)で必要となる
_signatureの生成まで可能になる - VM は精巧に設計されており、ループ、例外処理、スコープ管理などの高度なバイトコード構造を備えている
TikTok VM リバースエンジニアリングプロジェクト概要
- TikTok は JavaScript ベースの難読化された仮想マシン(VM)を用いて、クライアントのリクエスト署名生成、データ保護、セキュリティ回避の防止を行っている
- このプロジェクトは
webmssdk.jsファイルの難読化解除とデコンパイルを通じて、署名アルゴリズム(X-Bogus, _signature)の復元を目指している
主な機能と構造の分析
難読化解除
-
TikTok は文字列を配列とブラケット記法でインデックス参照することで難読化している
r[Gb[301]](Gb[57], e) -
Gb配列の復号は固定された文字列テーブルを使った置換処理で行われる -
このパターンをすべてデコードした後、読みやすい ドット記法(dot notation) に変換する
関数呼び出しの難読化解除
-
関数は配列
Abに保存され、インデックスで呼び出されるAb[31](args) → Ab31(args) -
AST パーサーを活用してこれらを個別の関数として分離し、名前を付けたうえで呼び出し方式も修正する
バイトコード復号
-
バイトコードは base64 + gzip + leb128 + XOR 暗号化という複雑な構成になっている
r = XOR キー計算 圧縮解除と leb128 デコードで命令セットを再構成 -
各関数はバイトコードベースで構成されており、デコンパイル過程を通じて関数構造を復元する
TikTok VM の特徴
- ネストした関数、スコープ管理、例外処理、条件分岐など、一般的な VM より高度化されている
- 各命令は
switchではなくif-else構造に偽装されている → これを switch case 形式に復元する
デコンパイルとデバッグ
- 各バイトコード関数は通常の JS 関数レベルまでデコンパイルされ、VMxxx.js 形式で保存される
- 例: VM223 は ランダム文字ジェネレーター
- デバッグは 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 でこのフローを再現し、URL への署名付与が可能
追加の保護メカニズム
注意事項とメンテナンス
- TikTok VM は 継続的に更新される → 構造が変われば新たなデコンパイルが必要
- このプロジェクトは主に セキュリティ分析、ボット対策技術の研究、教育目的に適している
1件のコメント
Hacker Newsのコメント
頻繁に途切れたりエラーメッセージを表示したりするストリーミングWebサイトを使っている。JavaScriptコードを解析して解決策を探しており、AIアシスタントは難読化されたコードを理解するうえで大いに役立った
Web上で実行されるJavaScriptファイルを難読化解除済みのファイルに置き換えることで、TikTokを正常に使える
コードを隠すためにかなりの労力をかけているように見える。これはプログラムの最適化を妨げ、複雑さを増して、かえってバグを増やす可能性がある
TikTok VMをリバースエンジニアリングした例をブックマークから見つけた
リバースエンジニアリングの取り組みに関する記事を読むのはいつも楽しく、今回の記事も追いやすかった
ソーシャルメディアプラットフォームがここまでの難読化を使う正当な理由はない
VMとは何かという質問
Lynxに関連するVMなのかという質問
iOSアプリにもVMがあるのかという質問
TikTokボットの作業を少ししていたことがあるが、非常に難しかった