Skip to content

Latest commit

 

History

History
150 lines (94 loc) · 9.49 KB

README.JP.md

File metadata and controls

150 lines (94 loc) · 9.49 KB

ShellProtector

Downloads Hits

推奨Unityバージョン: : 2022

| 한국어 | English | 日本語 |

(翻訳機を使用しました)

VRChatで使用可能なシェーダーを利用したテクスチャの暗号化

テクスチャを暗号化した後、シェーダーを利用してテクスチャを復号化します。

アバターのコピーを防ぎ、リッピングによってアバターのテクスチャを剥がして修正することを防ぐことができます。

OSCプログラムで簡単にパスワードを入力することができます。

OSCのソースコード: https://github.com/Shell4026/ShellProtectorOSC

対応シェーダー

  • Poiyomi 8.0, 8.1, 8.2, 9.0, 9.1(pro), PCSS(より多くのテストが必要)
  • lilToon (1.3.8 ~ 1.7.3)(VCC)

対応テクスチャ形式

  • RGB24, RGBA32
  • DXT1, DXT5
  • Crunch Compressionフォーマットは自動的にDXT1またはDXT5に変換されます。

サポートする機能

  • テクスチャ暗号化
  • 暗号を解読するためのOSCプログラム
  • Blendshape難読化
  • フォールバック: 友達以外のユーザーには、暗号化ノイズの代わりに16x16テクスチャで見えるようにする機能。

使用方法

  1. アバターを右クリックして「Shell Protector」を押してコンポーネントを追加します。
  2. パスワードを設定し、暗号化するマテリアルやゲームオブジェクトを指定します。

( Modularを使用する場合、以下のプロセスは必要ありません).

  1. Encryptボタンを押します。
  2. 新しく生成されたアバターに入ったTestorコンポーネントで暗号化するかどうかを確認し、'Done'ボタンを押します。
  3. アバターをアップロードします。

自分のパスワードが4桁以上の場合 (OSC)

  1. ReleaseにあるShellProtectorOSC.zipをダウンロードし、解凍してShellProtectorOSC.exeを実行します。 (最初に一度だけ実行するだけです。リセットアバターやパラメータ多重化を使用する場合は、継続してオンにしてください。)
  2. アップロードしたアバターに変更した後、OSCプログラムでユーザーパスワードを入力します。
  3. もしパスワードが変わってもアバターの外観に変化がなければ、VRChatでアクションメニュー - Options - OSC - Reset Configを押してください。
  4. それでも問題がある場合は、C:\Users\ユーザー\AppData\LocalLow\VRChat\VRChat\OSCフォルダを消去してください。

パラメータマルチプレックス

詳細原理:https://github.com/seanedwards/vrc-worldobject/blob/main/docs/parameter-multiplexing.md

パラメータ節約技術です。チェック後、OSCを常にオンにしておく必要があり、OSCプログラムにもParameter-multiplexingをチェックする必要があります。

ゲーム内で元の姿に戻るまでの時間が若干増加します。

16桁はVRChatのセキュリティ上の問題が発生する可能性があるため、12桁を推奨します。

パラメータマルチプレックス使用時、サーバーやネットワークの状況により、他のユーザにOSC値が伝達されず、復号化ができない場合があります。

この場合、OSC 1.5.0で追加されたRefresh rateを少し上げてみてください。

アバターフォールバック

暗号化がかかっているときにSafetyがオンになっている人は、アバターを見るときに劣化したバージョンに見えるようにする機能です。 fallback

問題解決

問題発見時、Issuesに上げていただければ幸いです。

<is not supported texture format!>

テクスチャを選択後、Inspectorで圧縮フォーマットをDXT1またはDXT5のいずれかに変更してください。 (透明度のあるテクスチャはDXT5)

texture

<lilToon)Testorコンポーネントでテストしたときに元に戻らない場合>

lilToonのバグなので、無視してアップロードするか、3つの方法のいずれかを試してみてください。

  1. ShellProtectフォルダ内に作成された自分のアバターフォルダを消去して再暗号化します。
  2. Unityを再起動してみます。
  3. Assets - liltoon - Refresh Shaderを押してみます(時間がかかる!)

<特定の部位が単色に見える場合>

再暗号化後、Unityを再起動してください。

<ゲーム内で他の人が見たときに暗号化が解けない場合>

他の人がシェーダーとアニメーションの安全性をオフにするか、あなたをShow Avatarにする必要があります。

それでもダメな場合は、VRChatのパラメータ同期のバグにより、パスワードを変更して再アップロードする必要があります。

パラメータマルチプレックス使用時、サーバーやネットワークの状況により、他のユーザにOSC値が伝達されず、復号化ができない場合があります。

この場合、OSC 1.5.0で追加されたRefresh rateを少し上げてみてください。

<マテリアルにあったテクスチャが消える場合>

メインカラーと同じテクスチャを使用する場合、セキュリティ上の理由でそのテクスチャは削除されます。

例外として、リムライト、アウトラインテクスチャは除外されず、そのまま暗号化されたテクスチャを使用します。

詳細原理

SHA-256でキーを変形した後、XXTEA/Chacha8アルゴリズムを使用してマテリアルのMainTexureを暗号化します。

圧縮テクスチャは色のみを暗号化して容量を減らします。元のテクスチャの形は一部残ります。

テクスチャ自体を暗号化した後、VRChatサーバーにアップロードされます。このテクスチャはゲーム内のシェーダーで復号化されます。

シェーダーやマテリアル、アニメーションなどはコピーされるので、オリジナルに影響はありません。

MainTexture のみを暗号化するため、MainTexture と同じテクスチャをマテリアル内の他の場所に使用すると、セキュリティのために自動的に欠落します。足りない部分は適切なテクスチャで埋めてください。

例外として、リムライトテクスチャとアウトラインテクスチャがメインテクスチャと同じテクスチャの場合、MainTextureと同じ暗号化されたテクスチャを使用します。

性能に影響はありませんか

メモリはオリジナルより少し多くなります。2K DXT1画像基準で1mb程度大きくなります。

PoiyomiがlilToonより性能が良かったです。

<おおよそのPoiyomi GPUの測定結果> Default : 0.1ms

Point:0.2ms

Bilinear:0.35ms

それほど大きな差はないようですが、パフォーマンスを考えると、必要なテクスチャだけを暗号化することをお勧めします。

どの程度安全ですか

基本的に16バイトのキーを持ち、シェーダー内部に保存されるキーとユーザーがVRCパラメータを利用して入力できるキーに分かれています(ユーザーキーと呼びます)。

0バイトのユーザーキーは、コンパイルされたシェーダーをアセンブリアに変えて分析するだけで、知ることができます。
4バイトのユーザーキーは、誰かが時間をかければ解読することができます。 (4バイトのキー = パラメータ32 / 11(パラメータ多重化使用時))
8バイトのユーザーキーは、パーソナルコンピュータでは調べるのに時間がかかるでしょう。 (8バイトのキー = パラメータ64 / 12)
12バイトのユーザーキーからは、現代のコンピュータでは解読できません。 (12バイトのキー = パラメータ96 / 13)

最小パラメータ96(パラメータ多重化使用時13マス)を使い、ユーザーキーの数を増やすと安全です。自分のパラメータスペースを考慮してキーを設定してください。
0バイトのユーザーキーは最小限の防御と見ればよく、単純ツールを利用したツールキディを防ぐには効果的でしょう。


世の中に完璧なセキュリティは存在せず、この方法も簡単ではありませんが、同じワールド内で誰かが粘り強く自分のネットワークパケットを分析すれば、キーを見つけ出す可能性は存在します。
しかし、誰かがユーザーのアバターを無差別に取り出してどこかで共有する方法は、十分なキーサイズを持っていれば100%防ぐことができます。

予定

  • BC7対応