INDIE INDEX

Steam でゲームの中身を守る仕組み|Steam DRM・所有の確認・チート対策の BAN

公開 2026-09-25更新 2026-09-25Steam(Steamworks Partner Program / Steam Direct)

Steam DRM は実行ファイルを包み、ゲームより先に Steam を起動して所有を確かめる仕組みです。ファイルを別の PC に写すだけの複製は防ぎますが、それだけで海賊版を防ぐものではありません。所有の確認には API があり、チートには Game Ban を使えます。

このページの目次
  1. Steam DRM が守るものと守らないもの
  2. Steam DRM のかけ方
  3. ほかの DRM と組み合わせるとき
  4. ストアページで知らせる欄(第三者の DRM とチート対策)
  5. Steam で所有を確かめる方法
  6. CD キーの代わりに Steam の所有の確認を使う形
  7. チート対策として Steam が用意している仕組み(Game Ban)
  8. 情報源

Steam DRM が守るものと守らないもの

Steam DRM のラッパーは、ゲームの実行ファイルを包む仕組みです。ゲームより先に Steam を起動させることで、ゲームの所有を確かめ、Steamworks の機能が正しく動くようにします。

ラッパーだけでは、海賊版への対策にはなりません。防げるのは、ゲームのファイルを丸ごと別のコンピューターに写すような、ごく手軽な複製です。いくらかの難読化も入りますが、外そうとする人には簡単に外されます。

C# などの .NET のアプリケーションには、ラッパーは対応していません。その場合に代わりに使うのは SteamAPI_RestartAppIfNecessary です。この関数は、実行ファイルが Steam から起動されたかを調べ、そうでなければ Steam を通して起動し直します。主な実行ファイルに Steam DRM のラッパーをかけていれば、この確かめはラッパーが中で行います。

Steamworks SDK の全体はSteamworks SDK とは|Steam への送信と機能連携に使う無料の公式ツールにまとめています。

Steam DRM のかけ方

ラッパーは、公開するビルドのたびにかけ直す必要があります。かけ方は2つあります。

ビルドを上げる手順の中でかける

SteamPipe でビルドを上げるスクリプトの中で、ログインしたあとに、DRM をかける Steam のコマンドを走らせます。ログインしたクライアントを通して Steam のサーバーに準備の要求を送り、包む前の実行ファイルをサーバーへ送ります。包む処理はサーバーの側で行われ、steamcmd が包んだ実行ファイルを受け取ります。

コマンドに渡すのは、アプリの番号(App ID)、包む前の実行ファイルの道、包んだ実行ファイルを書き出す道、ツールの名前、動きを決める数の5つです。ツールの名前として使えるのは、いまは drmtoolp だけです。

コマンドに渡す数と、ラッパーの動き

数動き
0ふつうに包む(守りがいちばん多い)
6互換モード(難読化を切る)
32デバッガの確認を飛ばす
38互換モードで、デバッガの確認も飛ばす(守りがいちばん少ない)
表1

デポとビルドの扱いはSteam のビルドは SteamPipe で上げる|デポとブランチはどう分かれるのかにまとめています。

Steamworks の管理画面でかける

  1. App Admin のページで、DRM をかけるゲームを選びます
  2. 「Technical Tools」の欄にある「Edit Steamworks Settings」を選びます
  3. 「Security」のタブで「DRM」を選びます
  4. 主なゲームの実行ファイルを上げます。動きの選び方は、上の表と同じです
  5. 包まれた実行ファイルを手元にダウンロードします
  6. 実行ファイルの名前を元の名前に戻します
  7. デポの中身を置く場所に写します
  8. デポの新しい版を作ります
  9. 手元のコンテンツサーバーで、そのデポを試します

ほかの DRM と組み合わせるとき

Steam DRM のラッパーは、ほかの DRM と組み合わせて使えます。そのときは、ほかの DRM をかける前に、Steam のラッパーを互換モードで先にかけます。互換モードでは、ラッパーの DRM としての働きは切れます。互換モードは、管理画面の選択の欄か、コマンドに渡す数で選びます。

ラッパーをかけたあとにゲームが動かなくなる理由の1つは、ほかの DRM のツールとの衝突です。

ラッパーをかけた実行ファイルを、ウイルス対策ソフトがウイルスとして検出することがあります。ラッパーを入れる処理が、ウイルスと同じ形で実行ファイルを書き換えるためです。その場合の手立ては、ウイルス対策ソフトの提供元に連絡するか、ラッパーを使わずに API を使うかです。

ストアページで知らせる欄(第三者の DRM とチート対策)

ストアページの編集の「Basic Info」のタブには、第三者の DRM と、第三者のアカウントの作成について開示する欄があります。どちらも、求められている開示の1つです。

2024年10月30日には、同じタブに「Anti-Cheat」の欄が加わりました。ゲームと一緒に入るチート対策のソフトを書く欄で、書いた内容はストアページに表示されます。

利用者の PC に入り、カーネルのモードで動くチート対策を入れるゲームは、新しく Steam に出すときにこの欄を埋める必要があります。カーネルを使わないチート対策や、サーバーの側だけで動くチート対策は、書くか書かないかを選べます。新しいゲームのビルドの審査では、カーネルのレベルのファイルを書き換えるチート対策を入れている場合に、この欄での開示があるかが見られます。

欄の埋め方は次のとおりです。

  1. Steamworks にサインインし、アプリのページを開きます
  2. 「Edit Store Page」を押します
  3. 「Anti-Cheat」の欄まで下がります
  4. 使っているチート対策の提供元を一覧から選びます。一覧に無いときや自分で作った仕組みのときは、「other」の欄に入れます
  5. 「Save」を押し、「Publish」のタブでストアページの変更を公開します

欄には2つのチェックボックスがあります。1つは、ゲームのどれかのモードで、チート対策が OS のカーネルのレベルのファイルを入れるか書き換えるかを示すものです。一覧から仕組みを選ぶと、仕組みに応じて、自動で選ばれるか、選べなくなります。もう1つは、アンインストールのときにファイルが片付くかを示すものです。

ストアページのほかの場所にチート対策のことを書いていた場合は、その記述をこの欄に移し、元の場所からは消します。

Steam で所有を確かめる方法

Steam の利用者は、Steam ID という64ビットの数で1人ずつ見分けられます。利用者が誰か、ゲームを持っているかを確かめる方法は、確かめる相手によって分かれます。

ゲームのクライアントどうし・ゲームのサーバーとのあいだ(セッションチケット)

セッションチケットは、署名の入ったチケットです。ピアツーピアのマルチプレイでほかのクライアントに、またはゲームのサーバーに渡して、利用者が誰かを確かめます。

  1. クライアント A が ISteamUser::GetAuthSessionTicket でチケットを取ります
  2. クライアント A がチケットをクライアント B に送ります
  3. クライアント B がチケットを ISteamUser::BeginAuthSession に渡します。結果は ISteamUser::ValidateAuthTicketResponse_t のコールバックで返ります
  4. セッションが終わったら、A は ISteamUser::CancelAuthTicket を、B は ISteamUser::EndAuthSession を呼びます

セッションチケットを使うと、Steam がいまのアプリの所有を自動で確かめます。持っていない利用者の結果には k_EAuthSessionResponseNoLicenseOrExpired が入ります。DLC を持っているかは、ISteamUser::UserHasLicenseForApp で調べます。チケットは1回しか使えません。

セッションチケットでは、利用者が VAC(Valve のチート対策の仕組み)で BAN されているかも分かります。

ゲームのクライアントと、開発者のサーバーのあいだ

セッションチケットと Steamworks の Web API を使う方法では、クライアントが ISteamUser::GetAuthTicketForWebApi でチケットを取り、開発者のサーバーに送ります。開発者のサーバーは ISteamUserAuth/AuthenticateUserTicket を呼び、チケットが正しければ利用者の64ビットの Steam ID が返ります。そのあと ISteamUser/CheckAppOwnership で、その利用者が特定の App ID を持っているかを調べます。

暗号化されたアプリのチケット(Encrypted Application Tickets)を使う方法では、開発者のサーバーは HTTPS の要求を送らずに、SDK に入っているライブラリと秘密の鍵でチケットを確かめます。

鍵はタイトルごとに、アプリの「Edit Steamworks Settings」の「Security」から「SDK Auth」を選んで作ります。この画面を開くには、そのアプリについて「Manage Signing」の権限が要ります。鍵は安全に保管し、アプリケーションに入れて配ってはいけません。

Steam は、その App ID を持っている利用者にだけ、このチケットを作ります。チケットは、作られてから21日で期限が切れます。DLC を持っているかは SteamEncryptedAppTicket::BUserOwnsAppInTicket で調べます。

Web ブラウザから

Steam は OpenID 2.0 の提供者です。ほかの Web サイトは OpenID で利用者の Steam ID を受け取り、そのあと ISteamUser/CheckAppOwnership で所有を調べられます。

家族で共有された写しで遊んでいるとき

Steam ファミリーの共有は、すべてのゲームと DLC で、はじめから有効になっています。ゲームの中では ISteamApps::BIsSubscribedFromFamilySharing で、共有された写しで遊んでいるかを調べられます。元の持ち主の Steam ID は ISteamApps::GetAppOwner が返します。

開発者のサーバーから ISteamUser/CheckAppOwnership を呼んだ場合、共有された写しなら、返る「permanent」の値が false になり、「ownersteamid」に元の持ち主の Steam ID が入ります。家族の共有による利用の権利は一時的なものとして扱われます。VAC ではない独自の BAN の仕組みを持つゲームでは、遊んでいた人と元の持ち主の両方を BAN するときに、この確かめが要ることがあります。

DLC の配り方と所有の確かめ方は、Steam で実装が要る3つと、あとから選べる機能|実績100個・クラウド100MBの DLC の節にまとめています。

CD キーの代わりに Steam の所有の確認を使う形

第三者の CD キーで行っていたことは、Steam の所有の確認で置き換えられます。

CD キーの使いみちと、Steam での置き換え方

CD キーの使いみちSteam での置き換え方
持っている人だけが入れる掲示板OpenID でサインインしてもらい、返った Steam ID で `ISteamUser/CheckAppOwnership` を呼ぶ
Steam の外にある DRM の無いビルドを渡すOpenID と `ISteamUser/CheckAppOwnership` で、自分のサイトで渡す。または、DRM の無いビルドを任意で入れる無料の DLC として上げる
自分のサイトで売り、キーで使えるようにするOpenID でサインインしてもらい、返った Steam ID で `ISteamUser/CheckAppOwnership` を呼ぶ
キーで、使える版を分ける版ごとに別の App ID を持たせ、クライアントのチケットと `ISteamUser/CheckAppOwnership` で所有を確かめる
表2

チート対策として Steam が用意している仕組み(Game Ban)

Game Ban は、Valve の BAN の仕組みを使って、チートをしたプレイヤーを自分のゲームから締め出す仕組みです。BAN の記録を自分で持つ仕組みを作らずに済みます。

チートを見つけるのは、Steam ではなく開発者です(開発者が頼んだ相手でもかまいません)。見つけたら ICheatReportingService の Web API で知らせ、ICheatReportingService/RequestPlayerGameBan で BAN します。BAN の期間は開発者が選びます。

BAN された利用者は、BAN された App ID で、安全なサーバー(BAN された人を入れないサーバー)に入れなくなります。BAN は Steam コミュニティのプロフィールに公開で表示されます。家族の共有で遊んでいた場合、BAN はゲームの元の持ち主にもかかります。BAN された利用者は、自動の返金の対象になりません。返金の条件はSteam の返金は2週間以内・2時間未満まで|価格は37通貨で決めるにまとめています。

Game Ban は、マルチプレイのゲームだけで働きます。BAN された利用者を締め出すのはゲームのサーバーなので、1人で遊ぶゲームでは何も起きません。使うには、ゲームのクライアントとサーバーで、Steam の認証の API による認証を必ず行います。そのうえで、App Admin の「Anti-Cheat Configuration」のページで、チート対策の API を有効にします。有効にしないと Game Ban はかけられません。チート対策の設定を変えるには、そのアプリについて「Manage Signing」の権限が要ります。

ゲームのサーバーは、ISteamUser::BeginAuthSession の結果の ISteamUser::ValidateAuthTicketResponse_t に k_EAuthSessionResponsePublisherIssuedBan が入っていたら、その利用者をセッションから切ります。安全なサーバーにするか、しないかは、動いているゲームの1つ1つが、その場で選べます。

Game Ban は、チートを扱うための仕組みです。マルチプレイでチートによって不公平な優位を得たプレイヤーにだけ使います。ほかのゲームでの BAN を理由に、自分のゲームで遊ぶのを止めることはできません。無期限の BAN は、自分のゲームでチートが見つかった利用者にだけかけます。Steam の API を使う場合も、自分の仕組みを使う場合も、チート対策があることを利用者に前もって知らせ、BAN をはっきり説明する画面をゲームの中に置きます。

チート対策の API を有効にすると、ゲームの贈り物にも影響します。ある利用者がゲームを贈った相手が無期限の BAN を受けると、贈った利用者はそのゲームをもう贈れなくなります。

チート対策の仕組みを Proton で動かすときの設定は、Proton で動くかを確かめるには Linux 環境が要るにまとめています。

情報源

Steam 完全ガイドを順番に読む33本のうち33本目

このページに出た言葉