2020/01/01ツイート2005/10/05AreBackDoorのしくみなんか先週あたりからROでステルス移動できるチートツールとかが出回ってGvが大変なことになってたんだとか。それのまとめサイトみたいなのがあるのでどんなのかっていうのはそこをとりあえず見てください。ところで、前のPT侵入バグは正規クライアント上からできる操作によるバグだったわけですが、今回のは普通にチートツールを組んでやらないとできない操作でして、かつ手法はもう確立されてるので根本的な対策がないとどーせ2匹目のどじょうみたいなツールがでてきて意味がないので、まだ穴が塞がってないみたいですけどどうなってるか書いちゃいましょう。...といっても、自分でこれ動かすわけにも行かないので(そこで検証用にAre本体を探してワナいりAreとかをつかむのもバカらしいですよね)、掲示板で得た情報を元にいろいろ推測してるだけですけど、まぁそれなりに信憑性とかはありそう。最初「ステルス移動できるチートツールがある」と聞いて最初の感想が、「え、そんなGM用のInvisibleになれる穴が今更見つかったの?」って感じでして、そりゃ一体どんなパケットを送ったらそんなことができるんだろうと思っていたんですが(でもよく考えたらROのクライアントはGMのAIDのIDナンバリングエリアをクライアント側で保持してるので、そこらへんいじればクライアント側から専用コマンドを送ったりはできそうですけど、さすがにサーバでチェックされてはねられるとは思います)、今回のチートはそんなんじゃ無かったです。GMの使うInvisible状態とは全く別の次元の話。具体的にどうなってるかというと、あくまでもGM用のInvisibleではなく「ログインしてるけどマップにはまだいない状態」を作り出すことによって擬似的にInvisibleになってるみたいですね。(とともに、サーバ側でもそのマップにいるキャラのリストに追加されると思われる)って感じになってまして、3番目のこっちから送るマップロードが終わったよーっていうパケットをチートツールを使って止めている(殺している)というのが今回の穴になっています。マップロード完了してないのでサーバからは画面内の情報をクライアントへ送りません。これが今回の「自分からも周りの状況が見えない」ということにつながってます。なんで周りから見えないのかというと、マップロード完了パケットを送らないのでサーバ側でマップ内に存在するキャラとして登録されてないからです(マップロード完了パケットをサーバが受信すると同時に無敵時間の3/10秒ルールのカウントもはじまります)。マップ内にいるキャラのリストに追加されてないので、他のキャラが動いたときの通知も飛んできません。自分が動いたときの通知も他のキャラに届きません。地面魔法とかルアフ/サイトのあたり判定とかも、リスト内のキャラを全部チェックしてそのキャラが魔法範囲にいるかどうかで決まるので、元々キャラリスト内にいなければ魔法などのスキルとかもあたりません。いって、自分が移動する場合はどうもサーバ側でそのマップにいるキャラのリスト内にそのキャラがいるかをチェックせずにデータベースの自分の座標をそのまま移動させてしまうので(ここも穴の一つだけど、まぁ通常利用ならチェックせずにそのマップにいると仮定してよい)、自分の移動はマップロード完了に関係なくできてしまうようです。実際の所本当はこういうことをすると副作用として自分が移動したことも通知されないので、ただ単にマップロード完了パケットを殺すだけでは自分が移動しても自分のクライアントにもその通知情報が来ないんですね。今までは実用にならなかったようなのですが、クライアントからサーバに送る自分の移動パケットを元に、その移動パケット(0x0085)に対する移動応答(0x0087)をクライアント側で計算してクライアント内で移動を処理することにより、普通にステルス状態を維持したまま移動をトレースしているみたいです。サーバ側で強烈なラグとかが起こるとクライアント側での計算とサーバ側での実際の移動結果が変わることもあるんですが、少なくともステルス状態なのですべての攻撃はあたらない、つまりヒットストップは起こらないので、かなーりまったりと進んでいけば必ずクリック先への移動は成功します。ここがミソみたいですね。WPにのって次のマップに移動するにはステルス状態を解除してサーバ側のキャラリストに入ってWPを踏んだことにならないと次のマップには移動できません。一瞬姿を現す必要はあるらしいですが、また次のマップに進んじゃったらステルス状態なので、ルアフサイトなども意味がないから防衛側はガクガクしながらそのステルスの存在のみを認めなければならない、とそんな感じみたいです。なれば、実際にステルスを使ってエンペ割ったりせずとも、わざとステルスとわかるように捨てキャラでステルス移動したりして防衛側を陽動して、相手が動揺して手薄になったところを攻め落とす、みたいなテクニックもできるわけですか。ははは、これはずいぶんと知能戦ですね。現状で移動パケットと移動応答パケットは例によってビット演算で迷彩されてるので、今回のAreBackDoorはそこを決め打ちで実装してるらしく次のRagexeパッチが出れば現バージョンは使えなくなりますが(一応それを見越して時限タイマーで今週火曜から使えなくしてるらしいけどしらないや)、根本的な対策はこの「画面切り替えパケットをサーバから送ってからマップロード完了パケットを○秒以内に送ってこないときはそのまま接続切断」みたいなことをしないとダメなんで、クライアントパッチ待ちというよりはサーバメンテナンス待ちって感じですね。acidlemonです。鎌倉市在住の普通のITエンジニアです。30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。