آخرین اخبار و مقالات و مطالب پیرامون اسمبلی در ایران آی سی تی نیوز ، پایگاه فناوری اطلاعات و ارتباطات ایران

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

سیستم مدیریت محتوا

پارس

سی ام اس

نصب شده است که نرم افزاری قوی جهت

طراحی سایت

می باشد.

طراحی وب

با استفاده از

پرتال

(

پورتال

) پارس منجر به

طراحی وب سایت

شما می شود.

طراحی وب سایت

کپی رایت

پورتال

پارس

برنامه نویسی به سبک پترس

یکی از مشکلات امنیتی که در بعضی از نرم افزارها مشاهده می شود، سرریزی بافر یا buffer overflow است. سرریزی بافر عموما در زمان اجرا و بسته به ورودی های مختلف برنامه رخ می دهد و حتی می تواند به هکرها کمک کند تا برنامه را تغییر داده و کدهای مخرب در آن وارد کنند. در این مقاله قصد داریم این موضوع را بررسی کنیم و ببینیم سرریزی بافر چیست و چه زمانی اتفاق می افتد.
بافر چیست؟ بافر، حافظه موقتی است که به صورت نرم افزاری و سخت افزاری پیاده سازی می شود، در روش سخت افزاری مثل بافر کیبورد، اطلاعات کلیدهایی که شما روی صفحه کلید فشار داده اید در جایی ذخیره می شود و سیستم عامل آنها را می خواند و پردازش می کند. بافر نرم افزاری به دو صورت قابل پیاده سازی است. 1 در سطح سیستم عامل: سیستم عامل مقداری از حافظه را جهت بافرکردن به خود اختصاص می دهد. این حافظه برای یکسان سازی سرعت دیسک سخت و پردازشگر استفاده می شود. 2 در سطح نرم افزار کاربردی: این حافظه را ما به عنوان برنامه نویس تعریف می کنیم تا امور مختلفی را انجام دهیم. قطعه کد زیر را در نظر بگیرید: void overflow_function (char *str){ char buffer[10]; strcpy(buffer, str); } int main(){ char big_string[14]; strcpy(big_string,"bufferoverflow"); overflow_function(big_string); return 0; } از لحاظ قواعد گرامری این قطعه کد درست است و باید بدون اشکال کار کند اما در زمان اجرا، خطای در حال اجرا صادر خواهد شد با این مضمون: stack around the variable ‘buffer’ was corrupted بسیار خب، این خطا به ما می گوید که متغیر بافر خراب شده است. بیایید ببینیم این کد دقیقا چه کار می کند: ابتدا یک متغیر از نوع رشته به طول 14کاراکتر تعریف کرده و مقدار bufferoverflow را با استفاده از دستور strcpy در آن کپی می کنیم. تا اینجا مشکل خاصی نیست و کد درست است. حال مقدار big_string به تابع overflow_function پاس داده می شود. این تابع سعی دارد مقدار big_string که به آن داده شده است را درbuffer کپی کند اما این عمل ناموفق می ماند و در نتیجه برنامه خطا می دهد. چرا خطا می دهد؟ این تابع می خواهد مقدار 14کاراکتر را در یک رشته 10کاراکتری کپی کند، طبیعی است که این کار را نمی تواند درست انجام دهد، برای همین خطا صادر می شود. کمی دقیق تر به مساله نگاه می کنیم: وقتی تابع overflow_function فراخوانی می شود آدرس برگشت به تابع فراخواننده در ثبات sp قرار می گیرد. سپس این تابع سعی می کند مقدار 14کاراکتر را در 10کاراکتر کپی کند و این عمل با موفقیت انجام می شود. فرض کنید بافر در 10خانه اول بعد از آدرس 100h قرار داد و ثبات sp مقدار خانه 10dh را به عنوان آدرس برگشتی تابع overflow_function در خود دارد. حال مقدار 14کاراکتر در متغیر بافر، کپی می شود و در نتیجه خانه های 100h تا 10eh بازنویسی می شوند و سپس کار تابع به پایان می رسد و سیستم عامل قصد دارد با استفاده از آدرس ذخیره شده در sp به فراخواننده تابع overflow_function بر گردد اما از آن جایی که آدرس 10dh بازنویسی شده است، پردازشگر نمی تواند دستوری را اجرا کند و خطای bufferoverflow صادر می شود. خب، هکرها با استفاده از همین خطا به سیستم های دیگران حمله می کنند. آنها یکسری دستورات به زبان اسمبلی می نویسند که در اصطلاح به آنها shellcode یا exploit گفته می شود. به مثال بالا برمی گردیم، فرض کنید به جای مقدار “bufferoverflow” یک شل کد به تابع overflow_function داده شود. وقتی کار تابع تمام شد، پردازشگر به آدرس 10dh می رود. مقدار این آدرس دیگر یک مقدار نامعتبر نیست بلکه به یک قطعه کد اشاره دارد و پردازشگر، آن قطعه کد را اجرا می کند و سبب می شود برنامه اصلی، کار خودش را درست انجام ندهد . این یک روش برای سوءاستفاده از سرریزی است. روش دیگر دسترسی به بخش های محرمانه حافظه است که اطلاعات اساسی سیستم در آن قرار دارد. هکر با تزریق کد خود به برنامه می تواند به بخش های محرمانه حافظه دسترسی پیدا کند و اطلاعات حیاتی سیستم را مورد سو ءاستفاده قرار دهد.
چگونه جلوی سرریزی را بگیریم؟ تنها کاری که لازم است انجام دهیم، بررسی مقادیر ورودی برنامه است تا دقیقا مطابق با اندازه متغیر داده ها درون آن ریخته شوند. به طور مثال؛ کد بالا را با تغییر کوچکی اصلاح می کنیم و از سرریزی بافر جلوگیری می کنیم. کد بازنویسی شده به صورت زیر خواهد بود: void overflow_function (char *str){ char buffer[10]; strncpy(buffer, str,10); } int main(){ char big_string[14]; strncpy(big_string,"bufferoverflow",14); overflow_function(big_string); return 0; }
امیربهاالدین سبط الشیخ


یک فن فراموش شده

... بعد از بارگزاری nunit یک پروژه جدید از نوعclass library ایجاد کرده و فایل اسمبلی nunit ...

منبع : جام جم آنلاین    تاریخ : 9   خرداد   1389   شاخه : برنامه نویسی   


نرم افزار proteus professional v7.6

... این ابزار قدرتمند قادر است خود را با زبان های برنامه نویسی اسمبلی هماهنگ کرده تا مدارات مجتمع را همراه با زبان برنامه نویسی و همچنین ریز پردازنده مورد آزمایش قرار داد ... 6- سازگاری با انواع زبان های اسمبلی- سازگاری کامل با انواع میکروکنترولر ها- شناسایی و به روز رسانی آخرین قطعات و مدارات روز دنیا- هماهنگی کامل نرم افزار برای آزمایش کدهای نوشته شده در زبان اسمبلی - وجود بیش از 8000 قطعه الکترونیکی در نرم افزار- استفاده آسان از نرم افزار - امکان پرینت مدارات- قابلیت ذخیره سازی به صورت عکس- خطایاب بسیار کامل نرم افزار- سازگار با بیشتر کامپایلر ها و اسمبلرها ...

منبع : بازیاب    تاریخ : 2   دی   1388   شاخه : نرم افزار   


چگونه از برنامه خود در برابر هکرها محافظت کنیم؟

... – در صورت استفاده از زبان های ناامن چون c ، c++ ، کوبول و اسمبلی، قبل از کپی اطلاعات در پشته مقصد، از فضای کافی آن مطمئن شوید ...

منبع : بازیاب    تاریخ : 3   مهر   1388   شاخه : امنیت   


ماجرای ویروس هائی که رنگ عوض می کنند

... یکی از نمونه های مشهور و جدید این ویروس ها w32/simile نام دارد که حاوی بیش از 14 هزار خط کد زبان برنامه نویسی اسمبلی است و 90 درصد این کدها مربوط به کد metamorphic آن است ...



پیتر نورتون peter norton

... به عقیده پیتر نورتون، برنامه نویسی به زبان اسمبلی یکی از ضایعات غیرمعقول استعداد بشر است و هر زمان که ممکن است، باید از آن اجتناب شود ...

منبع : جام جم آنلاین    تاریخ : 18   مرداد   1388   شاخه : اشخاص   


بدترین سیستم عامل های تمام دوران

... منظور، نسخه اولیه آن است که فرد بروکس2، مدیر پروژه آن اذعان داشته بود که برنامه های کنترلی اش مشکل دارد، حافظه بیشتری از آن چه فکر می کردند مصرف می کند و بسیار کند است! اواخر دهه 60، its سیستم اشتراک زمانی غیرهمخوان3، به زبان های اسمبلی 6dec pdp- و 10pdp- نوشته شد و از فقط از فایل های با نام شش حرفی داخل یک دایرکتوری پشتیبانی می کرد (بله، درست خواندید، هر فایل باید داخل دایرکتوری منحصربه فرد خودش قرار می گرفت ...

منبع : جام جم آنلاین    تاریخ : 6   اردیبهشت   1388   شاخه : نرم افزار   


d چیست؟

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

منبع : جام جم آنلاین    تاریخ : 30   فروردین   1388   شاخه : برنامه نویسی   


sensor

... high-level language زبان های برنامه نویسی پیشرفته تر نسبت به زبان های اسمبلی و ماشین، که محدود به استفاده بر روی یک کامپیوتر یا صرفا برای یک وظیفه مشخص طراحی نشده اند ...

منبع : جام جم آنلاین    تاریخ : 6   بهمن   1387   شاخه : سخت افزار   


معماری مجموعه دستورات پردازنده

... همچنین میزان تولید برنامه ها به زبان اسمبلی، در غیاب زبان های سطح بالایی چون فورترن1 و یا الگول2 مفید بود ...

منبع : جام جم آنلاین    تاریخ : 29   دی   1387   شاخه : سخت افزار   

صفحه 1
2 3 4


طراحی وب سایت

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player