開発資料/ひとりで出来るもん のバックアップ(No.26)

Top/開発資料/ひとりで出来るもん

自分で解決したい人へ Edit

OBSEや日本語パッチ、公式パッチやらがVer.UPするたびにOBSEにパッチを当てなければなりませんが、誰かがパッチをうpするのを待っていたんじゃ、いつになるかわかりません。やっぱり自分で解決できたほうがいいんじゃねぇの?!ってとこで。

作者の意図から外れた行為なので、あんまり大きな声じゃ言えないんだけどね…。その辺を理解した上で実行してください。

はじめに Edit

OBSEはプログラムを呼び出す前にOblivion.exeConstructionSet.exeのCRCを調べます。CRCというのは簡単に言えば検算のようなもので、CRCが同じなら中身も同じと言ってよいものです。OBSEはCRCがわかっている(動作確認の取れている)Oblivionでなければ実行されないようになっているのです。全く余計なことを…
CRCは16進数であらわされ、OBSEでは32bitCRC(8桁)を使っています。

自分のCRCを調べる Edit

まずはOBSE_Loaderを実行してみてください。すると何かエラーが出るはずです。
文の最後にCRC=????????(8桁の英数字)がかかかれているはず。その英数字があなたのOblivion.exeのCRCです。このCRCはOBSE_Loaderと同じフォルダに作られるobse_loader.logにも書いてありますので、念のためこれをメモるかコピーしときましょう。

使用可能なCRCを調べる Edit

OBSEにはソースがついています。これはexeに変換する前のプログラム群です。OBSEのZip内のsrc/obse/loader/以下にあるmain.cppをテキストエディタで開いてみましょ。
※v0017b以降は、src/obse/loader_common/EXEChecksum.cpp に記述されています。

CRCに関する処理がされてないかな〜と「CRC」を検索してみます。いくつか見ていくと
case 0x29F82D28: // 1.1.0.511 russian unofficial w/ no-CD "<B@ZiK was here!>"
case 0x7F601478: // 1.1.0.511 japanese unofficial v6
といった怪しげな文章が見えてきます。ここがCRCチェック処理部です。//以下は注釈文で、これらがロシアのNo-CD版と日本語パッチver6であることが記されています。

Ver.1.2を当てている人は、その下にある1.2用のCRCを使用してください。なお、OBSEではSI版(1.2.0.201)には対応しておりません。 1.2.0.214を当ててください

さて、これでCRCが29F82D287F601478Oblivion.exeなら動くということがわかりました。
ちなみにConstructionSet(CS)のCRCはその上のほうにあるcase 0x96ED4409: // 1.0.0.303ってやつです。
※CSのバージョンが 1.2.0.404 の場合は 0x2F9AC10C。

OBSE_Loaderを書き換える Edit

さていよいよ改造です。
7F601478のようなデータと比べているのですから、プログラム内にはそのデータが存在するはずです。
まずはバイナリエディタでOBSE_Loader.exeを開き、それを探します。Windowsソフトの内部では7F6014787814607Fのように後ろから2桁ずつの逆並びなので、7814607Fを検索します。すると一箇所だけ該当するはずです。そこをあなたのCRCで上書きすればOKです。
逆ならびにしておくことを忘れずに。

実際の書き換え例と諸注意

  • 置き換えても動かない場合は、置き換えるCRCを変えてみましょう。

  • 7F601478 の部分でだめなら 29F82D28 の部分を書き換えてみる。ウチではなぜか日本語Ver.5のCRC 278B2356 の部分を置換えないと有効になりませんでした。(main.cppのswitch-case文は、コンパイルされると2分木検索ロジックに展開されるため、2分木検索から外れてしまうものを書換えても、有効になりません。自分のCRCとなるべく近い値を選んで置換えたほうが、有効になる可能性が高いです。)

  • 検索対象が「一箇所だけ該当する」と思い込んでると駄目かも。あくまでも「はず」が付くので。複数個あれば全部書き換えるとかする必要がある「かも」。
    実際にv0016betaだと、14a日本語パッチ済み1.1.0.511を検出するためのデータ 0xEDBE0C74 は二箇所あるよ。そして二箇所を自分のCRCで書き換えた時点で動作するようになりました。

  • TES Construction Set 日本語化パッチ(2009年04月11日版)を当てた CS v1.2.0.404 を
    OBSE v0016, v0017b,v0018beta4,v0018 経由で起動する場合は、
    0x2F9AC10C (0CC19A2F)
    を書き換える事で起動できました。

  • TES Construction Set 日本語化パッチ(2009年04月11日版)を当てた CS v1.2.0.404 に、
    Oblivion 日本語化パッチ v0.15c 付属テキストに記述されている Books Import 時のタグ無効化対策を施し
    OBSE v0016 経由で起動する場合は、
    0x96ED4409 (0944ED96)
    を書き換える事で起動できました。

  • TES Construction Set 日本語化パッチ(2009年04月11日版)を当てた CS v1.2.0.404 に、
    Oblivion 日本語化パッチ v0.15c 付属テキストに記述されている Books Import 時のタグ無効化対策を施し
    OBSE v0017, v0017a, v0018beta4, v0018beta6 経由で起動する場合は、
    0xE380C3AF (AFC380E3)
    を書き換える事で起動できました。

どうやって書き換えるんだゴルァ Edit

バイナリエディタは置換え機能を持ったものが使いやすいでしょう。そこで バイナリエディタ 置換 でググると出てくる、Stirlingというエディタを使って説明します。
まずStirlingのメニューのファイル→開くOBSE_Loader.exeを開きます。そして検索・移動→置換をクリックし、検索データの部分に動くOblivionのCRCをいれ、置換データのほうに自分のCRCを入れます。何度も言いますが逆並びってことを忘れずに。データ種別は両方16進、範囲は全体にして一括置換をクリックします。一箇所置き換えた旨のメッセージが出たら成功です。そしてメニューのファイル→保存をして、起動実験をして見ましょう。ちなみに書き換え前のデータは自動的にバックアップされています。
それでもCRCが違うと出るなら、上記の注意の項を参照してください。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS