2013/01/30
KAICHO: s_naray[at]yahoo[dot]co[dot]jp
※SPAM防止中

吉里吉里/KAGでのデータ暗号化(実践編)

■はじめに

本書では、吉里吉里/KAGを利用したゲームにおいて、データを暗号化するプラグインを 提供する。実現方法については 吉里吉里/KAGでのデータ暗号化方法例に譲り、 ここでは詳細は述べない。

このプラグインは、データ割れ(ゲームパッケージ(.xp3)ファイルを展開してデータを 取り出す、あるいはそれを再配布する行為)を防止するために作成された。 従って、これはゲーム全体のコピープロテクトではない。ゲームのコピーには 無力である。コピープロテクトはまた別の仕組みが必要になるので、ご注意。

■これがそのプラグインだ!

提供するプラグインは以下の通り。この二つのファイルは常にセットで提供され、 片方を更新したら必ずもう片方も更新する必要があり、また、更新後は更新前の .xp3データを復号できなくなることに注意(詳細は後述)。

ダウンロード バージョン 実際のファイル md5sum 機能
xp3filter0101.zip 0.1.0.1 xp3enc.dll a71fb1de08b64bc134d7de2b0ee215fc krkrrel.exeと同じディレクトリにコピーして、リリーサがxp3パッケージを作る 時にエンコードする
aaaaaaaa.tpm a895b380b480ede48d9b422183247a3f ゲームディレクトリにコピーすることで、xp3enc.dllでエンコードしたxp3 パッケージをデコードする

■使い方

以下に使い方を述べる。なお、本プラグインは.xp3ファイルを作成する人だけを 対象にしている。.exe形式のゲームは作成できないので注意。

1.XP3にする前のゲームディレクトリを用意する

フツーに開発していれば、開発中のゲームディレクトリには、以下が用意されている はずだ。それをそのまま使えばいい。 とにかく、「そこでkrkr.exe(またはその名前を変更したもの)を実行すれば、 ゲームが開始される」環境があればよい。

2.今回の暗号化・復号化ファイルを配置する

  1. 吉里吉里リリーサ(krkrrel.exe)と同じディレクトリに xp3enc.dllをコピー
  2. ゲームディレクトリ(のpluginディレクトリ以下でもよい)に、aaaaaaaa.tpmを 適当な名前(拡張子はtpm)に変更してコピー
  3. ゲームディレクトリに sigdata.t01 というファイルを作成する。中身はなんでも よい。数百byte以上の大きさがあればよろし。テキストでサークル名とか コピーライトとか、そういうのを書いてもいいし、無意味なバイナリファイルでも いい。このファイルを暗号化キーにする(ハッシュ作るので内容は問わない)
「適当な名前にする」のは重要だ。例えばlayerBlend.tpmのような名前にしておけば、 クラッカーがぱっと見た時に「なんだレイヤ操作プラグインか」のように見逃して くれるかもしれない。そういう地味なトラップが、実はかなり効くのよね。

3.吉里吉里リリーサで暗号化する

リリーサの動作詳細は 公式ページの「Releaserについて」を参照。注意点は以下二点。

  1. 正しくxp3enc.dllがコピーされていれば、リリーサの「オプション」タブに 「xp3enc.dllを使う(E)」というチェックボックスが追加されているはず。 追加されていなければ、xp3enc.dllのコピーに失敗している。もう一度md5sumや コピー先の場所を確認すること。これをチェックすることで、作成されるxp3ファイルが 暗号化される。

  2. 「作成」ボタンを押すと、作成が始まる「前」にkrkr.exeの場所を選択させるダイアログが表示されるので、ここで今回のゲームディレクトリにある krkr.exe(名前は変更していてもよい)を指定すること。デフォルトのkrkr.exe でなくて、「今回使う」krkr.exeを指定しなければならないことに注意。理由は後述。

なお、エンドユーザには、ゲーム一式(sigdata.t01含む)とaaaaaaaa.tpmのみ提供する 必要がある。xp3enc.dllはエンドユーザに提供する必要はない。

■使用上の注意

ホントは割れに繋がるから書きたくないけど、書かなければいけないから書いておく。

  1. リリース後はいくつかのファイルを変更できないこと
    この暗号化では、krkr.exe(の名前を変更したもの)と*.tpmファイル、*.dllファイル、 及びsigdata.t01ファイルを暗号化のキーとしている。従って、これらのファイルは リリース後変更することができない。 変更すると、xp3が復号化できなくなり、実行時に「ファイル壊れてます」という エラーとなる。さすがにパッチとはいえこれらのファイルを変更することはない だろうから大丈夫だと思うが、困りそうな人は導入前に検討すること。 これは、xp3dumper.tpmのような、暗号化xp3を問答無用で割ってしまうプラグインの 利用を防ぐための処置だ。
    弊害として、krkr.exeを変更することができなくなってしまう。krkr.exeを 変更するのは、例えばsignatureをつける時やkrkrconf.exeで設定を変更する時など。 だから、署名付けやkrkrconf.exeでの設定などは、リリーサでXP3ファイルを作成する 「前」までに終了させておくこと。
    当然、aaaaaaaa.tpmにバグがあったとしても、修正できない。修正後のファイルが 元ファイルと違うと認識され、暗号化xp3を復号できなくなるためだ。
    これについてはそのうち一考しなければならないとは思うが、今は、 例えば、「krkr.exeっぽく動いて復号化dll(.tpm)を読み込んでxp3ファイルを 展開しちゃうようなツール」を防ぐために、現在はこうしている。 もっといい方法あれば是非教えて下さい。

  2. 展開できなくなった時、デフォルトでは吉里吉里Controlが開くこと
    展開できないとき、つまり、割れを検知した時は、データが破損していると判断 するため、デフォルトの吉里吉里では吉里吉里Controlが表示される。 コントローラが表示されるということは、そこからデバッグコンソールを 起動できるということだ。そうなると、コンソール下部の一行から色々できてしまう。 (実際にはxp3ファイルは展開できないので問題ないと思うけれども、) だから、使用する吉里吉里ではControlを禁止しておいたほうがいい。

なお、.xp3ファイルそのものはチェックしていないので、リリース後に 同じ暗号化方法を使ってpatch.xp3を作成することは可能。そのくらいはちゃんと考えたよ!

■利用条件

まず、無保証であることを理解して使うこと。我輩はこのプラグインを利用して 起こったいかなる問題にも責任を負わない。

このバイナリのまま利用するのであれば、特に条件を設けない。有償ゲームにだろうが 商用ゲームにだろうが組み込んでよろし。それによるメリットや利益にも 我輩は関知しない。ただし、 割れを防止するため、このプラグインを解析することを固く禁じる。 趣味のために個人でこっそり解析するというなら止める手段はないが、その内容を 公開したり、回避方法を他人に知らせてはならない。

また、このプラグインを使ったからといって、必ずしも割れが防止できるわけでは ない。割られにくくはなると思うが、そのうち割られてしまうだろう。これは 防げない。その覚悟は常に持っておくこと。

■内部的なこと

割れや解析を防ぐため、内部情報は完全にヒミツとする。 内部処理に関する質問にも一切答えない。あしからず。 我輩にしては珍しく、ソースコードも公開しない。

■割れ好きな人へ

あなたの行為が、同人ゲーム界(実際にはPCゲーム業界も)を揺るがしていることを 認識して欲しい。 誰かが身を削って作った効果音が、音楽が、背景が、素材として大量に纏められて 第三者が頒布している現実を見て欲しい。そして、それにより、最初にそれらを 提供した人が、「同人ゲームは割られるから、もう協力しない、あるいは今までより 高価な対価を要求する」という形に態度を硬化させ、同人サークルでのゲーム作成が 行き詰っているという事実を知って欲しい。あるいは、重要なシーンの画像が 流出し、それを見た人が「もういいや」と言ってゲームを入手しなくなるという ことも起こっていることを肝に銘じて欲しい。

このプラグインは、アセンブラに詳しい人がホンキになれば、まぁちょっと 時間はかかるだろうけど解析はできちゃう程度ものだ。とはいえ、上の状況に 是非配慮頂き、解析などはしないで欲しい。 百歩譲って、あなたが正規の手段で入手したゲームについて、 個人で楽しむために自宅だけに完結した環境で割れに手を出す分には、 それを咎めるつもりはない。 でも、それを自分以外の誰かの手に渡すのは、絶対にやめてくれ。

事態はそのくらい切実で緊急で重篤なのだ。心からお願い。

■おわりに

質問には答えないけれど、ご意見は募集中。 もしも「コレじゃぁダメでしょう、もっとXXをYYしなくっちゃ」とか そういうご提案があれば、是非教えて欲しい。改良していく故。 掲示板経由でも メール経由でも構わないが、情報秘匿のため、本件に限っては できればメールがいい。でも、提案に対する見返りはマヂでない。 なんせ我輩自体趣味で動いているので…。

…スバらしいご意見くれた人には「サー」の称号を差し上げるというのでどうか。