コヌダヌバトル: 私 vs. あの VNC 野郎

В このブログ かなりの数のプログラマヌの物語が出版されおいたす。 私は昔の愚かなこずを思い出すのが奜きです。 さお、こんな話がもう䞀぀ありたす。

私が初めおコンピュヌタヌ、特にプログラミングに興味を持ち始めたのは 11 歳の頃でした。 高校の初めにbП私は自由時間のほずんどを C64 をいじったり、BASIC を曞いたりしお、悪いコヌドをハサミで切り取るこずに費やしたした。 冗談じゃないよ、ハサミ.

英囜の子䟛たちは攟課埌16 歳頃、通垞倧孊に通い、そこで XNUMX ぀たたは XNUMX ぀の科目を遞択しお勉匷しおから倧孊に進孊したす。 家にあるベヌゞュの箱ずテヌプレコヌダヌぞの愛着を考えるず、倧孊で「コンピュヌタヌ サむ゚ンス」を孊ぶのが正しい遞択だず刀断したした。

予想以䞊にコヌスを楜しめたした。 そこで私は初めおパスカルずデルフィに䌚いたした。

授業間の䌑憩時間には、孊生はコンピュヌタヌ宀にある自由なマシンで䜜業するこずができたした。 想像しおみおください。玄 50 人甚に蚭蚈された巚倧な郚屋に、システム ナニットの䞊にモニタヌが眮かれおいるような、機械が䞊べられたテヌブルの列が䞊んでいるずしたす。 ファンは垞にブンブン音を立おおおり、テヌブルの䞊ではマりスボヌルが䞀瞬たりずも止たりたせん。 たるでホルモン䞭毒の100XNUMX人のティヌン゚むゞャヌが䜕癟ものPentium IIIチップを冷华するために定期的に亀換しおいるかのような、奇劙な匂いが空気䞭に挂っおいる。

健康䞊のリスクにもかかわらず、私は時間があればコンピュヌタヌの前に座るのが奜きでした。

この郚屋の管理者は背の䜎い䞭幎男性で、悪の独裁者になりたいずいう飜くなき願望のためこの圹に遞ばれた。 そうだず思いたす。 勀務䞭ずいうのは控えめな衚珟で、圌は自分の仕事を本圓に愛しおいたした。 圌は、誰も孊校のコンピュヌタヌを䞍適切な目的で䜿甚しないように秩序を保぀任務を負っおいたした。

今でも私の盎芳によるず、管理者のボヌナスは、圌が手で捕たえおコンピュヌタヌ宀から远い出した生埒の数に盎接䟝存しおいるようです。 確かこの人は䜏宅ロヌンを早く完枈したず思いたす。

圌はコンピュヌタヌ宀の隅のテヌブルに座っおいたした。 そしお、圌の生殖胜力モニタヌは、非垞に倚くの数があったため、驚くほど短い劊嚠期間で生殖する方法を発芋したず考えるのが安党です。 本圓にそれらすべおを远跡する時間があったのかどうか疑問に思う人もいるでしょう。 もちろん冗談です...圌が自分の仕事を非垞に真剣に受け止めおいるず蚀いたしたか?

圓時、コンピュヌタ ネットワヌクでは Windows 2000 が実行されおいたした。システムにログむンするたびに、デスクトップぞのリモヌト アクセスのために管理者アカりントから VNC サヌバヌを起動するこずを指定するスクリプトが起動されるこずがすぐにわかりたした。 この男があなたをスパむしたいずきはい぀でも、あなたのマシンに盎接接続しお監芖しおいたした。 䞍気味だったし、今思うず違法だったかもしれない。

BASIC ず C64 の基瀎を身に぀け、今では C ず少しの C++ で曞くようになりたした。 圓時、私は C++ のいく぀かの欠点を修正した D 蚀語にただ非垞に興味を持っおいたした。

私は、D に関する新しい情報を読んだり、Digital Mars D コンパむラヌをいじるためにコンピュヌタヌ宀に行ったりしおいたした。時には、D の玠晎らしい将来に぀いお考えるこずに気を取られおいる間に、C コヌドを曞いお、りィンドりから他の Win32 プログラムをハッキングしおいたした。ハンドル。

Win32 プログラミングの叀き良き時代には、りィンドり ハンドルを芋぀けるこずが他のプログラムをハッキングする最も簡単な方法でした。 明らかに、Windows 䞊のすべおの GUI プログラムには、たずえ画面䞊に衚瀺されなかったずしおも、りィンドりがありたした。 別のプロセスぞのハンドル (本質的にはそのプロセスぞのリンク) を取埗するプログラムを䜜成するず、そのプロセスにメッセヌゞを送信できたす。 これにより、プログラム りィンドりの非衚瀺/衚瀺などの基本的な操䜜だけでなく、プロセスにメモリ空間に任意の DLL を匷制的にロヌドしおコヌドの実行を開始するなど、非垞に優れた操䜜も可胜になりたした。 DLL を泚入した埌、楜しいこずが始たりたした。

最初の XNUMX か月半の間、この探偵は私をあたり悩たせたせんでした。私のマシン䞊の VNC サヌバヌに接続したのは XNUMX 〜 XNUMX 回だけでした。 しかし、ある特定のセッションが圌の興味をそそったのかもしれたせん。 授業でプレむしやすいように、マむンスむヌパのりィンドりを (閉じずに) 非衚瀺にする C コヌドを䜜成しおいたずき、システム トレむの癜い VNC アむコンが黒くなっおいるこずに気づきたした。 これは、圌が今私を芋おいるこずを意味したした。

私は圌を無芖しようずしお、い぀ものようにコヌディングを続けたした。 その間、マシンは郚屋の隅にある無数のモニタヌの XNUMX ぀に最倧フレヌム レヌトを送信しようずしお速床を萜ずし始めたした。 Windows がほずんど反応しなくなり、我慢の限界に達したずき、ログアりトしおその日の仕事を終えたした。

その埌コンピュヌタヌ宀を蚪れるず、コロンボはほが毎回私が䜕をしおいるかに匷い関心を瀺したした。 XNUMX 回目くらいで、私は「これに぀いおは䜕かをする必芁がある」ず決心したした。

理性的で理性的な人であれば、この問題を自分たたは䞊叞に盎接提起するこずもできただろうず私は認めたす。 しかし、私はい぀も誘惑に負けお、すぐに自分に蚀い聞かせおたったく別の戊略を採甚したした。

- この VNC サヌバヌがなければ䜕もできたせん。 ――私は冷静に、そしお毅然ずしお䜕床も自分に蚀い聞かせたした。

VNC を匷制終了する必芁がありたした。

私は倧勢の孊生ず䞀緒にコンピュヌタヌ宀に入り、モニタヌのある隅からできるだけ離れたずころに座るようになりたした。 これはしばらくうたくいき、アむデアをテストする時間ができたした。

私の最初の詊みは、あなたも同意しおいただけるず思いたすが、かなり匱かったです。 システムトレむの VNC アむコンを右クリックするず、EXIT ずいうマゞック文字のメニュヌが衚瀺されたす。 残念ながら、文字は灰色のアりトラむンテキストで曞かれおいたした。 管理者がグルヌプ ポリシヌ ゚ディタヌで [終了] メニュヌ項目を無効にしたした。 タスクマネヌゞャヌからプロセスを匷制終了しようずしたしたが、プロセスは別の、より特暩のあるアカりントで実行されおいたため、もちろん私には芋えたせんでした。 うたくいきたせんでした。

VNC サヌバヌは TCP ポヌト 5900 で実行されるこずを思い出したした。 私の次の蚈画は、このポヌトをクラッシュさせるために砎損したパケットをこのポヌトに送信するこずでした。

私は少なくずも数日かけおプロトコルをいじり、さたざたな圢でよく構造化されたがらくたをポヌト 5900 に送信し、それが壊れるこずを望みたした。 結局、それもうたくいきたせんでした。

もうこれはもう手攟せないだろうず思い始めおいたずき、突然気づきたした。あそこに窓があるに違いない それを衚瀺する必芁がありたす。 もしかしたら、ずおも䟿利な「ミュヌト」ボタンがあるかもしれたせん。

ほが完璧になった C コヌドを実行しお、別のプロセスのメむン りィンドりぞのハンドルを芋぀けたした。そしお、案の定、VNC が芋぀かりたした。 指でタむプするずきにむンスピレヌションを感じたした WM_SHOWWINDOW。 私が目の前に䜕を芋たのか圓おおみおください?

䜕もない

さお、気になったのですが 窓はありたしたが、私のメッセヌゞを無芖しおいたした。 コヌドが機胜するこずを確認するためにコヌドを再チェックしたした。 他のいく぀かのプロセスでテストしたずころ、うたく機胜したした。 他のメッセヌゞを VNC りィンドりに送信しようずしたしたが、ただ䜕も送信されたせん。

そしお、たた気づきたした

ずおも厚いおかげで その本 Charles Petzold 私は、Win32 プロセスがシステム内でどのように動䜜するかを泚意深く研究したした。 すべおの Win32 アプリケヌションにはりィンドりず「メッセヌゞ キュヌ」がありたす。 ナヌザヌの操䜜によっおトリガヌされたメッセヌゞや、Windows 自䜓によっお送信されたメッセヌゞはキュヌに到着し、アプリケヌション自䜓がメッセヌゞの凊理方法を決定したす。

それ自䜓はあたり面癜くありたせん。 しかし、十分な倧きさの未凊理のメッセヌゞ キュヌが、Windows プロセス マネヌゞャヌがハングしたプロセスに介入するためのヒュヌリスティックずしお機胜するこずに気づいたずき、私は玔粋なセロトニンの汗をかき始めたした。

XNUMX 秒も無駄にするこずなく、C コヌドに戻り、VNC メむン りィンドりに別のメッセヌゞを送信する準備をしたした。 WM_SHOWWINDOW。 サむクルで。 氞遠の。 ずいうこずで、たくさんのメッセヌゞ。 WM_SHOWWINDOW、VNC が完党に無芖しようずするこずがわかったので、その危険を冒しおください。

私は人生で最も自由を愛する 4 KB のコヌドをコンパむルしお実行したした。 箄 XNUMX 秒埌、Windows はプロセスが次のように報告したした。 vncserver.ехе は答えず、断るこずができない申し出をしたした。

このプロセスを完了したすか?

もちろん

その日の残りの間、私は自分自身に耐えられないほど満足しおいたこずを認めさせおください。

新しいスヌパヌパワヌを理解するのに数時間を費やした埌、私はそれをどのように䜿うかを決めたした。 圌の目の前でセッションを終わらせるのはあたりにも簡単だった。 もっず良い考えがあった - 完党に消えるこずだ。

埌に ゜ケットプログラミングによる火の掗瀌 5900 ぀のこずを実行するコヌドを䜜成できるこずに気付きたした。 たず、以前は無知な VNC サヌバヌ プロセスによっお占有されおいた、新しく解攟された TCP ポヌト XNUMX を占有したす。 次に、指定されたマシンの VNC サヌバヌぞの新しい TCP 接続が䜜成されたす。 コヌドは XNUMX ぀の゜ケット間のすべおのデヌタを単玔にプロキシするだけであり、コロンボは私に接続しおいるず思いたすが、実際にはたったく別の VNC サヌバヌに接続しおいたす。

私のコヌドは、私ず私が遞んだ他の哀れな魂ずの間の秘密の橋ずしお機胜したす。 すばらしかった。

私はすぐに停の VNC ブリッゞを曞き始めたした。 コロンボは䜕床か私に接続したしたが、私は圌の前でプログラミングを続けたした。 私は、ポヌト番号や次のようなコメントなどの明癜なこずを曞いたにもかかわらず、圌は私が䜕をしおいるのか理解しおいなかったずいう結論に達したした。 // ПрПщай, жуткОй шпОПМ VNC.

数日埌、コヌドを正しく動䜜させるこずができなくなりたした。 さらに悪いこずに、私はシステム トレむに黒い VNC アむコンを衚瀺したたた、ほが継続的に䜜業しおいたした。 接続されおいる間、コヌドをテストするためにポヌトを解攟できたせんでした。

もしあの時知っおいたら netcat!

結局のずころ、私はせっかちな 17 歳の男でした。 癜い VNC サヌバヌのアむコンが再び黒くなるのを芋お、私はびっくりしお、メッセヌゞ キュヌに蚭定されおいた元のコヌドを開いお、圌の目の前で実行したした。 クリックするたで数秒埅ったこずもありたす End Process、圌がそれを芋たこずを確認するためだけに。

もしそのボタンを抌しおも、それだけの䟡倀があるず私に十分に玍埗させられなかったずしおも、圌がモニタヌの芁塞の埌ろから飛び降りお私に玠早く近づき、私を郚屋の倖に連れ出したのは確かに玍埗できたした。

その結果、私はXNUMX週間ネットワヌクから远攟されたした。 正圓な眰だず私は思った。 箄 XNUMX 週間埌、VNC サヌバヌはブヌト スクリプトから消え、他のどこにも衚瀺されなくなりたした。 私の事件がこれに䜕らかの圱響を䞎えたかどうかはわかりたせんでしたが、党囜の倧孊のコンピュヌタヌホヌルで萜ち蟌んでいる孊生にVNC銃を売っお倧金持ちになるずいう私の蚈画は完党に台無しになりたした。

出所 habr.com

コメントを远加したす