- エクスプローラーのクラッシュが急増したため原因を調べていたところ、スタック上にマルウェアに似た関数ポインタを発見
- 調べてみるとマルウェアではなくアンインストーラーだった
- アンインストーラーは終了後、自分自身のバイナリを削除しようとして待機していた(Self Deleting)
- このコードは CodeProject で 10 年前に紹介された方法を使っていた
- おそらく何らかの DLL の関数を呼び出す必要があったのだが、それが迂回(Detour)されて起きたもの
- 自分自身を削除するなら、このように別プロセス(エクスプローラー)へのコード注入や迂回をせず、次のように
cleanup.js のような一時ファイルを使うこと
- このコードは自分自身を削除し、その後アンインストーラーについても 20 秒間削除を試みる
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile("C:\\Users\\Name\\AppData\\Local\\Temp\\cleanup.js");
var path = "C:\\Program Files\\Contoso\\contoso_update.exe";
for (var count = 0; fso.FileExists(path) && count < 40; count++) {
try { fso.DeleteFile(path); break; } catch (e) { }
WSH.Sleep(500);
}
5件のコメント
当時、残骸削除プログラムを使っていたのを思い出しますね…
それでも最近は Windows でもパッケージ管理ツールが少しずつ進化しているので、期待しています。+_+
「高度に」という言葉をよく使っていた気がします。十分に発達した科学は魔法と区別がつかない。
記事のタイトルは、有名なSF小説家アーサー・C・クラーク卿の言葉に由来しています。
Hacker Newsのコメント
wscriptの使用にも言及があり、コード署名や実行前に検証できないことから、マルウェアとしてプロファイリングされうるとしているLD_PRELOADコマンドと比較されている