SimpleROHook : クライアントの構造体定義の修正を少々

all morroc地獄絵図です。

やや体調が戻りつつあるので、少しずつSimpleROHookのコードに手を加えていきます。

解析のアプローチ

CRenderObject::RenderShadowの関数の冒頭に以下のような場所がありCRenderObjectクラスの終端に定義されている変数が判明します。

object.hに定義した以下の所は碌に解析もせずに void* dummy01等と適当な名前で定義していましたがobject classのような数字を比較して影を出さないような処理をしているっぽいなという事が見て取れます。

リプレイ中の各々のCGameActorのオブジェクトにJobSet(0x0235)を実行(※)させてみたところ…

※CPlayerのクラスポインタが判明しているため、制御する関数のアドレスと引数が分かれば呼び出すことが出来ます。

change job to 0x0235

MVPの墓だったことが判明しました。これを除外するためにjob classのコピーをCRenderObjectに設置してハードコーディングしているというのもおかしな話ですが、それぞれのシーンで値を調査してもPCオブジェクト以外の場合にCGameActor::m_jobのコピーが設定されています。

これに伴い、CRenderObject::dummy01としていたものをCRenderObject::m_npcIdと改めました。

基本は以上の様に目視によるデータ差分、詳細が不明ならば機械語コードを読んで行き、動作を読み取っていきます。当サイトで紹介した IDA のようなツールを使ってラベル付けや構造体定義などをしていくと解析が容易になります。

SimpleROHook リポジトリの更新

流石に今の様ないい加減な定義では今後解析する人が辛いだろうと思い、CRenderObject、CAbleToMakeEffect、CGameActorの定義を更新しました。

変更箇所はgithubで確認できます。

https://github.com/sekishi1259/SimpleROHook/commit/cf160e2a1d32e1bc68369bf8d587dcea779632fd

おわりに

跡地の実行ファイル一式も更新してあります。

こまかな解説はまた別の機会にするとして、やる気のある方はデータとにらめっこして見ては如何でしょう?

jROのexeがUnpack出来ないという人はこの辺りを参考にして下さい。

当サイトでは諸事情により、この事に関する解説は出来ません。

 

コメントを残す