横取り丸使用を知る方法はありませんか?No.00451
Taone さん 04/04/20 21:25
 
はじめまして。お聞きしたいことがあります。それは、
「横取り丸を使っているユーザーを識別することが出来るか」です。

私は、商用サービスとして、あるゲームの運営を行っています。
このゲームでは、専用のHTTPクライアントであるプラグインを使って、あるURLから
ゲーム用の設定ファイルや定義ファイルをダウンロードします。
サーバ側では、専用のHTTPクライアントが送る環境変数からそれを
区別し、それ以外には送らないようにしています。
設定ファイルや定義ファイルは、専用のHTTPクライアントが受けた場合はメモリ上に
しか展開されないので、直接それを見られることはありませんが、横取り丸を使って
いるユーザーは、それを見ることが出来てしまいます。また、横取り丸自体がアクセ
スしてくるわけではないので、サーバ側ではそれを認知できません。コレにより不正
が発生し、ゲームが成立しなくなってしまいました。横取り丸は非常に手軽なため、
幼年のユーザーにまであっという間に使い方が広まってしまったのです。

そこで、横取り丸を使用しているユーザーには、「一時横取り丸をオフにしてくださ
い」というようなメッセージを出し、設定ファイルを送信したくないのですが、サー
バ側で横取り丸の使用を知ることの出来る環境変数などはありませんでしょうか?

私は、この横取り丸の有用性を大いに認めていますし、プラグイン式のテクノロジー
も面白いと思っています。アプリケーションとして評価しています。またHTTPで通信
する以上、データを完全に秘匿することが出来ないこともわかっています。

通常のプロキシサーバのように、何らかの情報を送ってくれているのであれば、その
情報についてぜひ教えてください。

よろしくお願いいたします。

[ ]
RE:00451 横取り丸使用を知る方法はありまNo.00452
秀まるお2 さん 04/04/20 21:41
 
 横取り丸が常駐してるかどうかは、例えばC言語でプログラミングしてるので
あれば、FindWindow関数を使えば検出できます。VisualC++に付属のSpy++で探す
と、"YokodoriMaru"というウィンドウが見つかります。

 あるいは、そもそも横取り丸を経由させたくなければ、意図的にプロキシサー
バーを無視してサーバーに接続すればいいです。そちらのソフトがどういう手段
でHTTP接続してるのか分かりませんが、例えばwininet.dllを使ってるのであれ
ば、InternetOpen関数を呼び出す時のパラメータでプロキシサーバーを通さない
ように指定できると思います。

 Internet Explorer上でのプロキシサーバーの設定がどうなっているかは、レ
ジストリを見れば分かります。横取り丸を通す場合には、プロキーサーバーが必
ずlocalhostのどこかのポートを経由することになってるはずです。

 具体的なレジストリの場所は、

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
       \Internet Settings

 の、ProxyServer、ProxyEnable等の値となります。

----------
 根本的な解決のためには、HTTPで通信してる内容を多少なりとも暗号化した方
がいいんじゃないかと思います。暗号化といっても、例えば乱数を使ったビット
の入れ替え/反転とか、あるいは乱数と正規データを独自のアルゴリズムで混ぜ
るとか、それなりに考えれば、以外と素人さんには解読は困難だと思います。

[ ]
RE:00452 横取り丸使用を知る方法はありまNo.00453
Taone さん 04/04/21 19:34
 
なるほど、クライアントアプリケーション側で情報を取得するほか
無いようですね。サーバアプリケーション側でどうにか出来ないかなあと思ったもの
で。(当方事情として、サーバ側の方が開発コストが掛からないってのがあるんです
ね(笑))

実際問題としては、このような問題は(横取り丸以外の)ほかのアプリケーションで
も充分に起こりえるので、暗号化する方向で動くしかないだろうと思っています。

とはいえ実装には時間もお金も掛かってしまいますので、もし横取り丸が何らかの環
境変数などを出力するようになったら教えていただけたら嬉しいです。

ご回答ありがとうございました。

[ ]
RE:00453 横取り丸使用を知る方法はありまNo.00454
秀まるお2 さん 04/04/21 21:27
 
 HTTPサーバー側から横取り丸の存在を知る手段という意味でしたか。よく理解
できてませんでした。

 Proxy-Connection:というヘッダがあるにはありますが、それでは分からない
だろうし、適当な判別手段はちょっと思いつかないです。

 横取り丸はHTTPとFTPしか監視できないので、例えばHTTPSプロトコルに回送さ
せてしまうという手はあろうかと思います。サーバー側にhttp:で要求が来たら、
"302 Moved Temporary"だったか何かのコードを使ってhttps:の方で再要求させ
るようには出来たと思います。

[ ]
RE:00453 横取り丸使用を知る方法はありまNo.00455
秀まるお2 さん 04/04/21 21:30
 
 あともう1つありました。最近のhttpサーバー/httpクライアントだと、圧縮
した形式をサポートしていたと思います。具体的なことは今すぐ思い出せません
が、たしか、HTTP1.1か1.2の拡張仕様で、HTTPパケットの圧縮オプションがあり
ました。

 横取り丸は、圧縮したパケットを解凍した形で表示する機能は無いです。なの
で、圧縮して送れば中身は簡単には分からないと思います。

 圧縮については、例えばIISなら5.0以降から対応してたと思います。

[ ]
RE:00455 横取り丸使用を知る方法はありまNo.00456
秀まるお2 さん 04/04/21 21:39
 
 今試してみて分かりました。

 圧縮というのは、

Content-Encoding: gzip

 のような形で圧縮する物のようです。HTTPサーバーが対応してればそういう圧
縮が有効に出来ると思います。ただし、圧縮はHTTPのバージョン1.1から有効で
して、1.0では使えません。

 Internet Explorerは、もちろんHTTP1.1をサポートしてますが、標準の設定だ
と、「プロキシ接続でHTTP1.1を使用する」というオプションがOFFになっていて、
結果としてHTTP1.1未対応であるかのような振る舞いをしてしまいます。

 ということで、しいてサーバー側でやるとしたら、

■手段1:

 もし可能であれば、HTTP1.1で要求されても無理矢理HTTP1.1での圧縮した形式
で返してしまう。

 例えばIISを使っているなら、サーバーに入る前のリクエスト情報を、例えば

   GET http:..... HTTP/1.0
   Accept: *.*

 のようになっている物を、無理矢理

   GET http:..... HTTP/1.1
   Accept: *.*
   Accept-Encoding: gzip

 のように書き換えてしまえば、サーバーはだまされます。

■手段2:

 手段1が不可ならば、HTTP1.0で要求された場合に、HTTP1.1を有効な設定に変
更するよう、ユーザー側にメッセージ表示する(そういうページに飛ばす)。

 というのがいいんじゃないかと思いました。

[ ]
RE:00456 横取り丸使用を知る方法はありまNo.00457
秀まるお2 さん 04/04/21 22:31
 
>  もし可能であれば、HTTP1.1で要求されても無理矢理HTTP1.1での圧縮した形式
> で返してしまう。

 「HTTP1.0で要求されても」の間違いです。

[ ]