بایگانی برچسب‌ها : bug

ویروس رایانه ای Computer Virus

ویروس رایانه‌ای یا Computer Virus چیست؟

ویروس رایانه‌ای (Computer Virus) یا به اختصار ویروس، نوعی بدافزار (Malware) است که بدون اطلاع کاربر اجرا شده و کد خود را در سایر برنامه‌ها تزریق می‌کند. با اجرای فایل یا برنامه آلوده شده، فعالیت مخرب یا شرورانه ویروس آغاز می‌شود.

هر ویروس معمولا از سه بخش اصلی تشکیل شده است. بخش اول که مکانیزم آلوده‌سازی (Infection) نام دارد شامل یک رویه جستجو برای یافتن فایل‌هایی است که برای آلوده‌سازی مناسب هستند. بخش دیگر که اصطلاحا Payload نامیده می‌شود بدنه اصلی ویروس به شمار می‌رود و اعمال مضر یا مخرب را شامل می‌شود. بخش فعالساز (Trigger) نیز وظیفه فعالسازی Payload را در زمان یا موقعیت مناسب برعهده دارد.

ویروس‌های رایانه‌ای، هزینه‌ها و خسارت‌های سنگینی را به قربانیان خود تحمیل می‌کنند. برای مقابله با این بدافزارها نمونه‌های مختلف رایگان و غیررایگانی از آنتی‌ویروس‌ها طراحی شده است که می‌تواند از سیستم‌های مختلف در مقابل چنین تهدیدهایی تا حد قابل قبولی محافظت نماید. به علاوه پشتیبان‌گیری از فایل‌ها نیز می‌تواند ریسک ناشی از آلوده شدن فایل‌های موجود روی سیستم را کاهش دهد و امکان بازگردانی فایل‌های سالم را برای کاربر فراهم کند.

توسعه دهندگان ویروس‌های امروزی، آسیب‌پذیری‌های امنیتی موجود در سیستم عامل‌ها و نرم‌افزارها را شناسایی می‌کنند و از آن به منظور آلوده کردن سیستم و انتشار ویروس استفاده می‌کنند. معمولا برای طراحی ویروس‌ها از روش‌های پیچیده‌ای استفاده می‌شود که امکان تشخیص توسط آنتی ویروس‌ها را دشوارتر می‌نماید. ثابت نگه‌داشتن زمان آخرین تغییر در فایل‌های آلوده شده، ثابت نگه‌داشتن حجم فایل‌های اجرای پس از آلوده‌سازی (با بهره‌برداری از فضای خالی موجود در فایل)، غیرفعال کردن فرایندهای مربوط به آنتی ویروس و … از جمله راهکارهایی هستند که توسط ویروس‌ها به کار گرفته می‌شود.

باتوجه به این که سیستم عامل ویندوز نسبت به سایر سیستم عامل‌های رایانه‌های دسکتاپ دارای سهم بیشتری از بازار است در کنار عوامل دیگری نظیر سطح دسترسی مدیریتی اکانت‌هایی که توسط کاربران مورد استفاده قرار می‌گیرد، باعث شده است ویروس‌های بیشتری این سیستم عامل را هدف خود قرار دهند.

اهداف ویروس‌ها و سازندگان آن‌ها

ویروس‌ها هدف‌های مختلفی را روی سیستم قربانی دنبال می‌کنند. از اشغال فضای روی دیسک گرفته تا استفاده بیش از حد از پردازنده (با اجرای کدهای تکرارشونده)، دسترسی به اطلاعات شخصی و سرقت آن‌ها، جاسوسی از کاربر قربانی و Keylogging، تغییر و یا از بین بردن اطلاعات و … از جمله مأموریت‌هایی به شمار می‌رود که ویروس‌های رایانه‌ای مختلفی برای تحقق آن‌ها طراحی شده است.

کسب سود، انتقال پیام‌های سیاسی، آزار شخصی، اثبات وجود باگ و آسیب‌پذیری در یک نرم‌افزار، خرابکاری و جلوگیری از تداوم روند ارائه خدمات یک سازمان از جمله اهداف متداولی است که سازندگان ویروس‌ها دنبال می‌کنند.

روش‌های رایج گسترش ویروس‌های رایانه‌ای

پیش از گسترش شبکه‌های رایانه‌ای، اغلب ویروس‌ها از طریق رسانه‌های جداشدنی نظیر فلاپی‌دیسک، اقدام به تکثیر و انتشار خود می‌کردند. ماکرو ویروس‌ها (که در قالب برنامه‌های ماکرو در اسناد نرم‌افزارهایی مثل Microsoft Word و Microsoft Excel خود را جاساز می‌کنند)، در کنار ویروس‌هایی که از طریق آلوده‌سازی فایل‌هایی که به ایمیل‌ها ضمیمه می‌شود گسترش پیدا می‌کنند و همچنین ویروس‌هایی که با دانلود نرم‌افزارهای غیرمجاز یا کرک شده از منابع نامعتبر روی یک سیستم فعال می‌شوند همگی نشانگر روش‌هایی هستند که به منظور تکثیر این نوع بدافزارها مورد استفاده قرار می‌گیرد.

اشکال زدایی Debugging

اشکال زدایی یا Debugging چیست؟

اشکال زدایی یا عیب زدایی (Debugging) در دانش تخصصی رایانه به فرایندی گفته می‌شود که طی آن باگ‌ها (یا عیوبی) که مانع از عملکرد صحیح یک نرم‌افزار رایانه‌ای یا سیستم می‌شوند را شناسایی کرده و درصدد برطرف کردن آن برمی‌آیند.

اشکال‌زدایی در واقع یکی از مراحل فرایند توسعه‌ی نرم‌افزار (Software Development) به شمار می‌رود و می‌تواند شامل برطرف کردن خطاهای ساده تا نظارت روی عملکرد سیستم، بررسی وضعیت مموری هنگام بروز یک خطا و … شود.

توسعه دهندگان به منظور یافتن و رفع آسانتر این اشکالات معمولا از ابزارهای نرم‌افزاری خاصی به نام اشکال زدا (Debugger) استفاده می‌کنند. نظارت روی نحوه اجرای برنامه، توقف و ادامه اجرای آن، ایجاد نقاط وقفه، پایش مقادیر متغیرها و حتی در بسیاری از موارد امکان تغییر مقدار آن‌ها حین اجرای برنامه و … از جمله قابلیت‌هایی است که در محیط‌های اشکال زدایی به کمک توسعه دهندگان نرم‌افزارها می‌آید. علاوه بر این اکثر زبان‌های برنامه‌نویسی سطح بالای امروزی، با فراهم آوردن ساختارهایی برای شناسایی حالات استثنایی، موجب ساده‌تر شدن فرایند اشکال‌زدایی و تشخیص نقاط اصلی در بروز رفتارهای نامناسب برنامه‌ها شده‌اند.

برای یافتن عیوب یک نرم افزار، علاوه بر روش تعاملی (Interactive Debugging) که با استفاده از اغلب Debugger ها قابل انجام است روش‌های رایج دیگری از جمله اشکال زدایی مبتنی بر دستورات Print (یا Print Debugging) نیز وجود دارد که با کمک مقادیر ثبت شده، توسعه دهنده را از سیر اجرای برنامه با خبر می‌سازد. اشکال زدایی از راه دور (یا Remote Debugging که در آن نرم‌افزاری که قرار است مورد اشکال‌زدایی واقع شود روی سیستمی غیر از سیستم اشکال زدا قرار دارد) و همچنین اشکال زدایی پس از وقوع مشکل (یا Post-mortem Debugging که از طریق روش‌های ردیابی و تحلیل وضعیت حافظه هنگام وقوع مشکل میسر می‌شود) از دیگر روش‌های دیباگینگ به شمار می‌روند. گفتنی است برای اشکال زدایی سخت‌افزارها نیز ابزارهای مخصوص و متنوعی طراحی شده است.

باگ Bug

باگ یا Bug چیست؟

باگ (Bug)، در دنیای رایانه به بروز خطا، اشتباه یا نقص در یک برنامه‌ی رایانه‌ای یا سیستم سخت افزاری مربوط می‌شود که منجر به بروز نتایج یا رفتاری از سیستم می‌شود که انتظار آن نمی‌رود.

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

باگ‌های نرم افزاری می‌توانند دارای انواع مختلفی نظیر منطقی، محاسباتی، ساختاری، کارایی و … باشند. برخی از باگ‌های منطقی نظیر مواردی که ناشی از اشتباهات تایپی در نام متغیرها و توابع می‌باشد به وسیله قواعدی که در زبان‌های برنامه نویسی امروزی حاکم است کاهش فراوانی داشته است. هم‌چنین روش‌های توسعه و مهندسی نرم افزار، امکانات متعدد درنظر گرفته شده در زبان‌های برنامه‌نویسی و ابزارهای تحلیل کد نیز می‌توانند به کاهش Bug ها کمک کنند. تست و اشکال‌زدایی نرم افزار نیز از جمله مهم‌ترین بخش‌های فرایند تولید یک نرم افزار به شمار می‌روند که می‌توانند در انتشار نرم افزارهای مناسب نقش مهمی را ایفا کنند.

اگر نرم افزاری دارای باگ‌های متعدد و یا بحرانی باشد آن نرم افزار را اصطلاحا buggy می‌نامند. ایجاد نرم‌افزارهای بدون باگ تقریبا کار بسیار دشواری است. به همین دلیل حتی بزرگ‌ترین شرکت‌های نرم‌افزاری مدتی پس از انتشار نسخه‌ای از نرم افزار خود ممکن است با ارائه‌ی بروزرسانی‌ها و نسخه‌های جدید یا انتشار پچ (نسخه تعمیری، Patch)، درصدد رفع باگ‌ها برآیند.