VRChat Anti-Ripping Tool

あなたのアバターを、
抽出されても 使えなくする

AssetRipper による抽出そのものは止められません。
けれど、抽出した後のメッシュ・テクスチャ・シェーダーが復元できなければ、リッピング自体が意味を失います。
Anti-Ripping は、 NDMF パイプラインで 8 層の防御を 1 クリック適用する VRChat 向けツールです。

8防御レイヤー
264鍵空間 (≈ 1.8×1019)
1 クリックNDMF 統合
AJISAI / ANTI-RIPPING v0.34.x NDMF · MA PROTECTED
Anti-Ripping VRCHAT AVATAR PROTECTION
Before / After

抽出された瞬間、 データは崩れる。

正規プレイヤーには通常通り表示されるアバターも、 AssetRipper のような抽出ツールで取り出した瞬間に、 メッシュ・テクスチャ・シェーダーのすべてが復元不能な状態になります。

保護を適用したアバター — 正規プレイヤー視点では通常通り表示
BEFORE — 正規プレイヤーの視点

通常通りの表示。

あなたとフレンドには、 これまで通りのアバターが描画されます。 解錠は所有者の手元で透過的に行われるため、 操作も VRChat の体験も変わりません。

抽出後のアバター — メッシュが原型を留めず崩壊した状態
AFTER — リッパーの視点

復元不能なデータ。

AssetRipper で取り出されたメッシュは原点からスクランブル、 テクスチャは XOR 暗号化された PNG (= ノイズ画像)、 シェーダーは locked variant の難読化済み HLSL のみ。 鍵が無ければ何も再構成できません。

Defense Layers

8 層の防御を、 NDMF が自動で組み立てる。

追跡・形状暗号化・テクスチャ暗号化・撹乱、 4 つのカテゴリにまたがる防御を組み合わせ、 単一の手段が破られても全体としての防御が維持される多層構造です。

L1

Asset / Hierarchy Watermark

アセット名・Hierarchy 構造に作者情報を埋め込み、 流出時の追跡を可能にします。 抽出ファイル単体からでも由来が辿れる。

L2

LilToon / Poiyomi Protection

shader source に追跡情報を注入し、 locked variant としてバリエーションを焼き込み。 第三者がシェーダーから情報を抽出するのを困難にします。

L3

Mesh Lock (BlendShape)

頂点を ±radius でランダムスクランブルし、 解錠 BlendShape で原状回復するハイブリッド。 鍵が一致したときだけ正しい形状になります。

L4

Shader-Level Mesh Lock

UV6/7 に頂点 displacement を bake し、 lilToon / Poiyomi の vertex hook 内で K0..K7 の鍵と照合してデコード。 シェーダー経路でも形状を守ります。

L5

Texture Pixel Encryption

テクスチャを CPU XOR PRNG で暗号化し、 シェーダー側で OVERRIDE_* マクロを使って復号。 抽出された PNG はランダムノイズにしか見えません。 Custom Shaders を OFF にしているフレンドの視点では、 MainTex のみ 低解像度のプレビュー画像 (Safety Preview Texture) で fallback 表示されます。 対応シェーダーは lilToon のみで、 Poiyomi material はテクスチャ暗号化の対象外 (Mesh Lock による形状保護は適用されます)。

L6

BlendShape Decoy

本物の BlendShape は一切触らず、 ランダム名のダミー BlendShape を 32〜64 個注入。 形状を保ったまま、 抽出時の識別困難化を達成します。

L7

Decoy Animator

ダミー SMR + ダミー Animator Layer + ダミーパラメータの一式を追加し、 本物の解錠 chain を Animator 上で識別できなくします。

L8

Hierarchy / GameObject 難読化

GameObject 名を 16 文字の hex にランダム化し、 sibling 順序を Fisher-Yates シャッフル。 Hierarchy からアバター構造の意図を読み取れなくします。

Real Obfuscation

ビルドされたアバターの内部を見る。

NDMF パイプラインを通したあとの実際の Unity Editor スクリーンショットです。 名前は全てランダム化され、 テクスチャはノイズに変わります。

Unity Hierarchy ですべての GameObject 名が _<16hex> 形式に置き換わった様子
HIERARCHY

GameObject 名の難読化

Renderer や装飾の GameObject 名がすべて 16 文字 hex に置き換わり、 Hierarchy から構造の意図 (どこが顔 / 服 / 装飾か) を読み取れません。

Animator ウィンドウで Layer / State / Parameter 名がすべてランダムな hex になった様子
ANIMATOR

Animator 内部の難読化

Layer / State / Parameter 名がすべてランダム化され、 Decoy Animator 機能を ON にすればダミーの解錠 chain が混入します。 本物の解錠ロジックを Animator から識別するのが極めて困難になります。

2048x2048 RGBA8 のノイズ模様テクスチャ — 抽出してもパターンが意味を持たない
TEXTURE — SAMPLE 1

抽出後のテクスチャ (例 1)

抽出されたテクスチャは規則性の無いノイズ状のデータ。 元の絵柄を視覚的にも統計的にも復元することはできません。

2048x2048 RGBA8 の完全ノイズテクスチャ — XOR PRNG 暗号化の結果
TEXTURE — SAMPLE 2

抽出後のテクスチャ (例 2)

XOR PRNG により完全にノイズ化されたメインテクスチャ。 抽出した PNG を画像ビューアで開いてもこの状態のまま、 シェーダー側の鍵が無い限り復号できません。

Safety Mode Compatibility

Custom Shaders OFF のフレンドにも、 アバターを届ける。

VRChat の Custom Shaders を OFF にしているフレンドの視点でも、 アバターが大きく崩れないように 2 つの fallback 経路を内蔵しています。 いずれも default で有効です。

SM1

Shape Fallback (BlendShape)

SkinnedMeshRenderer のメッシュ形状は、 shader 経路と並行で BlendShape 経路でも復元されます (v0.16+)。 Custom Shaders OFF でも SMR の形状は正しく表示されます。 非 SMR (装飾品 / 武器などの静的メッシュ) は対象外で、 スクランブル状態のままです。

SM2

Safety Preview Texture (低解像度)

暗号化された MainTex は別 slot へ退避され、 元 slot には 低解像度のプレビュー画像 (default 64px、 16-256px で調整可能) が書き込まれます (v0.34.7+)。 Custom Shaders OFF のフレンド視点でもメインのテクスチャはモザイク状にならず、 全体の色合いを保ったまま表示されます。 対象は現状 _MainTex のみで、 他の暗号化テクスチャ slot は引き続き fallback shader 上ではノイズになります。

How to Apply

アバターに適用する方法。

NDMF パイプラインに乗せるだけ。 5 ステップで完了します。

  1. 01 Hierarchy のアバター GameObject 横に Anti-Ripping アイコンが表示されている様子
    STEP 01 · HIERARCHY

    Hierarchy で Anti-Ripping アイコンをクリック

    アバター GameObject の右側に表示されている Anti-Ripping のアイコンをクリックします。 アイコンはアバターを Hierarchy に配置すると自動で表示されます。

  2. 02 Anti-Ripping を導入するかどうかの確認ダイアログ
    STEP 02 · CONFIRM

    確認ダイアログで「続行」

    VRCAvaterAntiRipping プレハブを avatar 配下に配置しますか?」 と確認されるので、 「続行」 を押します。

  3. 03 アバター直下に VRCAvaterAntiRipping プレハブが追加された様子
    STEP 03 · INSPECT

    追加された Prefab を Inspector で開く

    アバター直下に VRCAvaterAntiRipping プレハブが追加されます。 Hierarchy で選択して Inspector パネルを開きます。

  4. 04 Inspector の Step 1 で「アプリをインストール」ボタンをクリックし、 OSC 常駐クライアントを導入する画面
    STEP 04 · OSC CLIENT

    OSC 常駐クライアントをインストール

    Inspector の Step 1: アプリのインストール で「アプリをインストール」 ボタンをクリックします。 このクライアントが VRChat の起動を検知して OSC 解錠キーを自動送信 するため、 起動のたびに手動で鍵を入力する必要が無くなります。

    実体は全 Unity プロジェクトを通じて 1 つだけ、 ユーザーフォルダ配下にインストールされます (Windows 常駐アプリ)。

  5. 05 Inspector の Step 2 で作者情報を入力し、 Step 3 の「推奨」プリセットボタンをクリック
    STEP 05 · CONFIGURE

    作者情報を入力 → 「推奨」 をクリック

    Step 2 で Creator Name / License URL / Contact を入力します (一度入力すれば「現在の値をデフォルトとして保存」で次回以降に再利用できます)。

    Step 3 で 「推奨」 プリセットボタンをクリックすれば、 標準的な保護レイヤー構成が一括で適用されます。 これで完了です。

FAQ

よくある質問。

表情ギミックや、 着せ替えツール (Modular Avatar / FaceEmo / lilycal-Inventory 等) との併用は?
問題なく併用できます。 NDMF パイプライン内で Modular Avatar の前 に走るよう設計されており、 後段の MergeArmature や ShapeChanger による Path 変更は AnimatorServicesContext が自動的に再 mapping します。 既知の併用テスト: MA / FaceEmo / lilycal-Inventory / AAO TraceAndOptimize / VRC Viseme / Eyelid。
パフォーマンスへの影響は?
追加されるのは Animator 3 層 (Score / Logic / Display) と、 メッシュ毎に 1 個の解錠 BlendShape。 撹乱機能 (BlendShape Decoy / Decoy Animator) を ON にすると、 ダミー BlendShape 32〜64 個 / ダミー Animator 8〜12 層 / ダミー SMR 2〜5 個が追加されます (Decoy 系は default OFF)。

同期パラメータの消費は Float 1 個 = 8 bit (256 bit 全体の約 3%)。 解錠状態をリモートにブロードキャストし、 フレンドからも正常に見えるようにするための必須の broadcast です。 鍵 K0..K7、 score、 LockNow を含む他のパラメータはすべて localOnly のため同期されず、 Decoy が追加するダミーパラメータも全て localOnly のため Synced 予算に影響しません。

描画コストは shader の vertex hook + Texture Encryption 経路で fragment 側 XOR decode を含みます。 Performance Rank はコア機能のみなら影響なし、 Decoy Animator ON では SMR カウント増加で 1 ランク下がる可能性があります。
フレンドや、 他のプレイヤーには普通に見えますか?
はい。 解錠状態は AAP (Direct Blend Tree によるスコア累積方式) を経由した synced Float (0/1 のみ運用、 1 個 = 8 bit) で broadcast されるため、 所有者の解錠後はリモート視点でも正しく描画されます。 鍵そのものは AnimatorController の transition から完全に消去されており、 他のプレイヤーに鍵が漏れることはありません。
VRChat の Custom Shaders を OFF にしているフレンドからも見えますか?
v0.16 以降の safety mode 対応により、 SkinnedMeshRenderer (SMR) のメッシュ形状は shader 経路と並行で BlendShape 経路でも復元されます。 Custom Shaders OFF でも SMR の形状は正しく表示されます。

v0.34.7 以降は、 暗号化された MainTex の代わりに低解像度のプレビュー画像 (Safety Preview Texture、 default 64px、 16-256px で調整可能) が fallback shader 用 slot に書き戻されるため、 Custom Shaders OFF のフレンド視点でもメインのテクスチャはモザイク状にならず、 全体の色合いを保ったまま表示されます (default ON)。

ただし以下の制約が残ります:
  • MeshRenderer (非 SMR、 装飾品や武器などの静的メッシュ) には BlendShape による fallback が無く、 Custom Shaders OFF のフレンド視点ではスクランブル状態のままです。
  • Safety Preview Texture の対象は現状 _MainTex のみです。 NormalMap や Mask 等、 他の暗号化対象テクスチャは fallback shader 上では引き続きノイズ表示になります (見た目への影響は MainTex に比べて軽微)。

完全な見え方を保証したい場合は、 静的メッシュを MeshRenderer ではなく SMR に変換する選択肢があります。
鍵を紛失した場合は?
鍵は AntiRippingTag.meshLockKeyHex として Inspector に保存され、 Unity プロジェクトと共に管理されます。 紛失した場合はビルドし直して新しい鍵を生成 + 常駐アプリに再登録すれば復旧可能です。 サーバー上に鍵情報は一切送信されません。
ソースコードは公開されていますか?
セキュリティ性質上、 ソースコードは非公開です。 ビルド済み Unity パッケージのみを VPM 経由で配布しています。 開発を応援していただける方には、 BOOTH の投げ銭版も用意しています。
動作環境は?
Unity 2022.3 / VRChat SDK3 (Avatars + Base) / Non-Destructive Modular Framework 1.11.0+ / Modular Avatar 1.16.2+ / lilToon 2.3.2+ が必須パッケージです (VRC SDK は MA 経由で導入されます)。 常駐アプリは Windows 10/11 (.NET 8 self-contained、 別途インストール不要)。 macOS / Linux 環境のクライアント側起動は未対応です。
他のツールとの互換性のために NDMF Plugin の ID を知りたい
NDMF Plugin の ID は次の通りです: net.ajisaiflow.anti-ripping
Before You Install

導入前にご確認ください。

  • 01

    アバター最適化コンポーネントとの相互作用

    AAO TraceAndOptimize 等のアバター最適化ツールは、 本ツールが追加するダミーパラメータや Decoy SMR、 暗号化テクスチャを「未使用」と判定して削除する可能性があります。 ダミーパラメータには Animator binding を持たせて削除を回避していますが、 アバターの構成や最適化ツールの設定によっては意図しない最適化が走ることがあります。 問題が発生した場合は各最適化ツールの除外設定をご検討ください。

  • 02

    テクスチャ難読化の負荷と制約

    テクスチャ暗号化を有効にすると、 以下の影響があります:

    • テクスチャサイズが最大で約 4 倍に膨らみます — 暗号化後のピクセル値はランダム性が高く BC7 等の GPU 圧縮が効かないため、 非圧縮 RGBA8 で保存されます。 軽減策として 2048px を超える元 texture は自動で 2K に downsample される設定が default で有効になっており、 4K texture を含むアバターではサイズ膨張を半減できます。
    • ビルド時間が約 4 倍ほど伸びる可能性があります — 元テクスチャの decompress → per-pixel XOR PRNG 暗号化 → 新規アセット生成、 を対象全テクスチャに対して行うため、 ビルド時間が大幅に増えます。
    • マテリアルによっては正しく機能しないケースがあります — 現状、 マテリアルの構成や利用シェーダー機能によっては暗号化が正しく適用されないことがあります。 ビルド後に該当マテリアルが正常に描画されているかご確認ください。
  • 03

    lilToon / Poiyomi 派生以外のシェーダー

    シェーダー注入が自動で効くのは lilToonPoiyomi およびその派生のみです。 XSToonSunao 等は Inspector の手動指定リストで対象に追加できますが、 互換性は個別に確認してください。 注入できない material は BlendShape 経路のみで保護され、 シェーダー経路は適用されません。

Compatibility

対応シェーダー / 対応テクスチャ一覧。

テクスチャ暗号化は lilToon (公式) のみ対応します。 shader 経路の Mesh Lock は Poiyomi にも適用され、 それ以外のシェーダーは BlendShape 経路 (SMR のみ) で形状のみ保護されます。

シェーダー対応状況

シェーダー テクスチャ暗号化 Mesh Lock
(shader 経路)
備考
lilToon (公式) ◎ 対応 ◎ 対応 全 variant をフルカバー。 Safety Preview Texture / XorSortMapping 対応
Poiyomi (公式 / Free) — 未対応 ◯ 対応 vertex decode のみ。 テクスチャは平文で残ります
lilToon カスタム派生
(BBP / .lilcontainer 等)
— skip — skip 視覚復元優先で完全 skip。 BlendShape Mesh Lock のみ動作
手動指定シェーダー
(XSToon / Sunao 等)
— 未対応 — 未対応 Inspector の ExtraShaderNamesToLock で追加可能。 BlendShape Mesh Lock fallback
その他
(Standard / UnlitWF / Mochie / VRChat SDK / 任意 custom)
— 未対応 — 未対応 BlendShape Mesh Lock (SMR のみ) で形状のみ保護

lilToon プロパティ別 暗号化対応 (公式 catalog)

カテゴリ 状態 代表的なプロパティ
Color
RGB XOR
◎ default ON _MainTex, _ShadowColorTex, _MatCapTex, _RimColorTex, _OutlineTex ほか 色テクスチャ全般
Normal
DXT5nm unpack → RGBA XOR
◎ default ON _BumpMap, _Bump2ndMap, _AnisotropyTangentMap, _OutlineVectorTex, _FurVectorTex ほか 法線・接線
Mask
R-only XOR
◎ default ON _AlphaMask, _ShadowBorderMask, _DissolveMask, _EmissionBlendMask, _FurMask ほか マスク全般
Emission △ opt-in (default OFF) _EmissionMap, _EmissionGradTex, _Emission2ndMap, _Emission2ndGradTex (Inspector で encryptEmissionGroup を ON)
Skip list
channel pack / R&D 待ち
— 構造的に対象外 _Main2ndTex, _Main3rdTex, _MetallicGlossMap, _SmoothnessTex, _ParallaxMap, _TriMask, _GlitterShapeTex
Other
integration / screen-space
— 永久対象外 _DitherTex, _AudioLinkMask, _AudioTexture, _GrabTexture, _CameraDepthTexture ほか

顔デカール (_Main2ndTex / _Main3rdTex) は現状 Skip list 該当のため、 抽出時に該当スロットのテクスチャが平文で残ります。

Recommended Packages

併用をおすすめするツール。

Anti-Ripping と組み合わせることで、 アバターの軽量化やビルド時間の短縮ができる NDMF 対応の無料ツールです。 いずれも非破壊的にアバターに適用されます。

上記以外の NDMF 対応最適化ツールを Anti-Ripping と併用していて、 何らかの問題 (見た目の崩れ / 機能が動かない 等) が発生した場合は、 Discord もしくは お問い合わせ までご連絡ください。 互換性の調査と対応を検討します。

VPM 経由で、 1 クリック導入。

VRChat Creator Companion (VCC) に下記 URL を追加するだけで、 Anti-Ripping パッケージをいつでも最新版で利用できます。

https://lighfu.github.io/vpm/index.json
必須パッケージ
  • Non-Destructive Modular Framework v1.11.0+
  • Modular Avatar v1.16.2+
  • lilToon v2.3.2+
  • VRChat SDK3 Avatars + Base

いずれも VPM (VCC) 経由でインストール可能。 Unity 2022.3 が動作環境です。