سوالات الآن نهایی هستند.

از بین سوالات سه سوال اول و سوال پنجم و هفتم به طور صفر و یکی تصحیح می‌شوند و در سوال چهارم و هشتم هر چه موارد بیشتری را پیاده‌سازی کنید نمره بیشتری دریافت خواهید کرد. در سوال ششم هم هر چه جواب بهتری پیدا کنید نمره بیشتری می‌گیرید.

برای آشنایی با قالب صورت سوال در Quera اینجا را مشاهده کنید و برای آشنایی با نحوه‌ی کار با ورودی و خروجی استاندارد (stdin و stdout) در زبان‌های مختلف، اینجا را ببینید. برای کسب اطلاعات بیشتر درباره نحوه برگزاری مسابقه هم اینجا را ببینید.

پروسه‌ی بد


  • در این سوال به هر بخش از سوال که پاسخ بدهید نمره همان قسمت را خواهید گرفت (توضیح نمره‌ی سوال در انتهای سوال قرار دارد)
  • این سوال را باید با bash پاسخ دهید. دقت کنید برای پاسخ به این سوال باید با مفاهیم مربوط به bash و لینوکس آشنا باشید و برای این کار نیاز به جستجو دارید.

یک پروسه‌ی مخرب روی کامپیوتر‌های سایت دانشکده مشاهده شده است و چند کامپیوتر سایت را که سیستم عامل ubuntu داشته اند را درگیر کرده است. یکی از بچه‌های سال بالایی ادعا کرده که توانسته اطلاعات زیر را از کامپیوتر‌های سایت جمع آوری کند:

  • شناسه‌ی پروسه‌ای که مخرب است.

  • یک قسمت از داده‌های موجود در شاخه‌ی /proc که به ازای هر (pid (process id شامل فایل‌ها و دایرکتوری‌هایی مشابه فایل‌های زیر است.

    proc
    ├── 2
    │   ├── fd/
    │   │    ├── 0
    │   │    ├── 1
    │   │    └── 2
    │   ├── fdinfo/
    │   │    ├── 0
    │   │    ├── 1
    │   │    └── 2
    │   ├── cmdline
    │   ├── gid_map
    │   ├── io
    │   └── status
    ├── 4
    │   ├── fd/
    │   ├── fdinfo/
    │   ├── cmdline
    │   ├── gid_map
    │   ├── io
    │   └── status
    Plain text

    از شما می‌خواهیم یک اسکریپت bash با نام analyze.sh‍‍ بنویسید تا با آنالیز کردن اطلاعات موجود در /proc اطلاعاتی از این پروسه‌ی مخرب به ما بدهد.

    توجه!🔗

  • تقریبا همه‌ی افرادی که به حل این مساله می‌پردازند برای این که بتوانند به سوال پاسخ بدهند نیاز دارند تا در مورد proc در اینترنت جست‌وجو کنند.

    جزئیات🔗

نحوه اجرای اسکریپت به این صورت است:

bash analyze.sh malware_pid path/to/proc/snapshot
Bash

این اسکریپت باید به عنوان خروجی هر کدام از موارد زیر را در یک خط به ما ارائه بدهد.

  • آی‌دی کاربری که این پروسه را اجرا کرده است.
  • آی‌دی پروسه‌هایی که توسط این پروسه ایجاد شده اند (پروسه‌های بچه‌) که با فاصله از هم جدا شده‌اند.
  • آی‌دی پروسه‌ای که این پروسه را شروع کرده است.
  • آی‌دی پروسه‌هایی که با پروسه‌ی مخرب به صورت هم زمان روی یک فایل متنی مشترک با پسوند txt کار می‌کردند.

نکات🔗

  • ممکن است برخی از اطلاعات خواسته شده برای برخی از pid ها وجود نداشته باشد. به طور مثال در صورتی که پروسه مخرب هیچ پروسه‌ی بچه‌ای نداشته باشد، شما باید در خروجی not-found چاپ کنید. همینطور در صورتی که پروسه با هیچ پروسه‌ی دیگری به فایل مشترک txt دسترسی نداشته باشد باید مقدار بخش چهارم را not-found بازگردانید.
  • توجه داشته باشید که اگر به جای not-found کلمه‌ی دیگری چاپ کنید،‌ تمام امتیاز سوال را از دست خواهید داد.
  • توجه داشته باشید در مورد آخر خواسته شده در پاسخ باید حتما فایلی که برروی آن کار می‌کنند پسوند txt باشد.
  • برای ارسال پاسخ خود یک فایل Zip شامل ‍‍analyze.sh آپلود کنید.

مثال🔗

برای مثال یک خروجی از proc به صورت tar.gz در این آدرس پیوست شده است. شما می‌توانید آن را دانلود کرده، extract کنید و پس از نوشتن اسکریپت analyze.sh با دستور زیر خروجی خود را چک کنید.

  • توجه داشته باشید اگر این فایل را در ویندوز extract کنید فایل‌ها ناقص می‌شوند. پس باید حتما این کار را در linux انجام دهید.
bash analyze.sh 37829 path/to/proc/snapshot
Bash

خروجی باید مشابه زیر باشد.

1000
37830 37831
7225
37832 37833
Bash

امتیاز دهی🔗

هر کدام از پاسخ‌ها به این سوال امتیاز خود را دارد. امتیاز بندی به شرح زیر است:

  • شما برای پیدا کردن شناسه‌ی پروسه‌ی پدر و شناسه‌ی کاربر اجرا کننده ۶۰ امتیاز خواهید گرفت. فقط توجه داشته باشید که این در صورتی است که برای سایر مقادیر not-found چاپ کنید.
  • در صورتی که به مقادیر بالا و مقدار آی دی پروسه‌های بچه جواب دهید. ۱۰۰ امتیاز دیگر خواهید گرفت.
  • در صورتی که همه‌ی مقادیر را درست به دست آورید ۳۰۰ امتیاز سوال را خواهید گرفت.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.