COMライブラリを使用しているアプリケーションをリバースエンジニアリングしたいのです。あるトレードの執行ソフトなのですが、APIが公開されておらず、これ自体がコアのCOMを使用したアプリケーションです。やりたい事は、このクライアントアプリとCOMの間の通信を解析して、外部アプリケーションからそのCOMにオーダーの信号を送ったり、情報、イベントを取るという事です。http://www.topshareware.com/DrCOM-Monitor-download-5364.htmこのソフトがリアルタイムにその挙動をトレースしているようなのですが、まだ不十分です。アプリ-COM間の細かい内容を解析したり、実際に意図したメッセージをCOMに送信してみたりできるようになるのでしょうか?いわゆるCOMの乗っ取り、hackなのですが、この辺り詳しい方、ツール、勉強のソース、アドバイスいただけたら幸いです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:kiichigo No.1

回答回数167ベストアンサー獲得回数0

ポイント10pt

DLLをラップしてログをとってみるとか

id:ladybug No.2

回答回数3ベストアンサー獲得回数0

ポイント10pt

自分の日記のリンク元に?があったので気興味を持って開いてみると、まだ回答できるようなので...回答するのは初めてなので不手際があったら申し訳ありません。

URL は C++ ですが、Internet Explorer から起動される Microsoft VM を Java Plugin の Java VM に置き換えるというものです。

目的とする COM コンポーネントがブラウザで閲覧できるということですので、目的とするコンポーネントが持つ COM Interface も判明していることと思います。

このような置き換え手法を利用することで、「アプリケーション⇔自作COMオブジェクト⇔本物のCOMオブジェクト」というメソッド呼び出しの関係を作成することは容易であることはわかりますか?

この時点で「どのメソッドがどの順番で呼び出されるか」というアプリケーション操作と時間軸の対応、そしてそれに伴うすべての引数の実値を確認するのは容易ですよね。

http://www.microsoft.com/japan/msdn/net/bda/cominterop.asp

ご指定のページが見つかりません

次のURLは .NET ⇔ COM に関する文章です。

C# を利用されているということですので、このような仕組みの助けを借りなければ .NET の世界と COM の世界は接続しません。

そして、この文章から単純に C# だけによって前述のような CoClass オブジェクトの置き換えは実現できないということがわかると思います。

もし、開発環境として .NET Framework SDK ではなく Visual Studio.NET や Visual C#.NET といった製品を利用されているならば、C++ コンパイラが付属していると思いますので、C# でできない部分だけ……もしくはすべて……を C++ で記述することになるかと思います。

(当然、他の開発環境……Delphiとか……があれば、それでも問題ありません)

また、C# によって前述のようなメソッド呼び出しの関係を作成すると、COM(CLIENT)⇔CCW⇔.NET⇔RCW⇔COM(SERVICER) というような関係になります。

3番目の URL は、そのような状況に関するやり取りです。

以上、参考になれば。

id:aki73ix No.3

回答回数5224ベストアンサー獲得回数27

ポイント50pt

APIの公開されていないCOMオブジェクトであっても

VCやBCBでActiveXの取り込みを行うことで関数や、定数を取り込むことがで来ます

それを利用してサンプルプログラムを作って見てはいかがですか?

id:kenokabe

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

今C#.netを使っていて、そのCOMはオブジェクトブラウザですべてクラスは閲覧できます。それを利用して0からある程度動くものを自作しようと心見ましたが、ものが複雑でSDKのドキュメントなしでは無理です。私が要望しているのは、静的なCOMのクラスビューとかではなく、リアルタイムで現行のアプリケーションがどういうデータのやり取りをしているかトレースできるものです。

また、内容が解析できたとして、そこに外部のアプリケーションが信号を挿入する事は可能なのか?という事も識者の方にご教授していただければありがたいです。

2004/02/20 18:07:29
id:kuippa No.4

回答回数1030ベストアンサー獲得回数13

ポイント50pt

http://www.st.rim.or.jp/~k-kazuma/SI/SI521.html

私の得意技:逆アセンブルしながら処理内容を解析

リバースエンジニアリングは通常禁止されています。ま、それはおいて置いて。隠しAPIとのやり取りを探るというような事でよろしいでしょうか?

例えばMS系の開発ツールで言うと、

Dependency Walkerなどで、どのCOMを参照しているかを確認し、spy++などのツールでプロセスやクラスを確認することによりある程度の内容はわかったりしますが…。

逆アセンブルのプロはURLみたいな手順を踏むみたいです。

id:kenokabe

ありがとうございます。非常に参考になります。

隠しAPIというかはよくわかりませんが、とりあえず、複数のDLLファイルがEXEと同じフォルダにあって、VSのオブジェクトブラウザでクラスの一覧は参照できます。ある動作、たとえばあるオーダーを執行したときに、どういうデータがどのCOMへどのような信号を送っているのか解析して、外部のアプリケーションからその動作をエミュレートし、その挙動は外部アプリからコントロールできるようにする、といった事が目的なのですが、このエミュレートという部分が可能なのか?という疑念もあります。引き続き詳しい方のアドバイスをお待ちしております。

2004/02/20 18:19:53
id:kuippa No.5

回答回数1030ベストアンサー獲得回数13

ポイント50pt

ん〜。前のレスを見て…。

ようするにイベントをハンドリングしたいだけかな?とか思うのですが…。

C#さわったことないので、詳しく検索できませんでした。おそらくこの手の情報であれば、リーバスエンジニアリングなどのような言葉で探すのではなく、ハンドリングとかキャプチャリングで、C#コミュニティで聴いてみた方がサンプル等あって判りやすいかと思います。

てきとうに…。C#ハンドリングでひっかかったサイトをご紹介。

例えばイベントをハンドリングして、COMに送る前に情報を受け取って、加工してから、Sendmaseageで、おくっちゃうなんてやり方もできると思いますよ。

…関数仕様がわからないとキツイか…。

id:kenokabe

図にしてみると

既存アプリケーション−−−−−COM

     自作アプリ−−−−−」

のようにCOMを共有して処理をわりこませたいということです。NETでターゲットのCOMを参照すると、自分のディレクトリにコピーを置いているのでイベントも読めないようです。まずはこの共有COMとかいうところから調べていかないとだめかなとか思っています。

2004/02/21 01:28:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません