SimpleROHook : クライアントの構造体定義の修正を少々
地獄絵図です。
やや体調が戻りつつあるので、少しずつSimpleROHookのコードに手を加えていきます。
解析のアプローチ
CRenderObject::RenderShadowの関数の冒頭に以下のような場所がありCRenderObjectクラスの終端に定義されている変数が判明します。
.text:00790D60 ; int __stdcall CRenderObject::RenderShadow(int vtm, float zoom) .text:00790D60 CRenderObject__RenderShadow proc near ; CODE XREF: CGameActor::Render .text:00790D60 push ebp .text:00790D61 mov ebp, esp .text:00790D63 sub esp, 5Ch .text:00790D66 push esi .text:00790D67 mov esi, ecx .text:00790D69 cmp dword ptr [esi+104h], 235h ; dummy01??? .text:00790D73 jz loc_791065 .text:00790D79 cmp byte ptr [esi+9Ch], 0 ; m_shadowOn .text:00790D80 jz loc_791065 .text:00790D86 fld dword ptr [esi+4Ch] ; m_shadowZoom .text:00790D89 fldz .text:00790D8B fld st
object.hに定義した以下の所は碌に解析もせずに void* dummy01等と適当な名前で定義していましたがobject classのような数字を比較して影を出さないような処理をしているっぽいなという事が見て取れます。
class CRenderObject : public CGameObject { public: struct vector3d m_pos; std::basic_string<char> m_bodyPaletteName; // class std::basic_string<char,std::char_traits<char>,std::allocator<char> > m_bodyPaletteName; int m_baseAction; int m_curAction; . . . . unsigned char m_BodyAct; unsigned char m_BodyAniFrame; class CSprRes* m_sprRes; class CActRes* m_actRes; void* dummy01; // added for later HightPrieast.exe? #ifdef JRO_CLIENT_STRUCTURE unsigned long m_gid; #endif
リプレイ中の各々のCGameActorのオブジェクトにJobSet(0x0235)を実行(※)させてみたところ…
※CPlayerのクラスポインタが判明しているため、制御する関数のアドレスと引数が分かれば呼び出すことが出来ます。
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出来ないという人はこの辺りを参考にして下さい。
当サイトでは諸事情により、この事に関する解説は出来ません。
ディスカッション
コメント一覧
まだ、コメントがありません