Skip to content

元ドキュメント: Operation Guide

PCゲームクライアントハードニングツール使用説明

PCゲームクライアントハードニングツールは、AutoPack.exeを呼び出してコマンドラインを入力することでハードニングを行います。ハードニング完了後の終了コードが0であれば成功、それ以外は失敗です。ハードニング中にエラーが発生した場合は、まずエラーメッセージを参照して解決を試みてください。解決できない場合はカスタマーサービスにお問い合わせください。

準備作業

ハードニングプロセスで使用する関連ファイルをinput.zip圧縮ファイルにパッケージ化する必要があります。この圧縮ファイルに含まれるファイルは以下の通りです(注:[ ]内で言及されているパラメータについては、後述のツールパラメータ説明を参照):

  1. ハードニング保護対象のファイルが必須です。通常はゲームのメインプログラムファイル(例:game.exe)で、そのファイルパスをコマンドラインツールの[protect]パラメータとして入力します。
  2. 暗号化保護が必要なPEファイル(例:game.exe、Core\gamecore.dll)を含めることができます。そのファイルパスをコマンドラインツールの[vm]パラメータとして入力すると同時に、暗号化保護対象ファイルに対応するmapまたはpdbファイル(例:game.map、Core\gamecore.map)、およびvm設定ツールで生成した対応する暗号化設定ファイル(例:game.exe.tvmp、Core\gamecore.dll.tvmp)も含める必要があります。具体的な暗号化設定ファイルの生成方法については、後述のTvmProtect設定ツール使用説明を参照してください。
  3. 署名検証が必要な複数のファイル(例:Core\gamecore.dll)を含めることができます。そのファイルパスをコマンドラインツールの[verify]パラメータとして入力します。
  4. Unityゲームのビルド関連ファイルを含めることができます。必要なファイルについては後述の「Unityゲームビルドモード」を参照してください。

例:準備作業の手順に従ってパッケージ化されたinput.zipのディレクトリ構造は以下の通りです:

ツール呼び出し方法

bash
AutoPack.exe --appid <appid> --protect <path> --vm <path> --verify <path> --unity <flag> 
--input <inputPath>  --output  <outPath>

例:準備作業で提供されたinput.zip圧縮ファイルを使用する場合のコマンドラインツール呼び出し例:

bash
AutoPack.exe --appid 111 --protect game.exe --vm game.exe;Core\gamecore.dll --verify 
Core\gamecore.dll --unity true --input "C:\input.zip"  --output  "C:\output.zip"

ツールパラメータ説明

パラメータ名パラメータ内容必須入力例
[appid]ハードニングサービスに必要なappid(Game ID(javascript:😉)はい--appid 111
[protect]ハードニング対象ファイルのパス。1つのみで、通常はexe(input.zip圧縮ファイル内での相対パス)はい--protect game.exe
[vm]暗号化保護対象PEファイルのパスリスト。英語区切り文字「;」で区切る(input.zip圧縮ファイル内での相対パス)いいえ--vm game.exe;Core\gamecore.dll
[verify]署名検証対象ファイルのパスリスト。英語区切り文字「;」で区切る(input.zip圧縮ファイル内での相対パス)いいえ--verify Core\gamecore.dll
[unity]Unityゲームの場合、Unity保護を有効にする場合はtrue、それ以外の場合は入力不要いいえ--unity true
[input]準備作業手順でパッケージ化したinput.zipファイルのパス(フルパスで入力)はい--input "C:\input.zip"
[output]ハードニング出力パッケージのパス(フルパスで入力)はい--output "C:\output.zip"

TvmProtect設定ツール使用説明

操作手順

  1. ConfigTool.exeファイルを実行します
  2. 暗号化保護対象のPEファイルと同じディレクトリに、対応する同名のmapまたはpdbファイルがあることを確認した上で、PEファイルをツールにドラッグ&ドロップします
  3. ファイルを入力すると、該当実行可能モジュールに対応する関数リストが表示されます。対応する関数リストを選択し、右クリックメニューまたはショートカットキーで難読化または仮想化に設定します
  4. 暗号化設定を保存すると、同ディレクトリに同名の.exe.tvmpファイルが生成されます

Unityゲームビルドモード

Mono-Backend

  • MonoBleedingEdge/EmbedRuntime配下のmono-2.0-bdwgc.dll、またはGame_Data/Mono配下のmono.dllをコピーする必要があります
  • Game_Data/Managedディレクトリ配下のAssembly-CSharp.dllをコピーする必要があります
  • Game_Dataディレクトリ配下のlevel0をコピーする必要があります
  • ファイルをコピーする際は元のディレクトリ構造を保持してください。例:

IL2Cpp-Backend

  • GameAssembly.dllおよびglobal-metadata.datファイルをコピーする必要があります

補足説明

コンパイルオプション関連

*PEヘッダーFILEALIGNオプション

VS2008コンパイラを使用している場合、FILEALIGNオプションを0x1000に変更してください。Linker->Command Line->Additional optionsに /FILEALIGN:0x1000 を追加するだけです。ハードニング処理によりPEファイルの後にセクションが追加されるため、デフォルトのFILEALIGNオプションである0x400では容量不足となり、セクション追加ができません。

*DLLモジュールでの__declspec(thread)機能の使用禁止

XP環境下では、LoadLibraryは静的TLSを使用した動的読み込みに対応していません。ゲームが静的TLSを使用したモジュールと静的リンクしている場合、ハードニング後にこれらのモジュールが動的に読み込まれるようになり、読み込み失敗から直接クラッシュにつながります。TLS機能を使用する必要がある場合、TlsAlloc等のAPI呼び出しによる動的TLSの実装に変更することをお勧めします。確認方法:CFF Explorerを使用してTLSディレクトリテーブルの有無を確認します(下図のようにTLSディレクトリテーブルがある場合は不合格です)

*EXEモジュールでの.Netコンポーネントの静的参照禁止
VS2015以降のコンパイラを使用している場合、コンパイラが暗黙的に追加するTLSを削除するためのコンパイルオプション /Zc:threadSafeInit- を追加してください。確認方法:下図のexeは.Net Directoryを含んでいるためハードニングできません

VM暗号化関数選定原則

  • 自身の保護ソリューションに関連する関数(例:antibot関連コードが存在する関数)
  • ネットワークプロトコル送受信関数および関連関数
  • 衝突検出関連関数
  • AI処理関連関数
  • リソース暗号化・復号および処理関連関数
  • ダメージ計算関連関数
  • アイテム処理関連関数(取得、破棄、修理など)
  • ショップ処理関連関数(ショップの開閉、アイテム売買など)
  • 倉庫操作関連関数
  • クエストシステム関連関数(クエストの受諾、完了、放棄など)
  • 攻撃関連関数(通常攻撃関連関数、スキル使用関連関数)
  • 経路探索関連関数(移動関数など)
  • キャラクターログイン関連関数(キャラクター選択など)
  • NPCインタラクション関連関数

mapファイル生成方法

VC++ map生成方法:「Property Pages->Linker->Debug->Generate Map File」で「Yes (/MAP)」に設定します

MSDN関連リンク: https://docs.microsoft.com/ja-jp/cpp/build/reference/map-generate-mapfile

管理者権限

ハードニング後のゲームプログラムにはドライバー保護が含まれており、ドライバーを正常に読み込むには管理者権限でのログインが必要です。ゲームEXEには管理者権限での実行設定が必要です。設定方法は以下の通りです:

  1. 開発環境がVC環境かつVisual Studio 2008以上の場合、以下の図のようにVS2008で設定します:Property Pages->Linker->Manifest File->UAC Execution Level=requireAdministrator
  2. その他のVC開発環境(Visual Studio 2008未満)の場合、ゲームのメインプログラムリソースファイルに権限昇格用のmanifestを追加する必要があります。例:ゲームプロジェクトにカスタムリソースを追加し、resource type=24、ID=1、内容は以下の通りです:
xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
  version="1.0.0.0"
  processorArchitecture="X86"
  name="axLaunch.exe.manifest"
  type="win32" />
 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>
</assembly>

この時点でResource Filesの下にrt_manif.binが追加されます。プロジェクトをRebuildすると、Vista/Win7/Win10環境で管理者権限が付与されます(アイコンに小さな盾マークが表示されます)

Tencent Cloud プロダクトドキュメント