Exploiting Explained
Robloxにおける一般的なエクスプロイトの用語、ツール、手法についての情報を提供しています。各セクションで特定のトピックを詳しく説明しています。
はじめに
エクスプロイトについて知らない人のために、基本的な概念を導入しています。Robloxはエクスプロイトが横行しているという誤解がありますが、それは事実ではありません。この投稿では、その誤解を正すことを目的としています。
アセットの盗難
このセクションでは、アセットの盗難、特にプレイスやソースコードの盗難について説明します。
プレイスの盗難
プレイスの盗難とは、以下のような行為を指します。誰かがスクリプトエグゼキュータと、あなたのプレイスを XML や Roblox 互換形式にシリアライズするスクリプトを使用します。一部のエクスプロイトはこの機能を既に備えており、他は単にスクリプトを使用します。ポイントは、クライアントが既に利用可能なデータを使用しているため、それを止めることはできないということです。
まれに、チームクリエイト(Team Create)へのアクセスをだまし取られ、ローカルに保存して全てを盗むケースもあります。さらに、非常にまれですが、Roblox に重大なセキュリティの脆弱性が生じる可能性もありますが、その場合は何でも起こり得ます。
スクリプトの盗難
スクリプトの盗難は、プレイスの盗難と似ていますが、実際にはかなり異なります。スクリプトの盗難は、「デコンパイル」と呼ばれるプロセスによって行われます。デコンパイルとは、既にコンパイルされた Lua コード(「バイトコード」と呼ばれる形式)から、可読なソースコードを生成するためにソフトウェアを使用することです。このプロセスは止めることができませんが、Luau が新しい命令セットを使用するなどの最近の変更により、使用されるツールの開発を遅らせることができます。
デコンパイルは完璧なテクノロジーではありません。Luau が Lua で通常渡されていたデバッグ情報を削除しているため、ローカル変数名やアップバリュー名などはデコンパイラで取得できません。また、空白、コメント、スタイルの選択もバイトコードには保存されません。
最後に、デコンパイルが可能なのは LocalScript と、その LocalScript が使用する ModuleScript のみです。つまり、サーバースクリプトをデコンパイルする方法は一切ありません。誰かがあなたのサーバーコードを取得した場合、それは根本的な問題の大きな警告サインです。Roblox はサーバースクリプトのバイトコードをクライアントに送信することは決してありません。
追加のリソース
EchoReaper さんがこの問題について非常に良い投稿をしており、私が述べた基本以上の詳細が記載されています。EchoReaper の投稿
Filtering Enabled とエクスプロイト
まず最初に強調したいのは、どのような状況でも、ゲームのサーバーロジックに対する権限をクライアントに信頼してはならないということです。RemoteEvent や RemoteFunction のコードを実装する際には、攻撃者の視点で考えてください。あなたのコードは、「もし私がクライアントを完全に制御できたら、この橋を渡って何を送れば全てを壊せるだろうか?」と考えることに基づいて構築されるべきです。設計は、サーバーに「これをしてもいいですか?」と尋ねるものであり、「これをします」と命じるものではありません。
攻撃的に考える
簡単な例として、ストアがあります。サーバーに「この剣を購入できますか?」と尋ね、サーバーに「この剣を購入します」と伝えないでください。サーバーは、通貨から経験値、レベルに至るまで、実際に何が起こっているかについて最終的な判断を下すべきです。橋の向こう側にいる誰かがあなたを出し抜こうとしていると常に準備し、あなたが書いたコードが NaN を投げつけられたり、オブジェクトを期待しているのにオブジェクトのように見えるテーブルを受け取ったりするようなケースで十分にテストされていることを確認してください。
クライアント側でリモートを「セキュアにする」またはデータを「検証する」試みは、非常に一般的な落とし穴です。プロのヒントとして、クライアントから来るものは何であれセキュアにはなりません。あなたのシステムがいかに巧妙に見えても、どれだけ時間をかけても、あなたはクライアントを制御していないのです。それが安心材料になるなら追加の労力も構いませんが、それに頼るべきではありません。
防御的に考える
一部のエクスプロイトは、リモートの悪用ではなく、Roblox のプロパティのレプリケーションルールのような単純なものに依存しています。これらのエクスプロイトは、飛行、スーパージャンプ、スピードハックの形で現れることがあります。問題は、プレイヤーがキャラクターの物理的所有権を持っており、滑らかで迅速なフィードバックを得るためですが、その結果、どこにでも移動できる能力を持ってしまうことです。これらはサーバー側で軽減できますし、クライアント側で基本的なチェックを追加することもできますが、クライアントを完全に信頼することはできないことを忘れないでください。
考えるのをやめる
最後に、より厄介なエクスプロイトとして、単なるローカルの強化があります。これらは通常、一般的な方法では検出できないか、全く検出できません。エイムボット、AutoHotkey スタイルのスクリプト、ゲームプレイの自動化などの形でこれらを見ることがあるかもしれません。
ローカルソフトウェア
ここでは、Elysian、Synapse、その他のローカルコードを実行したり、他の悪戯を可能にするソフトウェアについて説明します。これらのソフトウェアは、いくつかのカテゴリーに分類されますが、一部は他よりも一般的です。Filtering Enabled とエクスプロイトのセクションで述べたヒントは、これらの問題を軽減するためにも適用されます。
スクリプトエグゼキュータ
おそらく最も一般的で、問題のあるエクスプロイトタイプはスクリプトエグゼキュータです。これらのエクスプロイトは、ユーザーが Lua コードを Roblox クライアントにロードし、通常のスクリプトや別個のコードとして実行できるようにすることに焦点を当てています。スクリプトエグゼキュータは、通常、特別な機能も備えています。
これらのエクスプロイトは、コンテキストレベルの制限をバイパスする際や、getrawmetatable や saveinstance などの作成者特有の API を持つ場合があります。これらの特殊な API は、制限を回避したり、通常はアクセスできないものを読み書きするために作成されています。「Level 4」、「Level 7」、および「Level」と数字を組み合わせた名称は、これらのエクスプロイトと、より高いコンテキストレベルの関数にアクセスできるという事実を指します。数字自体には意味がなく、これらの用語は通常、異なる意味で誤用されています。「Level ○○」は単に「スクリプトエグゼキュータ」を指す洒落た言い方です。
スクリプトエグゼキュータには、コードを実行する多くの方法があります。詳細には立ち入らず、かつて使用されたいくつかを列挙します:
プロト変換:通常の Lua コンパイラで Lua 関数を作成し、別のコードでその関数を Roblox 対応に変換します。この技術は現在も広く使用されています。
バイトコード変換:通常の Lua コンパイラで Lua 関数を作成してダンプし、その結果のバイトコードを別のコードで Roblox 対応のバイトコードに変換します。このバイトコードは、Roblox によって何らかの方法でロードされます。
VM の事前コンパイル:少し奇妙な方法ですが機能します。FiOne や LBI のような Lua in Lua の VM を取り、Roblox 対応になるように事前コンパイルし、実際の Lua バイトコードを互換レイヤーを通じて実行させます。
Lua C エグゼキュータ
これは非常にニッチなエクスプロイトタイプで、人々の怠惰から生まれました。Lua には C API があり、C コードがその内部と容易にやり取りするためのものです。「Lua C エグゼキュータ」は、単純なコマンドを解析し、関連する API 関数を呼び出すエクスプロイトを指します。これらは非常に初歩的なエクスプロイトで、通常、大きな脅威ではありません。
コマンドエクスプロイト
最も簡単なものとして、コマンドエクスプロイトはユーザーにボタン付きのインターフェースを提供します。各ボタンは、前述の C API への事前コンパイルされたコールや他のコードにバインドされます。ユーザーがボタンをクリックすると、コードが実行されます。これらは通常、飛行やテレポーテーションなどの単純なローカルエクスプロイトを目的としています。
Luau と将来
この短いセクションでは、Luau とプラットフォームの将来のエクスプロイトについて説明します。Luau は Roblox の Lua の実装で、Lua から大きく内部を変更しており、エクスプロイトにも独自の影響を与えています。
意見を述べると、エクスプロイトはプラットフォーム上で問題でなくなることはないでしょうが、それを緩和するために舞台裏で行われていることは決して小さなことではありません。常に他人やゲームに干渉したいと考える人は存在し、それは全てのゲームやプラットフォームが直面する問題です。
Luau は何をもたらすのでしょうか?これはエクスプロイトコミュニティにとって興味深い変化です。以前は、Lua とそのオープンソース性があったため、エクスプロイトを設計する際に少なくとも基盤がありました。Roblox が標準から大きく逸脱した独自の Lua 実装を使用するようになったことで、これがエクスプロイトコミュニティにどのような影響を与えるかは時間が経てばわかります。これまで存在していた人々はおそらく残り続けるでしょうが、参入障壁は確かに高くなっており、開発者は少なくとも少しは安心できるでしょう。
Roblox が行ったこと
Roblox は多くのことを行っており、そのほとんどは舞台裏です。彼らは新しいチェックや暗号化を実装したり、どのヒューリスティックが今回機能したかを公に話したりしませんが、エンジニアがこの問題に取り組んでいることは確かです。
人々はエクスプロイトを過度に誇張し、わずかな知識で誰でも次の大きなハックを開発できるかのように見せています。エンジニアに非難を投げかける代わりに、彼らが行っていることに感謝し、開発者として良いゲームデザインを実践することもあなた次第であることを忘れないでください。
クライアントに地雷を仕掛け、FilteringEnabled を強制することから、Roblox は常にクライアントの安全性に取り組んでいます。同様に、反対側の人々は常にそれを破ろうとしています。それは猫とネズミのゲームです。
最後の考察
エクスプロイトがまだ存在するかどうかに関わらず、ユーザーにとってゲームを楽しくプレイ可能にすることに集中するのが最善です。ローカルのエクスプロイトはおそらく今後も存在し、悪意のある人々は常にいます。影響を最小限に抑えるようにゲームを設計し、実際に誰がプレイしているかを考えることで、過度な心配や考えすぎを減らすことができます。
プレイヤーからのフィードバックに耳を傾けることを忘れないでください。
この投稿は、情報が古くなった場合には変更される可能性があります。
以上が、エクスプロイトに関する一般的な用語、ツール、手法についての詳細なまとめです。
最終更新