2009-06-10 10 views
3

「更新」ボタンが付いたウィンドウを開き、クリックした後に非常に長い更新を実行するMFCアプリケーションがソースコードなしで用意されています。ボタンを偽造するプログラムを変更する

私は、ウィンドウが作成されたとき(DoModalなどの他の場所で)、ボタンが押されたと思うようにメッセージがプログラムに送信されるようにプログラムを修正したいと思います。

私はIda ProとOllyDbgではしばらくこのことを忘れていました。私はおそらくPumpMessageを使ってみましたが、これは成功しませんでした。

アドバイスはありますか?

答えて

3

を使用してマウスクリックをお送りします、あなたは、元のプログラムのバイナリにパッチを当てることができボタンのBM_CLICKハンドラを呼び出します。呼び出しのためのスペースがあれば(引数なしで最低5バイト)、OllyDbgだけで行うことができます(コードを編集して選択し、右クリックから "実行可能ファイルにコピー" - > "選択"を選択してください)メニュー)。それ以外の場合は、PEエディタ(例えばLordPEやPE Tools)で新しいコードセクションを作成し、そこにコードを追加する必要があります(通常、プログラム内の呼び出しをセクションにジャンプする必要があります。元のコールに加えてボタンのクリックハンドラへの呼び出しを実行し、パッチを当てた後に元の位置にジャンプします)。

+0

どのように/どこにこのパッチを入れますか? – samoz

+0

新しいセクションを作成しない場合は、プログラムによって使用されていない小さなコード領域である「コード洞窟」を見つけることができます。通常、これは "死んでいる"コード(プログラムで実際に呼び出されることはないコード、少なくともあなたが使っているコードではない)、または配列のためにコンパイラによって残されたスペースにある可能性があります(通常、この方法で15バイト以上を取得する)。 –

+0

この記事をチェックしてください:http://www.codeproject.com/KB/cpp/codecave.aspx - 新しいセクションの追加については説明しません(これは、コード洞窟とDLLを使用する中間的な理由です)。 DLLをバンドルに追加しても問題ない場合は、単純にインポート・テーブルにDLLを追加し(単純にPEエディタで)、単純なポインタ操作を使用してDLLから関連するコードをパッチすることもできます。 –

1

テストオートメーション技術を使用する方法はいくつかありますが、最も簡単なのは、ボタンのウィンドウハンドルを取得してBM_CLICK messageに送信することです。これは、Windows上でC/C++に関する実践的な知識があることを前提としています。そうでない場合は、.NETやその他の技術を使用する他の手段があります。私はida-proやollydbgに慣れていない。

-1

ちょうど昼食それを意志第二のプログラムを作成し、セカンダリ「マクロ」プログラムを使用してのアイデアを気に入らない場合SendInput(...)

0

このperlモジュールwin32 :: guitestを見ると、これを行うのに役立つでしょう。あなたはperlスクリプトを書いてあなたのプログラムに埋め込むことができます。必要なものをラップして使用するwin32 APIを使用することもできます。

関連する問題