home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

日記/2010/11/13/Win7でcheap2elのサンプルが一部動かない・・・

作成日: 2010-11-13 16:36:41   /   last updated at: 2010-11-13 16:49:57
カテゴリ: C言語 Windows 

OllyDbg, Immunity Debugger ともにソフトブレーク/ハードブレーク/メモリブレークなど基本的な機能は一通りWin7上でも確認が取れた。

CreateRemoteThreadやHook系も以前作ったサンプルプログラムで動作確認が出来た。

以前作成したcheap2elもunittestはすべて動き、サンプルもひとつを残し動作した。

動かないのが dllcopy で、やってることはプロセスAでfoo.dllを擬似ロードし、プロセスB側にVirtualAllocEx()でメモリを確保し、実行可能状態のfoo.dllイメージをWriteProcessMemory()で転写、CreateRemoteThread()でkickするという内容。

なぞなのがOllyDbg上でプロセスBを動かせば問題なく動作するのに、デバッガ無しのコマンドプロンプト上で起動したプロセスBを使うときはプロセスBがクラッシュする。
擬似ロード→転写するfoo.dllの中ではLoadLibrary("user32.dll")してGetProcAddress("MessageBoxA")でMessageBoxのアドレスを取得し、while(1)の無限ループ内で適当なSleep()を入れて延々とMessageBox()を表示するだけ。

デバッガ上だと問題なく動作するのが曲者。たぶん、クラッシュするときのダンプをファイルに落としてWinDbg等で追跡しないと何が起こったのかわからない。・・・が、まだWindowsのクラッシュダンプを解析する技量は持ってない。

この問題、まずはこちらの一敗としておくが・・・むぎ~、絶対リベンジしてやる・・・。

いやね?replace_impaddrサンプルのほうでは、Hookで引っ掛けてLoadLibrary("foo.dll")でロードさせたり、あるいはLoadLibraryを直接CreateRemoteThread()で呼ぶ方式は動いているのよ。
擬似ロードで実行可能にした後転写する方式が動いてない。
となると怪しいのはcheap2elの擬似ロード機能の方なんだけど、デバッガ上だと動作するのがまた怪しい。
それに、これ、WinXP上では普通に動いていた機能。なので、余計に謎。
Windowsクラッシュダンプについても近いうちに書籍で勉強する予定なので、首を洗って待ってろよ・・・。

original url: https://www.glamenv-septzen.net/view/834