悪意のあるソフトウェアの削除ツールが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にはないんで実現不能なんですよね・・・・。
というわけで、この関数のオプションに対応する必要がありそうです。
続く
Comments