بدافزار
بدافزار (به انگلیسی: Malware)، برنامه‌های رایانه‌ای هستند؛ به علت آنکه معمولاً کاربر را آزار می‌دهند یا خسارتی بوجود می‌آورند، به این نام مشهورند. برخی از آنان فقط کاربر را می‌آزارند. مثلاً وی را مجبور به انجام کاری تکراری می‌کنند. اما برخی دیگر سیستم رایانه‌ای و داده‌های آن را هدف قرار می‌دهند که ممکن است خساراتی به بار آورند. در عین حال ممکن است هدف آن سخت‌افزار سیستم کاربر باشد.






یک نرم‌افزار برپایهٔ نیت سازنده آن به عنوان یک بدافزار شناخته می‌شود. در قانون گاه بدافزار را به عنوان یک آلودگی رایانه‌ای می‌نامند. دستاوردهای مقدماتی که توسط سیمنتک در سال ۲۰۰۸ منتشر شد، بیان می‌کند که میزان کدهای آزاردهنده و دیگر برنامه‌های ناخواسته از شمار نرم‌افزارهای قانونی، ممکن است افزون باشد. همچنین گفته شده‌است: «که تعداد بدافزارهای تولید شده در سال ۲۰۰۷ به اندازه مجموع ۲۰ سال قبل بوده‌است.» مهمترین پل ارتباطی بدافزارها از تولیدکنندگان آنها به کاربران از طریق اینترنت است.
در ۲۹ مارس سال ۲۰۱۰ شرکت سیمنتک شهر شائوژینگ چین را به عنوان پایتخت بدافزار در دنیا معرفی کرد.

مایکروسافت در می ۲۰۱۱ گزارش داد که از هر ۱۴ دانلود در اینترنت یکی شامل بدافزار است. به ویژه شبکه‌های اجتماعی و فیس بوک در حال مشاهده افزایش تاکتیک‌های جدید برای ضربه زدن به رایانه‌ها هستند.

بدافزار با یک نرم‌افزار معیوب یعنی نرم‌افزاری قانونی ولی شامل اشکالات مضر، تفاوت دارد. گاه بدافزار به صورت یک نرم‌افزار سالم و صحیح طراحی می‌شود و حتی ممکن است از یک سایت رسمی بیاید. بنابراین برخی از برنامه‌های امنیتی مانند مکافی ممکن است بدافزار را یک برنامهٔ «به طور بالقوه ناخواسته (به انگلیسی: Potentially Unwanted Programs)» بنامد. اگرچه یک ویروس رایانه‌ای نیز بدافزاری است که خود را باز تولید می‌کند، اما غلب به اشتباه به همهٔ بدافزارها ویروس اطلاق می‌شود.

از انواع بدافزارها می‌توان به ویروس‌ها، کرم‌ها، اسب‌های تروآ، جاسوس‌افزارها، آگهی‌افزارها، روت‌کیت‌ها و هرزنامه‌ها اشاره کرد.






مقاصد

بسیاری از برنامه‌های آلوده کنندهٔ اولیه، از جمله اولین کرم اینترنتی و تعدادی از ویروس‌های سیستم عامل داس (به انگلیسی: DOS)، به قصد آزمایش یا سرگرمی نوشته شدند. آن‌ها عموماً به مقاصد بی‌ضرر یا فقط به قصد آزار بودند، تا اینکه بخواهند خسارات جدی به سیستم‌های رایانه وارد کنند. در برخی موارد سازنده نمی‌توانست تشخیص دهد که چقدر کارش می‌تواند مضر باشد.

برنامه‌نویسان جوان وقتی دربارهٔ ویروس‌ها و ترفندهایش می‌آموختند، تنها به منظور تمرین یا به این قصد که ببینند چقدر شیوع پیدا می‌کند، آنها را می‌نوشتند. در سال ۱۹۹۹ ویروس‌های شایعی مانند ویروس ملیسا (به انگلیسی: Melissa) و ویروس دیوید (به انگلیسی: David) تنها به قصد سرگرمی نوشته شده بودند. اولین ویروس تلفن همراه در سال ۲۰۰۴ با نام ویروس کابیر (به انگلیسی: Cabir) بر روی تلفن‌های همراه منتشر شد.

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

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






بدافزارهای مسری: ویروس‌ها و کرم‌ها

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

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






مخفی کارها: اسبهای تروآ، روتکیتها و بکدُورها
اسبهای تروآ: (به انگلیسی: Trojan horses)

یک برنامه خرابکار برای اینکه بتواند به اهدافش برسد باید قادر باشد که اجرا شود بدون آنکه توسط کاربر یا مدیر سیستم رایانه خاموش یا پاکسازی شود. مخفی کاری همچنین این امکان را می‌دهد که بدافزار در اولین مکان نصب شود. وقتی یک برنامه خرابکار خود را به شکل چیز بی ضرر یا مطلوب در می‌آورد، کاربران ممکن است تشویق شوند تا آن را بدون آنکه بدانند چه می‌کند، نصب کنند. این، ترفندِ اسب تروآ است.

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

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

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






رد گم کن:(به انگلیسی: Rootkits)

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






بکدُرها:(به انگلیسی: Backdoors)

یک بکدُر روشی است برای خنثی سازی رویه‌های معمول تایید اعتبار. وقتی یک سیستم دارای چنین رویه‌هایی باشد یک یا چند بکدُر ممکن است نصب شوند تا دسترسی‌های آتی را آسان تر سازد. بکدُرها ممکن است حتی پیش از یک نرم‌افزار خرابکار نصب شوند تا به مهاجمان اجازهٔ ورود دهند.






دیگر بدافزارها
جاسوس‌افزارها

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

جاسوس‌افزارها هر گونه اطلاعاتی را می‌توانند جمع‌آوری کنند. این اطلاعات می‌تواند اطلاعات شخصی یک کاربر مانند گشت و گذارهای وی بر روی اینترنت و یا مشخصات حساب‌های مختلف وی مانند رمز عبور پست الکترونیکی و... باشد. علاوه بر این، جاسوس‌افزارهای می‌توانند در کنترل رایانه توسط کاربر اختلال ایجاد کنند. به عنوان مثال، جاسوس‌افزارهای می‌توانند کاربر را به بازدید از یک صفحهٔ خاص اینترنتی مجبور کنند و یا اینکه با تغییر تنظیمات رایانهٔ وی، باعث کاهش سرعت اینترنت و دسترسی غیرمجاز به رایانهٔ وی شوند. وباید توجه داشت که نرم‌افزارِDjyjji.3درست راه‌اندازی شود.






آگهی‌افزار

آگهی‌افزار یا برنامه‌های تبلیغاتی (Adware): اینگونه برنامه‌ها همانند جاسوس‌افزارها دارای اثر تخریبی نمی‌باشند و وظیفه آنها بازکردن صفحات خاص اینترنتی جهت اهداف تجاری و تبلیغی است.






جک‌ها

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






کلک

کلک (Hoax): این برنامه‌ها با سوء استفاده از کم بودن اطلاعات تخصصی کاربران، آنها را فریب داده و با دستورات و توصیه‌های اشتباه باعث می‌شوند که کاربر شخصاً کاری تخریبی بر روی سیستم خود انجام دهد. به عنوان مثال وانمود می‌کنند که فایلی خاص در مسیر سیستم‌عامل یک برنامه خطرناک است و باید توسط کاربر حذف شود. غافل از اینکه این فایل سیستمی بوده و برای عملکرد درست سیستم‌عامل، وجود آن لازم است.






شماره‌گیرها

شماره‌گیر (Dialer): اینگونه برنامه‌ها وظیفه‌شان ارتباط دادن کاربر از طریق خط تلفن به سرورهایی در دیگر کشورها برای دسترسی مستقیم به اطلاعات آنها می‌باشد. این سرورها معمولاً مربوط به سایت‌های غیراخلاقی بوده و برقراری ارتباط با آنها از طریق خط تلفن باعث هزینه بسیار زیاد مالی می‌گردد.






بارگیرها

بارگیر (Downloader): کار اینگونه برنامه‌ها Download کردن بد افزارها و اجرای آنها است






کلیک‌کننده‌ها

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






درهای پشتی

درهای پشتی (Backdoors) ابزاری برای نفوذگرها هستند که به وسیله آنها می‌توانند سیستم‌های دیگر را در کنترل خود درآورند. درهای پشتی درون شبکه، پورت‌های TCP یا UDP را باز می‌کنند و شروع به گوش کردن نموده تا دستورات نفوذگرها را اجرا کنند. درهای پشتی از جهت نداشتن قابلیت تکثیر شبیه ترویاها هستند.






گذرواژه‌دزدها

گذرواژه‌دزد (Password-Stealer): اینگونه برنامه‌ها که نوعی ترویا هستند کارشان دزدی پسورد از روی سیستم‌ها و ارسال آنها برای نفوذگرها است.






بهره‌کش‌ها

بهره‌کش‌ها (Exploits) کدهای مخربی هستند که با استفاده از آسیب پذیری‌های یک سیستم امکان دسترسی از راه دور به آن سیستم را فراهم می‌کنند.






کی‌لاگر

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






برنامه‌های ضد بدافزار

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

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

۲-برنامه‌های ضد بدافزار می‌توانند تنها به منظور تشخیص و پاکسازی بدافزارهایی که قبلاً روی یک رایانه نصب شده‌اند، مورد استفاده قرار گیرند. این نوع از محافظت در برابر بدافزار عمدتاً ساده تر و محبوب تر است. این نوع از ضد بدافزارها محتوای رجیستری ویندوز، فایل‌های اجرایی سیستم و برنامه‌های نصب شده روی یک رایانه را اسکن می‌کنند و لیستی از تهدیدهای پیدا شده را تهیه می‌کنند، که به کاربر اجازه می‌دهد که چه فایل‌هایی را حذف یا نگاه دارد.





ضد ویروس (رایانه)

نرم‌افزار ضدویروس (به انگلیسی: Anti-Virus) که با نام‌های ویروس‌یاب و ویروس‌کش هم شناخته می‌شود، نرم‌افزاری است که با مشاهده و بررسی محتوای پرونده‌ها به دنبال الگوهای آشنای ویروس‌ها یا کرم‌های اینترنتی می‌گردند. در صورت مشاهده این الگوها که به آن امضای ویروس (Virus Signature) گفته می‌شود، از ورود آن به کامپیوتر شما و اجرا شدن‌اش جلوگیری می‌کنند و یا به شما هشدار لازم را می‌دهند و از شما دستور می‌گیرند که آیا فایل را حذف کنند و یا سعی نمایند آن را اصلاح و پاکسازی کنند.

نرم‌افزار آنتی‌ویروس سه وظیفه‌ی عمده را انجام می‌دهند: ١. بازرسی یا کشف،٢. تعیین هویت یا شناسایی، و ٣. آلودگی‌زدایی یا پاکسازی

شرکت‌های سازنده نرم‌افزارهای ضدویروس، با ساخته شدن ویروس‌های جدید، الگوهای نرم‌افزاری آنها را کشف و جمع آوری می‌کنند و به همین علت اغلب لازم است تا این نرم‌افزارها هر از چندگاهی به‌روزرسانی (Update) شوند تا الگوهای جدید ویروسها را دریافت کنند.

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

بسیاری از اوقات هنگامی که شما آنها را شناسایی می‌کنید و از بین می‌برید، خبر ندارید که ویروس برای ورود مجدد و فعال شدن در کامپیوتر شما قبلاً چارهٔ لازم را اندیشیده است و راه‌های دیگری (Backdoors) برای حمله مجدد به رایانه یا شبکه رایانه‌ای شما ایجاد کرده است.






ویروس‌ها چگونه وارد رایانه شما می‌شوند

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

فراموش نکنید که شما همواره مراقب منزل خود هستید و دقت می‌کنید که در منزل و پنجره‌ها هنگام شب یا هنگامی که در منزل نیستید، باز نباشند. به همین ترتیب باید همواره وضعیت قسمت‌های مختلف کامپیوتر خود را کنترل کنید. اینکه اندازه فایلهای شما عادی باشد یا نه، اینکه مثلاً" فایل جدیدی به کامپیوتر شما اضافه نشده باشد و بسیاری موارد دیگر که بتدریج می‌توانید آنها را یاد بگیرید. اما یک نرم‌افزار ضدویروس بسادگی می‌تواند هر موقع که شما اراده کنید تمام سیستم شما را کنترل کند و شما را از عدم وجود ویروس در کامپیوتر مطمئن سازد.






ویژگی‌های یک نرم‌افزار ضدویروس مناسب

همانطور که برای هر محصولی (چه نرم‌افزاری و چه سخت‌افزاری) آزمون‌هایی وجود دارد که کیفیت و شایستگی آن را تعیین می‌کند، چنین سنجش‌هایی برای یک نرم‌افزار ضد ویروس هم وجود دارد. یکی از آزمون‌ها با نام آزمون DURCH شناخته می‌شود که نام آن سرواژه‌ای است که از حروف ابتدایی بخش‌های پنچگانهء این آزمون تشکیل شده‌اند. بنابر آزمون DURCH یک نرم‌افزار ضدویروس مناسب باید بتواند به نیازهای زیر پاسخ دهد :

آزمون درخواست (Demand): باید بتواند هنگامی که می‌خواهید به یک پرونده یا صفحهٔ اینترنتی یا یک رایانامه دسترسی یابید، آن را بررسی کند.
آزمون به‌روزرسانی (Update): به این معنی که نرم‌افزار باید بتواند در بازه‌های زمانی مشخص بانک اطلاعاتی خود که شامل امضای ویروس‌ها است را بروز کند.
آزمون واکنش (Respond): اینکه نرم‌افزار بتواند تمامی رفتارهای منطقی در برخورد با یک ویروس را از خود نشان دهد. پرونده‌ٔ آلوده را دوباره‌سازی و تمیز کند و یا آن را حذف نماید.
آزمون وارسی (Check): باید بتواند تمام فایلها از نوع مختلف که می‌توانند محلی برای پنهان شدن ویروس باشند را کنترل کند.
آزمون اکتشاف (Heuristics): به این معنی که نرم‌افزار باید با وجود نداشتن الگوی همهٔ ویروسها، بتواند خطر و احتمال وجود ویروس را تشخیص دهد. این رفتار نیازمند هوشمندی نسبی نرم‌افزار و استفادهٔ آن از روش‌های اکتشافی است.







ابزارهای مشابه

بعضی از سایر نرم‌افزارها نیز عملکردی مشابه نرم‌افزارهای ضد ویروس دارند. به طور مثال، یک نرم‌افزار می تواند با کنترل و تحلیل محتویات تمامی دیسک های یو اس بی که به رایانه متصل می شوند، با ویروس های خود اجرا شونده (Autorun) مقابله کند. این ابزارها معمولاً دارای بانک اطلاعاتی از امضای ویروس ها نبوده و نیازمند به روزرسانی نیستند. از این رو، به آن ها ضد ویروس برون خط (Offline anti-virus) نیز اطلاق می گردد.





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






تعریف

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






تاریخچه

واژه جاسوس افزار برای اولین بار در ۱۶ اکتبر سال ۱۹۹۵ در متنی درمورد مدل تجارتی ماکروسافت استفاده شد. در سال ۲۰۰۰ آقای گریگور فرند در توصیف دیوار آتش شخصی خود به نام زون آلارم از واژه جاسوس افزار استفاده کرد. اما استفاده رسمی از این کلمه بعد از سال ۲۰۰۱ بود زمانی که آقای استیو گیبسون رئیس مرکز تحقیقات گیبسون متوجه نصب یک نرم‌افزار تبلیغاتی روی سیستم کامپیوتری خود شد که اطلاعات شخصی او را برای فرد دیگری ارسال می‌کرد. به همین دلیل وی یک برنامه ضدجاسوسی طراحی کرد و آن را اوپت اوت نامید.






انواع

در یک تقسیم بندی کلی نرم‌افزارهای جاسوسی را می‌توان به دو دسته تقسیم کرد: ۳-۱- نرم‌افزارهای جاسوسی خانگی نرم‌افزاری که معمولاً توسط صاحبان کامپیوترها به منظورآگاهی یافتن از تاثیرات اینترنت بر شبکه‌های کامپیوتری خودشان خریداری و نصب می‌گردد. مدیران از این نرم‌افزار برای آگاهی از فعالیت‌های کارمندان استفاده می‌کنند. بعضی افراد هم برای اطلاع از فعالیت‌های سایر اعضای خانواده این روش را به کار می‌برند. مانند مشاهده محتویات اتاق‌های گفتگو توسط والدینی که فرزندانشان در آنها شرکت می‌کنند. همچنین این نوع جاسوس افزار می‌تواند توسط یک شخص ثالث بدون آگاهی صاحب کامپیوترروی سیستم وی نصب شود و اطلاعات شخصی وی را جمع آوری کند. ۳-۲- نرم‌افزارهای جاسوسی تجاری نرم‌افزاری است که شرکت‌ها برای تعقیب فعالیت‌های کاربران در اینترنت استفاده می‌کنند. این شرکت‌ها که وظیفه نصب جاسوس افزار روی سیستم‌های کامپیوتری را دارند اغلب اطلاعات حاصل را به بازاریابان می‌فروشند و آنها کاربر را با تبلیغات خاص که با علائق وی مطابقت دارد و برایش جذاب است مورد هدف قرارمی دهند.






راه‌های نفوذ

پنجره‌های پاپ آپ :

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







نرم‌افزارهای ضد جاسوس افزار:

بعضی نرم‌افزارهای ضدجاسوسی به جای از بین بردن جاسوس افزار آن را روی سیستم نصب می‌کنند. از برنامه‌های مطمئن و معروف برای بالا بردن امنیت سیستم خود استفاده کنید.







برنامه‌های رایگان اینترنتی:

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







سی دی‌ها و فلش‌ها:

حافظه‌های جانبی قابل حمل مانند سی دی و فلش به این علت که بین سیستم‌های زیادی جا به جا می‌شوند حاوی برنامه‌های مخرب هستند. ۴-۵- سوء استفاده از ضعف امنیتی اینترنت اکسپلورر بعضی از طراحان برنامه‌های مخرب که با ضعف‌های امنیتی اینترنت اکسپلورر آشنا باشند می‌توانند در کد صفحه وب خود دستورهایی قرار دهند که به هنگام بازکردن آن صفحه با اینترنت اکسپلورر جاسوس افزار روی کامپیوتر نصب شود







ویروس‌ها:

برخی ویروس‌ها حاوی کدهایی برای نصب جاسوس افزارهستند. == تمامی نشانه های یک جاسوس افزار

تشخیص آلوده بودن یک کامپیوتر به جاسوس افزار کار سختی نیست. سیستم آلوده نشانه‌های ساده‌ای دارد از جمله: ۵-۱- تغییر ناگهانی صفحه خانگی مرورگر بعضی از جاسوس افزارها که برای اهداف تبلیغاتی طراحی می‌شوند بدون اجازه کاربر صفحه خانگی مرورگر اینترنتی را تغییر می‌دهند. بسیاری از افرادی که سیستم آنها آلوده شده به طور مکرر صفحه خانگی مرورگر را مطابق میل خود تنظیم نموده و با تغییر دوباره آن مواجه می‌شوند. ۵-۲- ایجاد نوار ابزارهای جدید از نشانه‌های دیگر وجود جاسوس افزار ظاهر شدن نوار ابزارهای جدید بدون خواست کاربر در پنجره مرورگر است.







ظاهر شدن مداوم پنجره‌های پاپ آپ :

اگر فرد به صورت مکرر و مداوم با پنجره‌های پاپ آپ مواجه شود امکان وجود جاسوس افزار در سیستم کامپیوتری وی زیاد است.







تغییر آدرس توسط مرورگر:

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







ایجاد آیکون‌های جدید روی صفحه نمایش:

وجود آیکون‌های جدید و ناشناخته روی صفحه نمایش بدون خواست کاربر از نشانه‌های وجود جاسوس افزار است. عدم کارایی بعضی کلیدهای صفحه کلید: جاسوس افزارها کارایی کلیدهای صفحه کلید را تغییر می‌دهند به طوری که برای مثال کلید تب در پنجره مرورگر به جای جا به جایی روی پیوندها کار دیگری انجام دهد.







عملکرد کند کامپیوتر:

از آنجایی که جاسوس افزار یک برنامه‌است برای اجرا شدن به حافظه و پردازنده نیاز دارد و سرعت کامپیوتر را کاهش می‌دهد.







خاموش شدن دیوار آتش و ضدویروس:

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






مشکلات

سرقت اطلاعات شخصی:

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







تاثیر منفی روی عملکرد کاربر:

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







کاهش کارایی سیستم:

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







استفاده از پهنای باند:

جاسوس افزار برای ارسال اطلاعات نیاز به برقراری ارتباط از طریق اینترنت دارد و باید از پهنای باند استفاده کند.





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






تعریف صنعتی

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






تعریف رایانه

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






فهرست سخت‌افزارها

بُردِ مادر یا برد اصلی (مادربورد)
نمایشگر (مانیتور)
جعبه رایانه (کیس)
صفحه‌کلید (کیبورد)
موشواره (ماوس)
چاپگر (پرینتِر)
پویشگر (اسکنر)
واحد پردازش مرکزی (سی‌پی‌یو یا پردازنده)
فلاپی‌دیسک
دیسک سخت
مودم
دیسک‌گردان نوری (درایو نوری) (CD و DVD)
بلندگو
یو اس‌ بی
کارت صدا
کارت گرافیک
قلم نوری
هدفون (دوگوشی)
کارت تلویزیون و رادیو
دوربین (وب‌کم)
میکروفون
هدست
10:25 pm
برنامه‌نویسی

برنامه‌نویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرم‌افزار یا برنامهٔ رایانه‌ای گفته شود. با این همه برنامه‌نویسی تنها بخشی از فرایند توسعهٔ نرم‌افزار یا برنامه رایانه‌ای است. اهمیت، توجه و منابع اختصاص داده شده به برنامه‌نویسی، بسته به ویژگی‌های مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شده مهندسی نرم‌افزار متغیر است.

برنامه‌نویسی کامپیوتر (که اغلب در انگلیسی programming یا coding گفته می‌شود) فرایند نوشتن، اشکال زدایی(debug) و نگهداری کد منبع (source code) برنامه کامپیوتر می‌باشد. این کد منبع با یک زبان برنامه نویسی نوشته شده است. این کد منبع ممکن است تغییر داده شده یک کد قبلی و یا یک کد کاملاً جدید باشد. هدف برنامه نویسی ساختن یک برنامه می‌باشد که یک رفتار خواسته شده را به نمایش بگذارد.






تاریخچه
موضوع دستگاه‌هایی که به دنباله‌ای از دستورالعمل‌های از قبل تعریف شده عمل می‌کند بر می‌گردد به Greek Mythology.

برنامه نویسی مدرن
اندازه گیری کاربرد زبان

تعیین اینکه محبوب‌ترین زبان برنامه نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبان‌ها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده می‌شود. روش‌های اندازه گیری محبوبیت زبان شامل موارد زیر می‌باشد: شمردن تعداد آگهی‌های اشتغال و توجه به یک زبان، تعداد کتاب‌های آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان


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



برنامه‌نویسی دستوری

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

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





زبان برنامه‌نویسی

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

نسل اول زبان ماشین - زبان صفرو یک
نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاوره‌های انسانی
نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط

برنامه نویس

یک زبان برنامه نویسی یک زبان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده‌است.زبان‌های برنامه نویسی برای ایجاد برنامه‌هایی به کار می‌روند که رفتار یک ماشین را مشخص می‌کنند، الگوریتم دقیق را بیان می‌کنند، و یا روشی برای ارتباط انسانند. بسیاری از زبان‌های برنامه نویسی تعدادی قالب از ویژگی‌های نوشته شده دستوری(syntax) و معناشناسی (semantics) دارند، چرا که رایانه‌ها دستورات دقیقاً مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده‌اند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی می‌باشند.(مانند Perl) اولین زبان برنامه نویسی به قبل از اختراع رایانه باز می‌گردد، و برای هدایت رفتار ماشین‌هایی مانند دستگاه‌های نساجی اتوماتیک و نوازنده‌های پیانو به کار می‌رفت. هزاران زبان برنامه نویسی خلق شده‌اند، بیشتر در زمینهٔ رایانه، زمینه‌ای که هر ساله بسیاری دیگر ایجاد می‌شوند.


تقسیم‌بندی
زبان‌های برنامه نویسی را می‌توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد: الف)روش‌های برنامه نویسی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه نویسی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)



تعاریف

ویژگی‌هایی که غالباً برای تشکیل یک زبان برنامه نویسی مهم شمرده می‌شوند:

تابع :یک زبان برنامه نویسی، زبانی است که برای نوشتن برنامه‌های رایانه‌ای به کار می‌رود که رایانه‌ای را برای انجام محاسبات یا اجرای الگوریتم و یا احتمالاً کنترل دستگاه‌های خارجی مثل چاپگر، ربات و... درگیر می‌کنند.





هدف: زبان‌های برنامه نویسی با زبان‌های طبیعی تفاوت دارند و آن اینکه زبان‌های طبیعی فقط برای فعل و انفعالات بین مردم به کار می‌روند، در حالیکه زبان‌های برنامه نویسی همچنین به انسانها اجازه می‌دهد که از طریق دستورات با ماشین‌ها ارتباط برقرار کنند. برخی زبان‌های برنامه نویسی بوسیله یک دستگاه استفاده می‌شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه‌های پست اسکریپت(post script) غالباً توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد می‌شوند.
ساختارها: زبان‌های برنامه نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
توان بیانگر: نظریه محاسبات، زبان‌ها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی می‌کند. تمام زبان‌های "کامل تورینگ" می‌توانند مجموعه یکسانی از الگوریتم‌ها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثال‌هایی هستند از زبان‌هایی که کامل تورینگ نیستند، ولی غالباً زبان برنامه نویسی نامیده می‌شوند.

برخی مولفین اصطلاح" زبان برنامه نویسی" را محدود به آنهایی می‌کنند که می‌توانند تمام الگوریتم‌های ممکن را پیاده سازی کنند، گاهی اوقات اصطلاح" زبان رایانه" برای زبان‌های برنامه نویسی محدودتر به کار می‌رود. زبان‌های غیر محاسباتی، مانند زبان‌های مارک آپ(markup) HTML یا گرامرهای قراردادی مثل BNF، معمولاً زبان برنامه نویسی محسوب نمی‌شوند. یک زبان برنامه نویسی(که می‌تواند کامل تورینگ نباشد) ممکن است در این زبان‌های غیر محاسباتی (میزبان) تعبیه شوند.


کاربرد

زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف داده‌ها، و عملیات یا تبدیل‌هایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم می‌کند. یک برنامه نویس از انتزاعات آماده در زبان استفاده می‌کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده‌ترین عناصر موجود بیان می‌شوند(مفاهیم ابتدایی نامیده می‌شوند). زبان‌های برنامه نویسی با غالب زبان‌های انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبان‌های طبیعی برای ارتباط با دیگر انسان‌ها، نویسندگان و گویندگان می‌توانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانه‌ها "دقیقاً آنچه که به آنها گفته شده را انجام می‌دهند." و نمی‌توانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بوده‌است] البته امروزه برنامه‌هایی برای انجام این کار تولید شده‌اند و تلاش‌های بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص می‌کند. برنامه‌های یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامه‌ها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامه‌ای استفاده می‌شود، زبان اسکریپت می‌گویند. بسیاری از زبان‌ها کنار گذاشته شده‌اند، برای رفع نیازهای جدید جایگزین شده‌اند، با برنامه‌های دیگر ترکیب شده‌اند و در نهایت استعمال آنها متوقف شده‌است. با وجود اینکه تلاش‌هایی برای طراحی یک زبان رایانه" کامل" شده‌است که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبان‌های رایانه‌ای گسترده از گستردگی زمینه‌هایی که زبان‌ها استفاده می‌شوند، ناشی می‌شود:

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

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.




معناشناسی ایستا
معناشناسی ایستا محدودیت‌هایی بر روی ساختار مجاز متن‌ها تعیین می‌کند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیت‌ها به وسیله سیستم نوع گذاری انجام می‌شود.


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

یک زبان نوع گذاری شده‌است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته‌است. در غالب زبان‌های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان‌های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوعند. این زبان‌ها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم.

در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی می‌شوند(چک کردن یا رد کردن تمام عملیات‌ها)، غالب زبان‌های امروزی درجه‌ای از نوع گذاری را فراهم می‌کنند. بسیاری از زبان‌های تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم می‌کنند.



نوع گذاری قوی و ضعیف

نوع گذاری ضعیف این امکان را ایجاد می‌کند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته‌ای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان می‌کنند.

قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می‌برند و منظورشان قوی، ایستایی نوع گذاری شده‌است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده‌است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می‌شود.



معناشناسی اجرا

وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیات‌ها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین می‌کند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.

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


کتابخانه هسته
اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.


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



خصوصیات

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

تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.


پیاده سازی

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

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

برنامه‌هایی که مستقیماً روی سخت‌افزار اجرا می‌شوند چندین برابر سریعتر از برنامه‌هایی که با کمک نرم‌افزار اجرا می‌شوند، انجام می‌شوند.

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



تاریخچه
پیشرفت‌های اولیه

اولین زبان برنامه نویسی به قبل از رایانه‌های مدرن باز می‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، پانچ کارت‌ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.



پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملاً شئ گرا معرفی شد.

C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

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

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.




یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالباً با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
ساعت : 10:25 pm | نویسنده : admin | کاکاپو | مطلب قبلی
کاکاپو | next page | next page