OllyDBGを用いたNoCD/NoDVD化

OllyDBGを用いたNoCD/NoDVD化

 
(以下の内容はLINEのタイムラインに投稿して、(薄く)反響が有った内容を再編集し投稿した。)
 

初めに

デバッガを使ったPC(Windows)ゲームのNoDVD化の記録を投稿してみよう。
デバッガとは、実行中のアプリケーション・ソフトウェアのプロセスの中身を見たり書き換えたり出来るソフト/ハードウェアの事で、本来は文字通りバグ取り用途なのだろうが、今回は改造に使う。
尚、NoCD/NoDVD化は「購入しインストール後に売却・譲渡してしまってもゲームは出来る」状態になるので、判例等は調べてはいないが、恐らく違法性が高いだろうし、倫理的にヨロシク無い。
ソフトハウスにまでカネが回らないのを承知で中古やオークション取引でソフトを購入してる時点で倫理もヘッタクレも無いだろうと、自分に突っ込んでおく。
 

思いつき

ふと、ゲームやるか、と思いたった。
PCでやるゲームは、イースシリーズとバイオハザード4、サイベリア(シベリア)の1と2と決まってる。

まずは久々にオリジンとフェルガナをプレイ、堪能した。
次に、昔からそれ程やり込んで無かったイース6。
この際だから難易度Nightmareをクリアしてみようと思ったが、なんと所持しているバージョンには難易度設定が無い!
一回クリアすればニューゲームの所に難易度選択が出るかと思ったけど、クリアしたのに出ない!

調べてみると、PC版イース6には「初回特典版」「通常版」「普及版」の三種類が有るらしく、所持しているのは「初回特典版」。
「初回特典版」には高難易度設定やミニゲームのタイムアタックも無い。
なので、ヤフオクで「通常版」を購入。980円也。
届いて驚いたが、未開封の新品だった。
 
 

NoCD/NoDVDとは

大体のPCのゲームは、セットアップ時に全てのデータをパソコン側にインストールしても、ゲーム起動時には当該のCD/DVDがドライブに入ってるかどうかを確認する。
本来は、本物のCD/DVD-ROMを実際の光学ドライブに入れておく。
そうすると、例えばExplorer操作時にうっかりドライブを選択した時なんかに、スピンアップで数秒待たされる。アレは相当にイラつく。
非常に煩わしい。
 
対策としては、CD/DVDのイメージ化。
今はストレージのサイズもデカいが、つい最近まではイメージ化して常にドライブに置いておくのは金銭的に厳しかった。いや、今も割りと。

なので、ゲームを改造してCD/DVDのチェックを無効にしておくと、実際のROMを光学ドライブに入れていなくても良いし、仮想ドライブにROMイメージを入れておかなくても大丈夫。

改造と言っても、誰かが作ったパッチを当てたり某掲示板の投稿情報を元にバイナリエディタを使って直接書き換えたりで、作業は自分でやるけど解析するわけでもないので、大して難しくは無い。
コレを一般にNoCD化・NoDVD化と言う。
先述の様に、既に必要ってワケでも無いのに、NoDVDになって無いと我慢出来ないのは性というモンだ。


購入直後

で、イース6。
難易度Nightmareは、PSP版ではやったコトがあるが、PC版でやりたい。
PSP版はエンディングがアレなもんで。

買った。

届いた。

インストールした。

じゃ始めろよと思うだろうが、NoDVDじゃ無い。
正規版をそのままプレイするなんて とんでもない!!
 I ♡ NoDVD!!
で、某掲示板の過去ログをはじめ、検索サイトでひたすら探る。
 
無い。
全く無い。
「特典版」の情報は有るが、「通常版」は無い。
あちこちに脱線しつつ探していて、ふと気づく。
自分で作った方が早いのでは?
 
色々検索してる際に分かった事は、イースシリーズの場合はフェルガナ以降は光学ドライブ内の特定のファイルの有無等もチェックしてるらしいが、6辺りまでは光学ドライブのボリュームラベルのチェックだけだったらしい。
ディスクのラベル見るだけ。
コレならきっと俺でも出来る?
と言う事でまずはデバッガをダウンロードする。
使うのはOllyDBGだ。
15年くらい前に使った事が有るような気がするが、用途が違うし、まぁ要するに初心者だ。
ネットで解説やらを調べつつ実際に始めてみる。


改造スタート


イース6を起動させると「GameDiskを入れてください」とのメッセージが。
discじゃなくdiskなトコが、古くからやってるソフトハウスな感じで好き。

コイツを消して先に進むのが目的だ。
 
 

 OllyDGB起動

まずはOllyを起動しAttachする。
 

関数を探す

 
GetDriveTypeやらその辺の関数をさがしたいので、
使ってる関数一覧みたいなのを出す。
 
 
 
GetLogicalDrives、GetDriveTypeA、GetVolumeInformationAが集まってる箇所を見つけた。
ココ周辺を弄れば良いだろう。
 

ジャンプ先を探す

 
 
特典版のNoDVD化を見てみると、GetDriveTypeA~CMP EAX,5からの、JNEのトコを書き換えてる。
 
ドライブの種類を調べて、その結果が5(CD/DVDドライブ)では無かった場合に指定のアドレスにジャンプするという処理だが、特典版の書き換え方は、「~では無かったらジャンプ」では無く「ジャンプ」だ。
要するに有無を言わさず指定のアドレスにジャンプさせるというコトだ。
すぐ下でGetDriveInformationAの関数を呼んでドライブのラベルをチェックする処理があるが、それを飛び越えて次のステップに進んでるワケだ。

特典版と同じ値に書き換えてもダメだった。そりゃそうか。
なのでアセンブラを熟読してみる。


試行錯誤

 
 GetDriveInformationAの次にTEST~JEがある。
冷静に考えればハズレだけど、とりあえず試す。
 
 
 
上のCMP EAX,5の次に、ココと同じアドレスへジャンプさせる命令を記述。
 
ダメでした。
 
 
 
更に下に読み進め、再びジャンプ命令発見。
 
 
 
同様にGetDriveTypeA~CMP EAX,5の次に書いてみる。


大成功!

 
 画像を見ると分かるが、光学ディスクドライブ自体が無い状態だ。
普段は仮想ドライブを入れてあるけど、ソレすら無い状態で起動出来れば間違い無いと思ってテスト中はナシにしていた。
 
 
 
次に、この変更を適用した実行ファイル(exeファイル)を作っておく。
そうしないと「毎回OllyDBGで特定のアドレスを書き換える」という本末転倒な手間が掛かる。
 

終わりに

コレで完成したが、掛かった時間は1時間半
OllyDBGをダウンロード、基本的な使い方を調べながら改造、完成までの時間だ。
x86アセンブラなんて「0x90はNOP」しか知らなかったヤツが、である。
バイナリ書き換えのアドレス(と値)を調べた時間は、恐らく10時間を越えてる・・・
尤も、「元々のチェック処理が少ない」「同タイトル別バージョンを参考に出来た」等々の好条件も有ったワケだけど。
この直後に同様の手法でサイベリア(シベリア)2もアッサリNoCD化出来たので、ちょいと前のPCゲームのNoCD/NoDVD化なら、簡単に出来るようだ。







御質問・御意見・御感想は@m_o_p_u までお気軽にどうぞ







 << 前の記事 次の記事>> 
イメージ  TWRP その後・・・ チートの話  イメージ




コメント

このブログの人気の投稿

Ys IVのデバッグモードと未使用ボス

ランドストーカー ~皇帝の財宝~

An intruder has penetrated our force field.

イース4のデバッグモードを実機で

ランドストーカー on JavaScript作成記(4)

ランドストーカー ウォーキングシミュレーター on JavaScript 作成リポート

ランドストーカー on JavaScript作成記(3)

ランドストーカー on JavaScript作成記(2)

チートの話

TWRPにてバックアップ成功