というわけで、解析云々じゃないまじめなネトゲのお話。

昔ROをプレイしていた(といっても、もう5年以上前の事になるけれど……)関係で、
らいぶろのROプレイヤーが他のネットゲームを語るスレはちょくちょくチェックしているのだけれど、どうも最近はどんなゲームが出ても運営がよろしくなかったり、コンテンツが足りない状態での見切り発車だったりと状況はあまりよろしくない様子。

なら、ROはどうなのよ?って事で、別スレをいくつか見てみる事に。
ん~なんというか、嫌な感じの病気が進行している気がします。

それでも、BOTと糞管理は別として一時期は素直に面白いと思えたゲームだっただけにこの変貌っぷりはちょっとなぁ……
あの時の楽しさとかそういうものを取り戻すのはもう無理なのかなぁ……
もう、ネトゲって年でもないしな。

技術的には面白い技術の塊だと思うんだけれどね。
Unix系の鯖構築+大量のトラフィック処理+タイミング条件によるデータ整合性、Windowsクライアントのゲーム処理部分、チート防止のためのクライアント暗号化、
複数の鯖配置のネットワーク設計と負荷分散。

まぁ一介の技術者一人にゃ手に余るな。
こんなの作ろうと思ったらロイヤルニートになるしかねぇ。

2010/01/14:コメントなしろじ

書き溜めたエントリなんだけど、これから更新する機会が減りそうなので進んだところまで一気にBlogに上げてしまうことにした。
願わくば、これをみて解析の道に入り込む人が増えることを。

すっかり詰んでいた解析なのだけれど、2chスレの方に動きが。

曰く、EagleNT.sysとかいうヤツを潰せばいいらしい。
また、Themidaをアンパックせずに解析する方法も教えてもらった。

これで、一歩前進か?と思いつつまずは EagleNT.sys を探す。
スレのSSDTなるキーワードを検索するうちに、フック検出ツールなるものをインストール。
ゲームを起動中に実行してみると、 EagleNT.sys がなんかのフックをかけているのを発見。
が、そんなファイルはインストールされていない。
ゲームを終えると、フックも外された。
どうやら、ゲーム起動時に読み込まれて、実体はすぐ削除されるような感じ。

また暗黒時代に突入。2~3日ぼーっと過ごす。
その後、なんとなく検索をかけた下のページを見てEagleNT.sysの所在がわかった。
https://forum.gamedeception.net/showthread.php?t=13540&page=5

ゲーム起動の延長で、EHSvc.dll が呼び出され、 EHSvc.dll は自分のリソース内から、
EagleNT.sysを作成、EagleNT.sysはサービスとしてゲームの監視を行う。
というような流れのようだ。

ResourceHacker で中を見ると BINRES に訳の判らんバイナリが入っている。
そのままだと、Themida圧縮がかかってるので、 LoadLibraryしてメモリに展開した後のリソース領域をダンプすればよさそうだ。
以前の展開に失敗した起動できない、EHSvc.dll を引っ張り出す。
ResourceHacker で リソースを保存し、EagleNT.sysにリネーム。
とりあえず、バージョン情報のプロパティを見る。
「Ahnlab HackShield KernelMode Driver 」
おぉ、それっぽい。

というわけで、今回はここまで。

2009/10/01:コメントなしろじ

書き溜めたエントリなんだけど、これから更新する機会が減りそうなので進んだところまで一気にBlogに上げてしまうことにした。
願わくば、これをみて解析の道に入り込む人が増えることを。

とりあえず、現状の整理
ゲームクライアントはアンパックできたと思われる。
EHSvc.dll はあの後起動させてみようとしてもエラーが出る。
どうやら、Themidaのアンパックは想像以上に難しいらしい。
アンパックしたゲームクライアントを実行するとHShieldのエラー。
偽者の EHSvc.dll を元のファイルと入れ替えてゲームを起動すると元のファイルに戻されてしまう。
どうもゲームクライアント側でHackShieldのアップデータを呼び出してから、ゲームの起動を行っているようだ。

というわけで、まずは本丸の前にアンパックしたファイルを走らせることができるようにHackShieldのアップデータを潰さねばならない。

まずは、適当なexeと HSUpdate.exe を取り替えてみる。
が、ゲームクライアントが沈黙。
ollydbgで見てみると、WaitForSingleObjectで何かを待ち受けて無限ループしている模様。
そしてその前に、CreateEvent を実行している箇所を見つける。
HSUpdate.exe もollydbgで開いてみるとゲームクライアントと同じ名前のイベントをシグナル状態にしている箇所を発見。

そのほかいろいろやるうちに、どうも ゲームクライアントはイベントを作ってHSUpdate.exe の実行を待ち、 HSUpdate.exe はさらにその下で autoup.exe を実行し、そのプロセスIDをレジストリに記入。
ゲームクライアントはプロセスIDをレジストリから読んで、autoup.exe の実行終了まで待つ。
また、ゲームクライアントは HSUpdate.exe 側で新しくイベントを作って、そのイベントが作成されたかを待ち受ける。
というような動作をしているらしいことがわかった。

ここまで判れば後は試してみるばかり。
・メモ帳でも立ち上げてそのプロセスIDをレジストリに書き込み。
・イベントを擬似
・適当なウェイト
・メモ帳終了
上記を行うプログラムを即興で組んで、HSUpdate.exe と差し替え。

とりあえず、これでアップデータを回避することができた。
さて、これからどうしよう……

2009/10/01:コメントなしろじ

書き溜めたエントリなんだけど、これから更新する機会が減りそうなので進んだところまで一気にBlogに上げてしまうことにした。
願わくば、これをみて解析の道に入り込む人が増えることを。

もう4回目のエントリになるのか……

さて、Themidaのアンパックがどうにかできないものかと検索に検索を重ねること数日。
いくつかのWebサイトからヒントらしき物を見つける。
もちろん英語メインなので、適宜翻訳してだが。

加えて、割と最近(2009年入ってから)のThemidaのアンパッカーを見つける。
が、なにやらニーモニックの書いてあるtxtでどうやって使うのかわからない。

なおも情報収集を続ける。
と、Themidaのアンパック手順を解説しているページを発見。
大まかなニュアンスを汲み取りつつ翻訳にかける……

なるほど、あのわからなかったtxtは、ollydbgのプラグイン用のものだったのね。
そのページで解説していたPhantOmプラグインで、Themidaからデバッガの存在を隠すことにも成功。

準備が整ったところで、EHSvc.dll のアンパックを実行。
解説のページがexeを対象にしていてDLLとは若干手順が違ったものの、すんなりとアンパックに成功(したと思う)

同じ手順で、InphaseNXD.EXE もアンパックしなおしてみる。
あ、今度はゲームっぽいexeになった。

ここまでくれば、後は少しずつ条件をつぶしてやればいいはず。
久しぶりに希望が見えてきた。
が、チェックの方式を今ひとつ想像できないので、どこにブレークポイントしかければいいのかわからずに悩む。

ちなみに、2chのチートスレにアンパックのURLを張ってみた(2009/07/2)が反応がないのでしょんぼり。
自分と同じ位のレベルの人と情報交換したいんだけどなぁ……

というところで今回はここまで。

2009/10/01:コメントなしろじ

書き溜めたエントリなんだけど、これから更新する機会が減りそうなので進んだところまで一気にBlogに上げてしまうことにした。
願わくば、これをみて解析の道に入り込む人が増えることを。

このシリーズも随分たくさん書いたなぁ……
しかし、解析の方は一向に進んでいなかったりする。

というわけで番外編からの続き。
UPXらしい圧縮exeをollydbgで開く、んでPEditorの改造で覚えたSFX機能というのを使ってみる。
トレース実行を仕掛けて放置する事数時間……

展開のOEPが見つかったので、ブレークポイントを仕掛けて、F9、F8でollydumpでメモリイメージをダンプ。
と、ここまでは非常に順調だった。
ダンプしたファイルを再度ollydbgで開く。が、ゲームのexeらしい感じがしない。
再度PEiDに突っ込むと、Microsoft Visual C++ と出た。
圧縮されていないハズだが、ゲームで使うようなAPIが出てこないのが気になる。
もしかして、アンパックに失敗したか?

ステップ実行させると、HShield関連のdllを呼び出した後に、デバッガ検出のメッセージを出して終了する。
呼び出しているEHSvc.dllをollydbgで読み込ませると、ollydbgが落ちる。
どうも、このdllも普通に読めないように細工がしてあるらしい。

ちなみにollydbgを落として、ダンプした InphaseNXD.EXE を本物と同じパラメータで起動しても一瞬メッセージボックスが出てゲームが起動しない。
本物チェックでも入ってるんだろう。

ollydbgのプラグインでHide Debuggerなるものがあるのだけれど、どうも向こうの方が一枚上手らしく、デバッガ検出されてしまう。
この時出てくるメッセージボックスのタイトルが「Themida」聞いた事の無い単語だったので早速Googleさまに聞いてみる。

パッカーですか、中華ですか、トロイですか。あと地デジ。
なんか嫌いなキーワードばかりが並んで嫌になった……

アンパッカーを2~3探して試してみるも、いずれも失敗。
さてどうしたものか……

2009/10/01:コメントなしろじ