悪意のあるソフトウェアの削除ツールがWin2000で動かない原因調査その1

悪意のあるソフトウェアの削除ツール | コンピューターの保護

魔改造版 Windows 2000でも 悪意のあるソフトウェアの削除ツール が v5.24から起動できなくなったというので調べてみました

バージョン イメージ サブシステム リンカ ファイルサイズ 備考
V5.1 6.3 5.0 11.0 71M
v5.5 6.3 5.1 11.0 76M Win32アプリケーションエラーが出るので修正が必要
_wcstoui64 を msvcrt.dllが使ってるのでKDW版か拡張カーネル版が必要
v5.10 6.3 5.1 11.0 85M
v5.16 6.3 5.1 12.10 96M VC++2012 から VC++2013に変更
v5.19 6.3 5.1 12.10 107M
v5.23 6.3 5.1 12.10
v5.24 6.3 5.1 12.10 120M GetModuleHandleExW とGetNativeSystemInfoを新たに使用

ちょっとすべてのバージョンを残してなかったので(ISOから取り出すという手もありますが…)
こんな感じ。

どうも純粋なWindows 2000でも 5.2~5.5あたりで動かないようになっていたみたいですね

で、問題の v5.24をトレースしてみたところ、今まで問題がなかった HeapSetInformation で NTDLL.DLLが解放されてクラッシュしていることがわかりました。

どうも、その直前で呼ばれているGetModuleHandleExW が鍵のようです
NTDLLを呼び出してるのですが GET_MODULE_HANDLE_EX_FLAG_PIN で『何回FreeLibraryを実行してもアンロードしない』というフラグが使われています。
この関数は NTDLL.DLLの LdrAddRefDll で実現されてるのですが、実はWindows 2000にはないんで実現不能なんですよね・・・・。
というわけで、この関数のオプションに対応する必要がありそうです。

続く

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です