世界を動かす技術を、日本語で。

デヌーボ分析

概要

  • 本記事は Denuvo の最新技術に関する 教育目的 の解説
  • 個人メモ やリバースエンジニアとのやり取りを含む
  • Denuvoの 仕組み と保護メカニズムを詳細に説明
  • 一部 機密情報 は伏せ字処理
  • Irdeto社 への悪意は一切なし

Denuvoとは

  • Denuvo はデジタル著作権管理( DRM)および アンチタンパー 技術
  • 主に ゲーム などのデジタルメディアの 不正コピー防止リバースエンジニアリング対策 に利用
  • 従来型DRMと異なり、多様な 検証手法チェック機構 を搭載
  • ゲームコードやユーザーの正当性を 多重確認 する設計

Denuvoの基本的な仕組み

  • Denuvoは セミオンライン型DRM として機能
  • 初回起動時、 ハードウェアID を収集しサーバーへ送信
  • サーバー側で「 盗難定数」とハードウェア情報を 可逆的演算 で混合
  • サーバーから返される「 ライセンスファイル」をローカル保存
  • 以降はオフラインでも ライセンスファイル を参照し起動可能
  • 毎回起動時にハードウェア情報を再収集し、 定数の復号 や整合性チェックを実施
  • ハードウェア情報が一致しない場合、 ゲームがクラッシュ する等の不具合発生

技術的詳細

  • Denuvo導入時、特定の関数が「 保護対象」として選定
  • 保護対象関数は 仮想マシン(VM) 上で実行され、一部命令バイトがバイナリから削除
  • 削除された命令バイト群+ハードウェアIDを 可逆演算 で混合し、サーバー保管
  • ライセンスファイルは、 削除命令バイト とハードウェアIDの混合体
  • 各命令は「 License DWORD」としてVMセクション内に分散保存
  • 実行時、VMはハードウェア情報を再収集し、License DWORDを 復号
  • 復号値が正しければ元の命令を実行、不一致なら 異常動作

命令削除例

  • 例:mov DWORD PTR [rbp-4], edi の「-4」をバイナリから削除、サーバーで管理
  • ライセンスファイルがなければ、 関数が正しく動作しない
  • 関数全体を 独自バイトコード 化し、VMでのみ解釈可能
  • VM内で、削除命令の 復号ラッパー が動作し、正当性確認

ユーザー正当性チェック

  • Denuvoは複数の 整合性検証 ベクトルを実装
  • ライセンスファイル要求時、各種チェック結果をサーバー送信

Pre-OEPチェック

  • ハードウェア構成変更時(例:Windows Update、CPU交換)にも対応
  • OEP(Original Entry Point)直前に 定数復号テスト を実施
  • 期待値と異なればローカルライセンスを削除し、再取得を要求

主要なハードウェア情報収集手法

  • KUSER_SHARED_DATA :Windowsバージョン、ビルド番号、物理メモリ数など
  • CPUID命令 :プロセッサ情報やブランド文字列取得
  • SYSCALL命令 :NtQuerySystemInformation呼び出し
  • ntdll.dll検査 :特定関数のバイト列やImage Data Directoryを参照
  • PEB(Process Environment Block) :OSバージョンやサブシステム情報
  • XGETBV命令 :CPUの拡張制御レジスタ情報取得
  • GetWindowsDirectoryW :Windowsディレクトリパス取得
  • GetVolumeInformationW :ボリューム情報取得
  • GetComputerNameW :コンピュータ名取得
  • GetUsernameW :実行ユーザー名取得

コード整合性チェック

  • CRC(Cyclic Redundancy Check) によるVMハンドラや重要コードの改変検出
  • .VMセクション からランダムにバイト列を抽出し、定数生成・検証
  • 例:VMハンドラ内で「ランダム」なワードを読み込み、暗号化・復号処理で整合性維持

Denuvoの設計思想と特徴

  • 多層的保護 :ハードウェア・ソフトウェア双方からユーザー正当性を検証
  • 仮想化 :重要処理をVM化し、逆解析を困難化
  • 可逆暗号 :サーバーとクライアント間で定数を安全にやり取り
  • 動的検証 :実行時ごとにハードウェア情報を再確認し、不正利用を即座に検知

まとめ

  • Denuvoは 最先端のDRM技術 を駆使し、 不正利用防止 を徹底
  • 多様な ハードウェア情報収集コード整合性検証 を組み合わせた高度な保護構造
  • 一部情報は 公開されていない独自技術 を含むため、詳細は割愛
  • 本記事は 教育・研究目的 の情報共有

Hackerたちの意見

高校生の頃からゲームを海賊版でやってないけど、今の状況のおかげで、金払って買ったゲームのUXが最悪になってる。こっちにはどうしようもないしね。Cloudflareみたいなもんかな。誰かがちゃんと行動しないせいで、他の人が苦しむっていう。

子供の頃からゲームを海賊版でやってないけど、Linuxを使ってるし、デスクトップでもROG Ally(Bazzite)でもLinuxでゲームしてる。ゲームを買うときの体験は、DRM付きのゲームは買わないか、動くかもしれないゲームを買って、正しいProtonのバージョンを探すのにちょっと時間がかかるって感じ。機械の識別子を頻繁に変えたりすると、一時的に禁止されたりもするし。本当に、払ってる人より払ってない人の方が、ゲームや音楽、動画の体験がずっといいっていうのは、まるで悪い冗談みたいだよ。

「誰かがちゃんと行動しないせいで、他の人が苦しむ」これは自己成就的だね。Denuvo付きのゲームが出ると、ちゃんと行動しない人もいるから。

Denuvoが原因で体験のどの部分が悪くなるの? Denuvo付きのゲームを持ってたけど、Denuvoが外れた後、少なくとも私の限られた経験では、特に違いは感じなかったよ。DRM全般に対する反論や、買ったものを所有することの重要性は理解できるけど、それは別の問題のように思う。

もし役に立つなら、Denuvoで保護されたゲームをマークするSteamのキュレーターがあるよ。購入前にその事実をもっと目立たせるためにね。https://store.steampowered.com/curator/26095454-Denuvo-Watch...

記事で触れられてないのは、なぜUD2が選ばれたのかってこと。これはSecuROM時代の遺物で、実際、SecuROMの開発者の一人がDenuvoでも働いているか、働いていたんだろうね。SecuROM時代のものがDenuvoに残っていると思うけど、記事を読むと、Denuvoのせいで将来的に特定のゲームが動かなくなることに気づくよ。「これにより、例外ベースのフックが破壊される。大抵の場合、例外がトリガーされると、Windowsは未使用のスタックスペースの高い位置にEXCEPTION_RECORDを書き込む。これがどうなるかは分かると思う。今や、CPUIDが例外を通じてフックされると、その重要な値がEXCEPTION_RECORDで上書きされて、後で未定義の動作を引き起こす。デバッガをプロセスにアタッチして、例外処理に関する特定のフラグを設定すれば回避できると思うけど、ハードウェアチェックをすべてパッチする方法は、ランダム性のせいで面倒だよ。」Windowsが成熟するにつれて、動作が変わって特定のものが壊れることもある。

Windowsが成熟するにつれて、動作が変わって特定のものが壊れることがある。前述の技術がそのゲームを壊すと思ってるの?もし何かが「壊れる」としたら、それはアンチタンパー機能が無効になるだけだよ。

識別情報を「盗まれた定数」や「盗まれた命令」と呼ぶのが混乱する。なぜそれが盗まれたと見なされるのか理解できない。「傍受された」と言いたいのかな?

「盗まれた」定数や命令は、元の(VM難読化された)バイナリに含まれていたコードの一部だよ。これらの定数や命令はバイナリから削除され、サーバーから難読化された形で提供される。つまり、ゲームを買ったときに手に入るバイナリは不完全で、サーバーから動的で暗号化された、システム依存のパッチを受け取って、欠けている部分(「盗まれた」部分)を補うことになる。

これはリバースエンジニアリングや低レベルプログラミングではよく使われる用語だね。VMでは、元のバイナリから取られたバイトや命令、定数を指して「盗まれた」って言うことが多いよ。オブフスケートされてるかどうか、ローカルバイナリにまだあるか、デヌーボみたいなサーバーにあるかは関係なくね。

明らかに効果的だよ。PCゲームの海賊版サイトに行くと、ほとんどのゲームが手に入るけど、Denuvoで保護されているものは数年経っても入手できない。誰もそれをクラックしようとしないか(ありえないけど)、Denuvoが素晴らしい仕事をしているかのどちらかだね。

ある程度はそうだけど、これは「解けない」っていうよりコストと利益の分析だよ。デヌーボはすごく侵入的だから、ソフトウェアの脆弱性を利用するのは労力に見合わない(ユーザーのリスクもあるし)、だから物理的な脆弱性が売られることが多い。例えば、物理的なFPSの脆弱性には、HDMI/DPチェーンに接続してUSB出力でキーボードとマウスをエミュレートするデバイスが含まれてる。

Hacker Newsで議論の続きを見る