8 ポイント 投稿者 GN⁺ 2025-04-22 | 1件のコメント | WhatsAppで共有
  • 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 への署名付与が可能

追加の保護メカニズム

  • マウストラッキング: VM120
  • 環境チェック: VM265
  • ただし、これらはすべて クライアント側の保護であり、サーバー通信はない → 署名生成では無視できる

注意事項とメンテナンス

  • TikTok VM は 継続的に更新される → 構造が変われば新たなデコンパイルが必要
  • このプロジェクトは主に セキュリティ分析、ボット対策技術の研究、教育目的に適している

1件のコメント

 
GN⁺ 2025-04-22
Hacker Newsのコメント
  • 頻繁に途切れたりエラーメッセージを表示したりするストリーミングWebサイトを使っている。JavaScriptコードを解析して解決策を探しており、AIアシスタントは難読化されたコードを理解するうえで大いに役立った

    • AIを使うと、難解なJavaScript関数をより理解しやすい形に書き直し、コメントを追加できる
    • AIは変数名や関数名を推測して、コードの高レベルな動作を理解する助けになる
    • 同様の作業をしている人には、AIエージェントをツールとして使うことを強く勧める
  • Web上で実行されるJavaScriptファイルを難読化解除済みのファイルに置き換えることで、TikTokを正常に使える

    • TampermonkeyとCSP拡張機能を使えば、ブロックされた配信元からファイルを取得できる
    • Chrome DevToolsのLocal Overridesを使えば、サードパーティ拡張機能なしでも同じ効果を得られる
  • コードを隠すためにかなりの労力をかけているように見える。これはプログラムの最適化を妨げ、複雑さを増して、かえってバグを増やす可能性がある

    • ボットを防ぎたい意図は理解できるが、より効果的な方法が必要だ
    • クローン化を防ぐことはできず、クローンは動作を観察してブラックボックス的にリバースエンジニアリングできる
  • TikTok VMをリバースエンジニアリングした例をブックマークから見つけた

  • リバースエンジニアリングの取り組みに関する記事を読むのはいつも楽しく、今回の記事も追いやすかった

    • 多くのWebサイトやボット対策サービスは、環境チェックやマウス移動の追跡を基本としている
    • こうした対策が無力化されたあと、サービス側が仕組みを変更するまでにどれくらい時間がかかるのかを見るのは、いつも興味深い
  • ソーシャルメディアプラットフォームがここまでの難読化を使う正当な理由はない

  • VMとは何かという質問

    • VMを使ってさまざまなOS向けのテスト環境を構築した経験がある
    • JavaScript Virtual Machineは、ホストOS上で独自のOSのように動作する
    • TFAで議論されているVMは、その種のVMではない
    • 最近はさまざまな文脈で「VM」が使われており、混乱する
  • Lynxに関連するVMなのかという質問

    • LynxJS のリンクを提示
    • Hacker Newsでも議論されている リンク
  • iOSアプリにもVMがあるのかという質問

    • VMはAppleのポリシーに反するのではないかと思う
  • TikTokボットの作業を少ししていたことがあるが、非常に難しかった