Steam でゲームの中身を守る仕組み|Steam DRM・所有の確認・チート対策の BAN
Steam DRM は実行ファイルを包み、ゲームより先に Steam を起動して所有を確かめる仕組みです。ファイルを別の PC に写すだけの複製は防ぎますが、それだけで海賊版を防ぐものではありません。所有の確認には API があり、チートには Game Ban を使えます。
このページの目次
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 | 互換モードで、デバッガの確認も飛ばす(守りがいちばん少ない) |
デポとビルドの扱いはSteam のビルドは SteamPipe で上げる|デポとブランチはどう分かれるのかにまとめています。
Steamworks の管理画面でかける
- App Admin のページで、DRM をかけるゲームを選びます
- 「Technical Tools」の欄にある「Edit Steamworks Settings」を選びます
- 「Security」のタブで「DRM」を選びます
- 主なゲームの実行ファイルを上げます。動きの選び方は、上の表と同じです
- 包まれた実行ファイルを手元にダウンロードします
- 実行ファイルの名前を元の名前に戻します
- デポの中身を置く場所に写します
- デポの新しい版を作ります
- 手元のコンテンツサーバーで、そのデポを試します
ほかの DRM と組み合わせるとき
Steam DRM のラッパーは、ほかの DRM と組み合わせて使えます。そのときは、ほかの DRM をかける前に、Steam のラッパーを互換モードで先にかけます。互換モードでは、ラッパーの DRM としての働きは切れます。互換モードは、管理画面の選択の欄か、コマンドに渡す数で選びます。
ラッパーをかけたあとにゲームが動かなくなる理由の1つは、ほかの DRM のツールとの衝突です。
ラッパーをかけた実行ファイルを、ウイルス対策ソフトがウイルスとして検出することがあります。ラッパーを入れる処理が、ウイルスと同じ形で実行ファイルを書き換えるためです。その場合の手立ては、ウイルス対策ソフトの提供元に連絡するか、ラッパーを使わずに API を使うかです。
ストアページで知らせる欄(第三者の DRM とチート対策)
ストアページの編集の「Basic Info」のタブには、第三者の DRM と、第三者のアカウントの作成について開示する欄があります。どちらも、求められている開示の1つです。
2024年10月30日には、同じタブに「Anti-Cheat」の欄が加わりました。ゲームと一緒に入るチート対策のソフトを書く欄で、書いた内容はストアページに表示されます。
利用者の PC に入り、カーネルのモードで動くチート対策を入れるゲームは、新しく Steam に出すときにこの欄を埋める必要があります。カーネルを使わないチート対策や、サーバーの側だけで動くチート対策は、書くか書かないかを選べます。新しいゲームのビルドの審査では、カーネルのレベルのファイルを書き換えるチート対策を入れている場合に、この欄での開示があるかが見られます。
欄の埋め方は次のとおりです。
- Steamworks にサインインし、アプリのページを開きます
- 「Edit Store Page」を押します
- 「Anti-Cheat」の欄まで下がります
- 使っているチート対策の提供元を一覧から選びます。一覧に無いときや自分で作った仕組みのときは、「other」の欄に入れます
- 「Save」を押し、「Publish」のタブでストアページの変更を公開します
欄には2つのチェックボックスがあります。1つは、ゲームのどれかのモードで、チート対策が OS のカーネルのレベルのファイルを入れるか書き換えるかを示すものです。一覧から仕組みを選ぶと、仕組みに応じて、自動で選ばれるか、選べなくなります。もう1つは、アンインストールのときにファイルが片付くかを示すものです。
ストアページのほかの場所にチート対策のことを書いていた場合は、その記述をこの欄に移し、元の場所からは消します。
Steam で所有を確かめる方法
Steam の利用者は、Steam ID という64ビットの数で1人ずつ見分けられます。利用者が誰か、ゲームを持っているかを確かめる方法は、確かめる相手によって分かれます。
ゲームのクライアントどうし・ゲームのサーバーとのあいだ(セッションチケット)
セッションチケットは、署名の入ったチケットです。ピアツーピアのマルチプレイでほかのクライアントに、またはゲームのサーバーに渡して、利用者が誰かを確かめます。
- クライアント A が
ISteamUser::GetAuthSessionTicketでチケットを取ります - クライアント A がチケットをクライアント B に送ります
- クライアント B がチケットを
ISteamUser::BeginAuthSessionに渡します。結果はISteamUser::ValidateAuthTicketResponse_tのコールバックで返ります - セッションが終わったら、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` で所有を確かめる |
チート対策として 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 環境が要るにまとめています。
情報源
- Steamworks — Steam DRM(ラッパーの働き・かけ方・ほかの DRM との組み合わせ)https://partner.steamgames.com/doc/features/drm確認日 2026-09-25
- Steamworks — Steamworks API Overview(SteamAPI_RestartAppIfNecessary)https://partner.steamgames.com/doc/sdk/api確認日 2026-09-25
- Steamworks — Store Page, Building and Editing(Basic Info のタブの欄)https://partner.steamgames.com/doc/store/page確認日 2026-09-25
- Steamworks Development — New Tool for Describing Anti-Cheat in Games(2024-10-30)https://store.steampowered.com/news/group/4145017/view/4547038620960934856確認日 2026-09-25
- Steamworks — User Authentication and Ownership(利用者の認証と所有の確認)https://partner.steamgames.com/doc/features/auth確認日 2026-09-25
- Steamworks — Steam Families(家族の共有と所有の確認)https://partner.steamgames.com/doc/features/families確認日 2026-09-25
- Steamworks — Anti-cheat and Game Bans(Game Ban と守る決まり)https://partner.steamgames.com/doc/features/anticheat確認日 2026-09-25
- Steamworks — Anti-Cheat Integration(使うための条件と組み込み方)https://partner.steamgames.com/doc/features/anticheat/vac_integration確認日 2026-09-25