DLL ハイジャックとは

今さらですが、DLL ハイジャックについて確認していました。

Windows には動的ライブラリ(DLL)を相対指定で読み込もうとすると最初にカレントディレクトリから探すという仕様があり、脆弱性の原因はその仕様を考慮しないでソフトウェアが作られたことにある。Linux などでは動的ライブラリ(*.so)をカレントディレクトリから探すということはしないため、この問題は基本的に発生しない(リンカオプションの rpath や環境変数の LD_LIBRARY_PATH を故意に弄ったりしない限り)。

Windows における DLL ハイジャック脆弱性、多くのメジャーなソフトウェアにも

内容は大体想像した通りだったのですが、ふと初期の RAGNAROK Online の事を思い出しました。RAGNAROK Online (RO) は β 初期の頃、自作の外部ツールの作成・使用が許されており様々なものが出まわっていました。BOT 問題が深刻化し、取り締まりが強化されるにつれて次第にグレー扱い → 黒と言う形で前面禁止されてしまいましたが……

これらのツールには、RO クライアントから情報を取得、あるいは何らかの情報を RO クライアント画面上に描画しなければならないものもあったのですが、それらのツールが取っていた解決策が「RO クライアントと同じディレクトリに、システムフォルダに存在するものと同名の DLL を作成する」と言うものでした。同名の DLL を作成する事によって RO クライアントには自分が作成した DLL をロードさせ、その DLL からシステムフォルダにある本物の DLL の各関数を適切に実行し、間に必要な分だけ独自の処理を挟むと言う手順を踏む事によってまるで RO クライアントが拡張されているかのような UI を実現させていました。

RO に限らないでしょうが、サービス開始直後(正確には、知名度が一気に広がった直後か)には「何でお前がやってんの?」みたいな凄い人達が集まっていたりして、独特の面白さがあります。