





السمعة:
- إنضم20 يونيو 2023
- المشاركات 274
- الحلول 5
- مستوى التفاعل 352
- النقاط 63
يعطيك الف الف عافية على الشرحبسم الله الرحمن الرحيم
وصف التّحدي :
كلمة المرور للمرحلة التالية مخزنة في الملف data.txt، وهي واحدة عدة سلاسل نصية قابلة للقراءة البشرية ( human - readable )، وتسبقها عدة علامات ‘=’
حلّ التّحدّي :
نبدأ الحل بتسجيل الدخول إلى السيرفر الخاص بالتحديات، باسم المستخدم bandit9 وكلمة المرور الخاصة بالمرحلة 9, والتي كُنّا قد حصلنا عليها من حل المرحلة السابقة.
لا تنسى أن تقوم بادخال كلمة المرور الخاصة بالمرحلة عند الطلب.كود:ssh [email protected]. overthewire.org -p 2220
الآن بعد تسجيل الدخول، كما تعلمنا سابقًا سنتسخدم الأمر ls لاستعراض الملفات الموجودة في المُجلد الحالي والتي من ضمنها سيكون الملف المطلوب وهو الملف المُسمى data.txt المذكور بوصف التحدّي، حيث أن هذا الملف يحتوي على كلمة المرور للمرحلة التالية.
لابد أن أوَّل ما تبادر الى ذهنلك هو استعراض محتويات الملف باستخدام الأمر cat.
حسنًا إذًا لنجرب عرض محتويات الملف، باستخدم الأمر cat
نُلاحظ ظهور رموز عشوائية وغير مفهومة!!!كود:cat data.txt
وكما يتضح لنا انه ليس نصُّا قابلًا للقراءة ( ليس human - readable ) وانما هو ملف من نوع آخر ( ملف بيانات/ ملف ثنائي ).
مشاهدة المرفق 12698
يمكنك تصفح كافة الأسطر العشوائية بالملف بحثًا عن النص الذي يحتوي على كلمة المرور، والذي سيكون مسبوقًا بعدة علامات =. حيث سيبدو النص كالتالي:
ولكن هذه الطريقة غير مُجدية اطلاقًا وستأخذ وقتًا، ويمكنك أن تتخيل لو كان الملف يحتوي المئات من السطور!كود:======= كلمة_المرور_هنا
اذًا، من الضروري أن نتعلم السرعة واختصار الوقت في البحث عن الهدف في المجال هذا إن أمكن ذلك ، لأنه في بعض السيناريوهات قد لا يتوفر لديك الوقت الكافي لإجراء بحث يدوي مُطول، فمثلًا، افترض أن جهازك قد تعرض لهجوم وتحتاج إلى تحديد مصدر الاختراق بأسرع وقت ممكن; للحيلولة دون حدوث المزيد من الضرر، وقس على ذلك ما شئت.
لنعد الآن لحل السؤال...
علينا البحث عن طريقة يمكن من خلالها استخراج المحتويات التي يُمكن قرائتها أو كما أسميناها سابقًا ( human - readable ) ، ومن هنا لابد أن نتعرف على أمر جديد وهو الأمر strings، حيث سيقوم بهذه المهمه على أكمل وجه، وبعدها يمكننا الإستعانه بالأمر الذي كُنا قد تعلمناه سابقًا وهو الأمر grap لاستخراج كلمة السر مباشرة بعد تطبيقه على مُخرجات الأمر string والتي ستكون عبارة عن النصوص القابلة للقراءة ( human-readble ) فقط.
حيث سيكون الأمر النهائي هو:
كود:strings data.txt | grep ==[/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER] [SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER]
بعد تنفيذ الأمر أعلاه ستظر لنا بفضل الله كلمة المرور للمرحلة التالية على هذا الشكل.
مشاهدة المرفق 12715
التوضيح:
كما تلاحظ فقد قُمنا بأخذ مُخرجات الأمر string باستخدام إشارة | كمدخلات للأمر grep ، وقمنا من خلال الأمر grep باقتباس الاسطر التي تحنوي على علامة ‘=’ ، لأنه مذكور بوصف التحدي أن كلمة السر مسبوقة بعدة علامات مساواة والصورة أدناه توضح بشكل أكبر:
مشاهدة المرفق 12710
معلومات إضافية للإفادة
الأمر strings
- يقوم بطباعة وعرض سلاسل الأحرف القابلة للقراءة البشرية في الملفات على سطر الأوامر، حيث يطبع الأمر strings عادة تسلسلات الأحرف القابلة للقراءة التي يبلغ طولها 4 أحرف على الأقل وليس أقل من ذلك (يعني مثلا أن أقل تسلسل أو عدد من الاحرف يمكن استخراجه من أي ملف وعرضه كسطر ناتج عن الأمر string، يكون عادة أقلُها 4 أحرف ويتبعهم حرف غير قابل للطباعة بشكل افتراضي، ويمكن التحكم بذلك من عدة خيارات خاصّة بالأمر string.
- يُستخدم الأمر strings عادة على الملفات غير النصية مثل ملفات الباينري فهي تعتبر ملفات غير نصيّة.
يمكنك استخدام الأمر man strings لقراءة كافة التفاصيل عنه، كما هو موضّح بالصورة أسفله.
مشاهدة المرفق 12704
أو يمكنك استخدام الأمر string مع h- أو help-- لعرض ملخص عنه.
مشاهدة المرفق 12703
الملفات القابلة للقراءة البشرية (Human-Readable Files)
- في أنظمة تشغيل Linux، تُعرف الملفات human-readable على أنها الملفات التي يمكن للإنسان قراءتها وفهم محتواها بسهولة وعادةً ما تكون هذه الملفات نصوصًا، فالملفات النصيّة تعتبر human-readable، حيث تُخزن الملفات القابلة للقراءة البشرية كقيم نصية باستخدام ترميز مثل ASCII أو UTF-8، على عكس الملفات الثنائية (binary files) التي تحتوي على بيانات مشفرة أو مضغوطة، فإن هذه الملفات تحتوي على نصوص واضحة يمكن قراءتها وتفسيرها بواسطة المستخدمين.
أنواع الملفات القابلة للقراءة البشريَّة ( human - readable )
1. ملفات النصوص العادية (Plain Text Files):
- تحتوي على نصوص بسيطة دون تنسيق.
- مثال: ملفات .txt، .csv، .log.
2. ملفات التكوين او الإعدادات (Configuration Files):
- تُستخدم لتخزين إعدادات البرامج.
- غالبًا ما تكون بصيغة نصية مثل .conf أو .ini.
- مثال على ملفات التكوين: /etc/hosts، /etc/passwd.
3. ملفات البرمجة (Source Code Files):
- تحتوي على كود برمجي مكتوب بلغة برمجة معينة.
- مثال: ملفات .c، .py، .java.
4. ملفات الـ HTML:
- تُستخدم لإنشاء صفحات الويب.
- مثال: ملفات .html.
كيفية قراءة محتويات الملفات القابلة للقراءة البشرية في أنظمة لينكس:
بالطبع يمكن عرض محتوى أيٍ من هذه الملفات باستخدام مجموعة من الأوامر والتي كنا قد تحدثنا عن بعضها سابقًا، نستعرض بعضًا منها :
الأمر cat:
- أظن انه أصبح مألوفًا لدينا، نُذكِّر به مُجددّا، حيث يُستخدم لعرض محتوى الملف بالكامل كمخرجات على سطر الأوامر.
الأمر less:
- يُستخدم لعرض الملفات بطريقة تفاعلية، حيث يمكنك التمرير لأعلى ولأسفل مباشرة.
كود:less اسم الملف [/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER] [SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER]
الأمر more:
مشابه لـ less ولكنه أقل تفاعلية.
ما الفرق بين الأمر more والأمر less ؟
بساطة، less أكثر مرونة من more، ويُمكنك استخدامها للتحكم بشكل أفضل في الملف الذي تُشاهده.
الأمر less
* يظهر الملف صفحة واحدة في المرة الواحدة.
* يتطلب الضغط على Enter لمشاهدة الصفحة التالية.
* لا يُمكنك التمرير لأعلى في الملف. الأمر more
* يظهر الملف صفحة واحدة في المرة الواحدة.
* يتطلب الضغط على Enter لمشاهدة الصفحة التالية.
* يُمكنك التمرير لأعلى ولأسفل في الملف.
* يُمكنك استخدام مفاتيح خاصة للتحكم في عرض الملف (مثل / البحث).
الأمر head:
- يُظهر أول 10 أسطر من الملف (يمكنك تحديد عدد الأسطر التي تريد عرضها باستخدامه)، مثلا:
حيث قمنا بتحديد 35 سطر ليقوم بعرضها.HTML:head -35 parrot.txt
الأمر tail:
- يُظهر آخر 10 أسطر من الملف (يمكنك أيضًا تحديد عدد الأسطر التي تريد عرضها كما في الأمر head).
واخيرًا باستخدام محررات النصوص مثل ( الأمر nano أو vim)
- على سبيل المثال، عند حفظ ملف نصي يحتوي على الجملة "KALI"، يتم تخزين كل حرف كقيمة عددية وفقًا لترميز ASCII أو UTF-8.
وملفات ASCII، فهي نوع من أنواع ترميز النصوص يستخدم في الكثير من الملفات النصية human-readable. يقوم ترميز ASCII بتحويل الأحرف والأرقام إلى رموز رقمية قابلة للقراءة من قبل الحاسوب حتى يقوم بالتعامل معها لأنه لا يفهم لغة الإنسان التي هي الحروف والرموز و والأرقام وبالتالي لا يمكنه التعامل معها أو تحويلها لبيانات ثنائية أبدًا ليقوم بمعالجتها أو ما شابه، وسنوضح ذلك تاليًا.
ترميز الـ ASCII
- ترميز ASCII (American Standard Code for Information Interchange) هو نظام لترميز الأحرف يُستخدم لتمثيل النصوص في الحواسيب، حيث يحتوي ASCII على 128 رمزًا، تشمل الأحرف الإنجليزية الكبيرة والصغيرة، الأرقام، وبعض الرموز الخاصة (مثل الفاصلة، المسافة، وعلامات الترقيم)، حيث يُُخَصَصُ لكل حرف أو رمز رقماً صحيحاً يتراوح بين 0 و127، مما يسمح بتمثيل وتخزين النصوص والأوامر الأساسية باستخدام الأرقام الثنائية، وأريد منك أن لا تقلق البتة إن لم تكن الامور واضحة تمامًا; فسنفهم هذا الجزء في نهاية هذا الشرح، والآن لنكمل الشرح بسم الله ولننظر للجدول التالي استكمالًا لما سَبَق:
مشاهدة المرفق 12705
ركز معي بالمثال التالي :
اذا كان لديك ملف نصي لنفترض أن اسمه parrot.txt ( ليس مهم ذكر اسمه حتى ولكن ايًّا يكن .... ) لنفترض أنه يحتوي على الكلمة "Parrot"، فإنه يتم تمثيل كل حرف من الكلمة " Parrot " كقيمة عددية وفقًا لترميز ASCII كالتالي:
وفي الصورة أدناه توضيح بسيط وسريع لكيف تم ذلك.كود:80 97 114 114 111 116
مشاهدة المرفق 12707
وعندما نقوم بعرض محتويات الملف parrot.txt على سطر الأوامر او باستخدام أي محرر، فسيظهر المحتوى هو كلمة "Parrot" لم يحدث عليها أي تغيير!
- إذًا فإجمالًا، يُستخدم ترميز ASCII في كثير من الملفات human-readable التي تحتوي على نصوص، حيث أن ملفات ASCII هي نوع من الملفات القابلة للقراءة البشرية وكما وضحنا سابقًا فانه يتم فيها استخدام ترميز ASCII لتمثيل الأحرف.
ملفات الباينري (Binary Files)
- أما ملفات الباينري، فهي ملفات لا يمكن قراءتها بشكل مباشر بواسطة البشر، حيث تحتوي هذه الملفات على بيانات مُخزنة باستخدام نظام العد الثُنائي (0 و 1)، وهو نظام عددي يعتمد على رقمين فقط وهما الـ 0 و 1، ويتم تمثيل جميع المعلومات، سواء كانت نصوصًا، صورًا، أو صوتيات، باستخدام تسلسلات من الأصفار والآحاد، كما هو موضح بالجدول أدناه.
مشاهدة المرفق 12708
وهذا يُفسر سبب ظهور أي ملف باينري على شكل رموز وأرقام غريبة وغير مفهومة إطلاقًا عند محاولة قراءة كملف نصي، وجب التنبيه أن تلك الملفات يتم التعامل معها بشكل مختلف تمامًا عن الملفات النصيّة.
ونَذكُر أمثلة على ملفات باينري :
ملفات الصور: مثل JPEG و PNG.
ملفات الصوت: مثل MP3 و WAV.
البرامج التنفيذية: مثل ملفات EXE أو ELF.
- تُخزن البيانات في ملفات الباينري بشكل ثنائي باستخدام وحدات تسمى بايتات حيث أن كل بايت يتكون من 8 بت، مما يسمح له بتمثيل قيم تتراوح بين 0 و 255، لم؟
لأن العد يبدأ من 0:
- القيمة 0 تمثل 00000000 (كل البتات صفر).
- القيمة 255 تمثل 11111111 (كل البتات واحد).
مشاهدة المرفق 12713
هذا النظام الثنائي هو الأساس الذي يقوم عليه تخزين ومعالجة جميع أنواع البيانات الرقمية.
- فعندما نقوم بإنشاء ملف باينري، يتم تحويل البيانات إلى سلسلة من الأصفار والآحاد.
كل مجموعة من 8 بتات (بايت) تُستخدم لتمثيل قيمة معينة.
على سبيل المثال:
إذا كان لدينا ملف يحتوي على القيم التالية:
القيمة الأولى: 11001010 (162)
القيمة الثانية: 00101101 (45)
هذا يعني أن الملف سيحتوي على بايتين، الأول يمثل القيمة 162 والثاني يمثل القيمة 45.
دعنا نأخذ مثال سريع لتكون صورة عامة عن ما سبق، لنأخذ كلمة معينة، مثل "Hello"، ونحولها إلى ترميز ASCII ثم إلى تنسيق باينري.
الخطوة 1: تحويل الكلمة إلى ترميز ASCII
حيث كل حرف في الكلمة "Hello" له قيمة ASCII محددة، يمكنك الرجوع للجدول الخاص بقيم الـ ASCII للحصول على القيم المُقابلة لكل حرف:
H → 72
e → 101
l → 108
l → 108
o → 111
الخطوة 2: تحويل القيم إلى باينري (وهُنا أقترح عليك صديقي أن تقوم بقراءة آالية التحويل للنظام الثنائي من الانترنت فهنالك مئات المقالات عن ذلكوهذا أساس لابد من معرفته ولو بشكل بسيط وعام، فلا تجزع! )
الآن، سنحول كل قيمة ASCII إلى تمثيل باينري (8 بت):
- H (72) → 01001000
- e (101) → 01100101
- l (108) → 01101100
- l (108) → 01101100
- o (111) → 01101111
الخطوة 3: تجميع النتائج
إذا قمنا بتجميع كل هذه القيم، فإن الكلمة "Hello" في الترميز الباينري ستكون:
كود:00000000: 01001000 01100101 01101100 01101100 01101111 Hello[/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER][/SIZE][/CENTER] [SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER][SIZE=5][CENTER]
سيناريو آخر بسيط; لتلخيص ما سبق وتخيُّل الأمر كيف يحدث بشكل أوضح:
" لنفترض أنك توجه لي عدة اسئلة وأنا احاول أن اجيبك عليها قدر استطاعتي "
كيف تعمل البرمجة بالضبط؟ كيف يتم تحويل البيانات المدخلة إلى شيء يمكن للكمبيوتر فهمه؟
دعني أشرح لك العملية خطوة بخطوة. عندما تدخل بيانات، مثل كود برمجي أو نص معين، فأول شيء يحدث هو تحويل هذا النص إلى رموز ASCII، على سبيل المثال، إذا أدخلت كلمة "Hello"، يتم تحويل كل حرف تُدخله باستخدام لوحة المفاتيح إلى قيمته في ASCII وكذلك الأمر عندما تكتب الكود باستخدام محرر معين، أيًّأ كان، فيكون الكود على شكل نصي أيضًا، ويتم حفظه عادةً بامتداد معين (مثل .py للبايثون، .java للجافا، .c للسي، إلخ) على حسب اللغة المُستخدة في كتابة الكود، وكذلك الأمر عند حفظ الملف، يبقى بالشكل النصي حيث يتم تخزين الكود على القرص الصلب هكذا، ويحتوي على التعليمات البرمجية التي كتبتها.
وماذا تعني قيم ASCII؟
كثنا قد شرحناه سابقًا حيث أن كل حرف له قيمة عددية محددة. على سبيل المثال، الحرف "H" له القيمة 72، و"e" له القيمة101، وهكذا....
بعد ذلك، نقوم بتحويل هذه القيم النصية المخزنة كـ ASCII إلى نظام العد الثنائي (باينري). كل قيمة ASCII تتحول إلى سلسلة من الأصفار والآحاد، "H" كمثال. قيمتها 72 تتحول إلى 01001000 في النظام الثنائي
وكذلك الأمر بالنسبة للكود، حيث يتم تحويله من نصي الى ثنائي ليصبح كود قابل للتنفيذ executable ( يتم تحويل الكود النصي إلى كود ثنائي (Executable) بواسطة مترجم (Compiler). هذا الكود الثنائي هو ما يمكن أن ينفذه نظام التشغيل مباشرة).
وماذا يحدث بعد ذلك؟
يحدث التنفيذ، الآن بعد أن حصلنا على البيانات بالشكل الثنائي (باينري )، يمكن للكمبيوتر معالجتها; حيث يقوم المعالج بقراءة هذه السلسلة من الأصفار والآحاد ويقوم بتنفيذ الأوامر المطلوبة، حيث لو كتبت مثلًا كود بسيط فبمجرد أن يعالج الكمبيوتر البيانات بعد تحويلها للصيغة الثنائية كما وضحنا سابقًا، فانه يمكنه تنفيذ الأوامر، مثل عرض النص على الشاشة أو إجراء عمليات حسابية معينة وقس على ذلك ما شئت.
الخُلاصة
يمكننا تخزين البيانات بصورة إمّا نصية أو ثُنائية، كلاهما يختلفان بطريقة قراءة وتخزين البيانات والتعامل معها، في نظام لينكس، حيث يتم استخدام أنواع مختلفة من الملفات لتلبية احتياجات مختلفة. الملفات القابلة للقراءة البشرية وكما تحدثنا عن ملفات ASCII حيث تسمح للمستخدمين بالتفاعل مع النصوص وقراءتها بسهولة، بينما توفر ملفات الباينري كفاءة أعلى في تخزين البيانات، حيث أن كل نوع من هذه الملفات له استخداماته ومميزاته الفريدة، والموضوع يطول شرحه.
الى هنا بفضل الله ينهتي شرح هذه المرحلة، سررت بمشاركتم الحل وما سبق من معلومات، انتظروني في المراحل القادمة لنتعلم ونستفيد معًا ونكمل الطريق الى نهايته بإذن الله.
دمتم بخير والسلام عليكم.
كالعادة, كلمات لا توصف ابداعكم وطريقة شرحكم المميزة
بننتظر جديدكم وتحياتي لكم جميعا

