معركة المبرمج: أنا ضد ذلك الرجل VNC

В هذه المدونة تم نشر عدد لا بأس به من حكايات المبرمجين. أحب أن أتذكر أشياءي الغبية القديمة. حسنا، هنا قصة أخرى من هذا القبيل.

بدأت اهتماماتي بالكمبيوتر، وخاصة البرمجة، عندما كان عمري حوالي 11 عامًا. في بداية المرحلة الثانوية بоقضيت معظم وقت فراغي في إصلاح جهاز C64 الخاص بي وكتابة BASIC، ثم حذف التعليمات البرمجية السيئة بالمقص. أنا لا أمزح، مقص.

بعد المدرسة (حوالي سن 16 عامًا)، يذهب الأطفال البريطانيون عادةً إلى الكلية، حيث يختارون دراسة ثلاث أو أربع مواد قبل الذهاب إلى الجامعة. نظرًا لحبي للصندوق البيج والمسجل في المنزل، قررت أن دراسة "علوم الكمبيوتر" في الكلية هي الاختيار الصحيح.

لقد استمتعت بالدورة أكثر مما توقعت؛ هناك التقيت لأول مرة باسكال ودلفي.

خلال فترات الاستراحة بين الفصول الدراسية، يمكن للطلاب العمل على أي جهاز مجاني في غرفة الكمبيوتر. تخيل: غرفة ضخمة، مصممة لحوالي مائة شخص، مع صفوف من الطاولات مليئة بالآلات، مثل تلك التي تقف فيها الشاشة على وحدة النظام. يدندن المشجعون باستمرار، وكرات الفأر تطن على الطاولات، ولا تتوقف لثانية واحدة. هناك رائحة غريبة في الهواء، كما لو أن 50-100 مراهق هرموني يتغير بشكل دوري لتبريد مئات رقائق Pentium III.

على الرغم من المخاطر الصحية، كنت أحب الجلوس على الكمبيوتر عندما يكون لدي دقيقة مجانية.

كان المشرف المناوب في الغرفة رجلاً قصير القامة في منتصف العمر تم اختياره لهذا الدور بسبب رغبته التي لا تشبع في أن يصبح ديكتاتورًا شريرًا. انا افترض ذلك. على واجب بخس؛ الرجل حقا أحب وظيفته. تم تكليفه بحفظ النظام حتى لا يستخدم أحد كمبيوتر المدرسة لأي شيء غير مناسب.

وحتى يومنا هذا، يخبرني حدسي أن مكافأة المشرف تعتمد بشكل مباشر على عدد الطلاب الذين يمسكهم بيده ويرافقهم إلى خارج غرفة الكمبيوتر. أنا متأكد من أن هذا الرجل دفع رهنه العقاري في وقت مبكر.

جلس في الزاوية البعيدة من غرفة الكمبيوتر على طاولة زاوية. وكان من الآمن الافتراض أن أجهزة مراقبة الخصوبة الخاصة به قد وجدت طريقة للتكاثر مع فترة حمل قصيرة بشكل مثير للإعجاب، وكان هناك الكثير منها. لا يمكن للمرء إلا أن يتساءل عما إذا كان لديه الوقت حقًا لتتبعهم جميعًا. بالطبع أنا أمزح... هل ذكرت أنه يأخذ عمله على محمل الجد؟

في ذلك الوقت، كانت شبكة الكمبيوتر تعمل بنظام التشغيل Windows 2000. وسرعان ما اكتشفت أنه في كل مرة أقوم فيها بتسجيل الدخول إلى النظام، يتم تشغيل برنامج نصي يحدد بدء تشغيل خادم VNC من حساب المسؤول للوصول عن بعد إلى سطح المكتب. كلما أراد هذا الرجل التجسس عليك، كان يتصل مباشرة بجهازك ويشاهد. كان الأمر مخيفًا، والآن بعد أن فكرت في الأمر، ربما كان غير قانوني.

بعد أن أتقنت لغة BASIC وC64، كتبت الآن بلغة C وحتى القليل من لغة C++. في ذلك الوقت، كنت لا أزال مهتمًا جدًا باللغة D، والتي صححت بعض أوجه القصور في لغة C++، كما رأيتها حينها.

اعتدت أن أذهب إلى غرفة الكمبيوتر لقراءة شيء جديد على D أو اللعب مع مترجم Digital Mars D. في بعض الأحيان، بينما كنت مشتتًا عن التفكير في المستقبل العظيم لـ D، كتبت كود C لاختراق برامج Win32 الأخرى من خلال نافذتهم. مقابض.

في الأيام الخوالي لبرمجة Win32، كان العثور على مقبض النافذة هو أسهل طريقة لاختراق البرامج الأخرى. من الواضح أن جميع برامج واجهة المستخدم الرسومية على نظام التشغيل Windows بها نافذة، حتى لو لم تظهر على الشاشة. من خلال كتابة برنامج لاسترداد مؤشر لعملية أخرى (رابط إليها بشكل أساسي)، يمكنك إرسال رسائل إليها. سمح هذا ببعض العمليات الأساسية مثل إخفاء/إظهار نافذة البرنامج، بالإضافة إلى أشياء رائعة حقًا مثل إجبار العملية على تحميل ملف DLL عشوائيًا في مساحة الذاكرة الخاصة بها والبدء في تنفيذ التعليمات البرمجية. بعد حقن DLL، بدأت المتعة.

في الشهر والنصف الأول، لم يزعجني هذا المحقق كثيرًا؛ فقد اتصل بخادم VNC الموجود على جهازي مرة أو مرتين فقط. لكن جلسة واحدة معينة ربما أثارت اهتمامه. كنت أكتب بعض أكواد C لإخفاء نوافذ Minesweeper (بدون إغلاقها) لتسهيل اللعب في الفصل، عندما لاحظت أن رمز VNC الأبيض في علبة النظام قد تحول إلى اللون الأسود. هذا يعني أنه كان يراقبني الآن.

واصلت البرمجة كالمعتاد، محاولًا تجاهله. وفي الوقت نفسه، بدأت الآلة في التباطؤ، في محاولة لنقل الحد الأقصى لمعدل الإطارات إلى إحدى الشاشات التي لا تعد ولا تحصى في زاوية الغرفة. توقف Windows تقريبًا عن الاستجابة، وعندما نفد صبري، قمت بتسجيل الخروج وانتهيت من اليوم.

وفي الزيارات اللاحقة إلى غرفة الكمبيوتر، أبدى كولومبو اهتمامًا شديدًا بما كنت أفعله في كل مرة تقريبًا. وبعد المرة الرابعة تقريبًا، قررت: يجب أن أفعل شيئًا حيال ذلك.

أعترف أنه كان بإمكان أي شخص عاقل وعقلاني أن يثير هذه القضية مباشرة معه أو مع رئيسه. ومع ذلك، فقد استسلمت دائمًا للإغراء وسرعان ما أقنعت نفسي بتبني استراتيجية مختلفة تمامًا.

- لا يمكنك فعل أي شيء بدون خادم VNC هذا! – قلت لنفسي بهدوء وحزم عدة مرات.

كان من الضروري قتل VNC.

بدأت بالدخول إلى غرفة الكمبيوتر مع مجموعات كبيرة من الطلاب والجلوس بعيدًا عن الزاوية مع الشاشات قدر الإمكان. لقد نجح هذا لفترة من الوقت ومنحني بعض الوقت لاختبار الأفكار.

أعتقد أن محاولتي الأولى، ستوافقني الرأي، كانت ضعيفة جدًا. بالنقر بزر الماوس الأيمن على أيقونة VNC في علبة النظام، رأيت قائمة بها الحروف السحرية EXIT. لسوء الحظ، كانت الرسائل مكتوبة بنص مخطط باللون الرمادي. قام المسؤول بتعطيل عنصر القائمة "الخروج" من خلال محرر نهج المجموعة. لقد حاولت إيقاف العملية من مدير المهام، لكنها بالطبع كانت غير مرئية بالنسبة لي لأنها كانت تعمل ضمن حساب مختلف وأكثر امتيازًا. لم ينجح الأمر.

تذكرت أن خادم VNC يعمل على منفذ TCP رقم 5900. كانت خطتي التالية هي إرسال حزم تالفة إلى هذا المنفذ لتعطيله.

لقد أمضيت بضعة أيام على الأقل في إصلاح البروتوكول، وأرسلت أشكالًا مختلفة من الحماقات جيدة التنظيم إلى المنفذ 5900 وآمل أن ينكسر. وفي النهاية، لم ينجح ذلك أيضًا.

لقد بدأت بالفعل أعتقد أنني لن أتمكن من التخلص من هذا الشيء، عندما خطرت ببالي فجأة: لا بد أن تكون هناك نافذة هناك! نحن بحاجة لعرضه. ربما سيحتوي على زر "كتم الصوت" الرائع الذي يمكنني استخدامه بشكل رائع!

لقد قمت الآن بتشغيل كود C المثالي تقريبًا للعثور على المقبض للنافذة الرئيسية لعملية أخرى - وبالتأكيد تم العثور على VNC. شعرت بالإلهام عندما كتبت بأصابعي WM_SHOWWINDOW. حاول أن تخمن ما رأيته أمامي؟

لا شيء!

والآن أشعر بالفضول... كان بها نافذة، لكنها كانت تتجاهل رسائلي. لقد قمت بفحص الكود الخاص بي للتأكد من أنه يعمل. تم اختباره على عدة عمليات أخرى وكان يعمل بشكل رائع. حاولت إرسال رسائل أخرى إلى نافذة VNC، ولكن لا شيء.

ثم اتضح لي مرة أخرى!

بفضل سميكة جدا книге تشارلز بيتزولد لقد درست بعناية كيفية عمل عمليات Win32 داخل النظام. يحتوي كل تطبيق Win32 على نافذة بالإضافة إلى "قائمة انتظار الرسائل". تصل الرسائل الناتجة عن تفاعل المستخدم، وكذلك الرسائل التي يرسلها Windows نفسه، إلى قائمة الانتظار، ويقرر التطبيق نفسه كيفية معالجتها.

ليست مثيرة للاهتمام في حد ذاتها. ولكن عندما أدركت أن قائمة انتظار الرسائل غير المعالجة الكبيرة بما يكفي كانت بمثابة إرشاد لمدير عمليات النافذة للتدخل في عملية معلقة، بدأت أتعرق من السيروتونين النقي.

وبدون إضاعة ثانية واحدة، عدت إلى رمز C الخاص بي، وأستعد لإرسال رسالة أخرى إلى نافذة VNC الرئيسية WM_SHOWWINDOW. في دورة. أبدي. لذلك، الكثير من الرسائل. WM_SHOWWINDOW، والذي أعلم الآن أن VNC سيحاول تجاهله تمامًا... على مسؤوليته.

لقد قمت بتجميع وتشغيل 4 كيلو بايت من أكثر الأكواد المحبة للحرية في حياتي. وبعد حوالي ثلاث ثوان، أبلغ ويندوز أن العملية vncserver.ехе لم يجيب، وقدم عرضًا لا أستطيع رفضه ببساطة:

هل تريد إكمال هذه العملية؟

الجحيم نعم!

اسمحوا لي أن أعترف أنني كنت سعيدًا بنفسي لبقية اليوم.

بعد بضع ساعات قضيتها في استيعاب قوتي الخارقة الجديدة، قررت كيف سأستخدمها. كان من السهل جدًا إنهاء الجلسة أمامه مباشرةً. كانت لدي فكرة أفضل - أن أختفي تمامًا.

بعد معمودية النار مع برمجة المقبس أدركت أنه يمكنني كتابة التعليمات البرمجية التي من شأنها أن تفعل شيئين. سيشغل أولاً منفذ TCP 5900 الذي تم تحريره حديثًا، والذي كان يشغله سابقًا عملية خادم VNC المجهولة. ثم سيقوم بإنشاء اتصال TCP جديد بخادم VNC للجهاز المحدد. سيقوم الكود ببساطة بتوكيل جميع البيانات الموجودة بين المقبسين، وسيعتقد كولومبو أنه يتصل بي، في حين أنه في الواقع سيتصل بخادم VNC مختلف تمامًا.

سيكون الكود الخاص بي بمثابة جسر سري بيني وبين روح فقيرة أخرى من اختياري. كانت رائعة.

بدأت على الفور في كتابة جسر VNC المزيف الخاص بي. اتصل بي كولومبو عدة مرات، لكنني واصلت البرمجة أمامه. توصلت إلى استنتاج مفاده أنه ليس لديه أي فكرة عما كنت أفعله، على الرغم من أنني كتبت أشياء واضحة مثل أرقام المنافذ والتعليقات مثل // Прощай, жуткий шпион VNC.

وبعد بضعة أيام لم أتمكن من تشغيل الكود بشكل صحيح. ومما زاد الطين بلة أنني كنت أعمل بشكل مستمر تقريبًا مع أيقونة VNC السوداء في علبة النظام. أثناء اتصاله، لم أتمكن من تحرير المنفذ لاختبار الكود الخاص بي.

لو كنت أعرف ذلك الحين netcat!

في النهاية، انهارت أعصابي، فقد كنت شابًا غير صبور يبلغ من العمر 17 عامًا. عندما شاهدت أيقونة خادم VNC البيضاء تتحول إلى اللون الأسود مرة أخرى، شعرت بالخوف، وفتحت الكود الأصلي الذي كان يملأ قائمة انتظار الرسائل، وقمت بتشغيله أمامه. حتى أنني انتظرت بضع ثوانٍ قبل النقر End Process، فقط للتأكد من أنه رآه.

إذا لم يقنعني الضغط على هذا الزر تمامًا بأن الأمر يستحق ذلك، فمن المؤكد أن قفزه من خلف حصنه من الشاشات ليقترب مني بسرعة ويخرجني من الغرفة قد فعل ذلك بالتأكيد.

ونتيجة لذلك، تم منعي من الشبكة لمدة أسبوعين. اعتقدت أن العقوبة العادلة. وبعد حوالي ثلاثة أسابيع، اختفى خادم VNC من نصوص التمهيد ولم يظهر أبدًا في أي مكان آخر. لم أكن أعلم أبدًا ما إذا كان لحادثتي أي دور في هذا أم لا، لكنه أفسد تمامًا خطتي لتحقيق ثراء خرافي من خلال بيع مسدس VNC الخاص بي للطلاب المكتئبين في قاعات الكمبيوتر الجامعية في جميع أنحاء البلاد.

المصدر: www.habr.com

إضافة تعليق