2013年2月12日火曜日

自分用開発メモ(1)

一番手を出しやすい、クライアントのバイナリー調査。
OllyDbgで調べていきます。

やはり、UOSEクライアントとは、構造が変わってますね。
ソース修正はそこそこに、コンパイラの変更でもしたんでしょうか?
変わってないところは全然変わってないし、変わったところは大きく様変わりしてます。

変わってないといえば、クライアントにハードコーディングされたメッセージとかかな。
いまだに、ディザーム時の"You must wait to perform another action."とか直接テキストを書きこむようになってますね。

とりあえず、今すぐに実装しなくてもいいやって思う(検証テストが必要だし)なのは、スタミナチェック関係、スムーズウォーク関係。これらは別にあってもなくてもいいか。

今回の調査で、へぇ、こうだったのか、と新たな発見もいろいろありました。前はちょっと強引に実装していましたので^^;;;内部仕様もしらずに挙動からリバースエンジニアリングだけでCコードを予想して組み立てていくわけで、そこが作業してておもしろいところではあります。

ログイン関係、位置座標と向いている方向、ターゲット/ダブルクリック/ピックアップのID情報、カーソル情報、ガンプ情報
あたりを調べました。位置座標やタゲIDを調べるのに、既知のアイテムやペットを使って調べたのですが、ペットとかIDが更新されちゃったのですね。ペットスロットの修正が過去パブで入ったのでしょうか?(あれ、いないΣ(゚д゚lll)、誰かに譲ったんだっけ?ってペットもいたし)。アイテムIDも、休止前のゴタゴタがあったので、結局一から確かめながら調査を進めました。

前もそうだったのですが、ガンプ関係(PD等)のアドレスを調べるのは骨が折れます。タゲのアドレスなんかは、staticな変数なので、起動のたびにアドレスの移動はなく、一度調べればオシマイなのですが、ガンプ関係は動的にメモリ確保されるので、ガンプの表示/非表示からアドレス変化を探し出し、その変化したアドレスを参照するポインタのアドレスを探し出し、そのポインタを操作するコードを探し出し、と面倒な作業になります。

ログアウトをさせるための実装として前のuoclistでは、
PDを最前面に押し出し、PDが最前面になったらPDの座標を調べ、LOGOUTボタンの座標位置をクリックさせ、LOGOUTガンプを表示されるまでまって、LOGOUTガンプが表示されたら座標を調べて、OKボタンの座標位置をクリックさせる、という面倒な手順を踏んでいました。

今日の調査結果のメモ
LOGOUTガンプが表示されているかどうかのフラグアドレス=955d44、4バイト
最前面ガンプのポインターのポインターのアドレス=955d44+0x28、4バイト(#1)
最前面ガンプのポインターのアドレス=#1に格納されたアドレス+0x58、4バイト(#2)
最前面ガンプのID(?)=#2に格納されたアドレス+0x00、12バイト???
最前面ガンプのX座標=#2に格納されたアドレス+0x34、4バイト
最前面ガンプのY座標=#2に格納されたアドレス+0x38、4バイト
これで正しいのかは、もうちょっと様子見が必要。。。

0 件のコメント:

コメントを投稿