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

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

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

پارس

سی ام اس

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

طراحی سایت

می باشد.

طراحی وب

با استفاده از

پرتال

(

پورتال

) پارس منجر به

طراحی وب سایت

شما می شود.

طراحی وب سایت

کپی رایت

پورتال

پارس

حفظ امنیت کدهای نوشته شده به زبان جاوا

با وجود کارایی زیاد و انعطاف پذیری بالای زبان برنامه نویسی جاوا، این ابزار قدرتمند و رو به توسعه هنوز نتوانسته جایگاه مناسبی برای پیاده سازی پروژه های تجاری در مقایسه با سایر framework های موجود بیابد. از جمله دلایل اصلی عدم استفاده از جاوا در بیشتر پروژه های بزرگ تجاری، می توان به مشکل بازگشت پذیری یا decompile شدن کدهای نوشته شده، با این زبان برنامه نویسی اشاره کرد که این خود به تنهایی یک معضل بزرگ امنیتی در مسیر توسعه نرم افزارهای تجاری با استفاده از این ابزار به شمار می آید.
برنامه های نوشته شده در جاوا به دلیل استفاده از واسط زمان اجرای java runtime environment یا به طور اختصار jre برای مهیا کردن بستری مناسب برای جلوگیری از کامپایل مجدد کد منبع و همچنین حفظ قابلیت جابه جایی و استفاده در پلتفرم های مختلف، پس از کامپایل به جای تبدیل شدن به زبان ماشین یا همان «صفر» و «یک» به قالب خاصی از داده ها به نام byte code تبدیل می شود که این خروجی همان قالب قابل فهم و اجرا برای jre است.
همین موضوع باعث می شود کد برنامه های نوشته شده به زبان جاوا را با استفاده از متدهای مهندسی معکوس تا حدود زیادی بازیابی کرد. این مشکل به حدی جدی است که شرکت توسعه دهنده زبان جاوا یعنی سان میکروسیستمز، اقدام به ارائه ابزاری به نام obfuscator برای مبهم سازی کد منبع نوشته شده از طریق تزریق کدهای اضافی به زبان جاوا کرده تا پس از انجام عملیات دیکامپایل، کاربران نتوانند به راحتی قطعات مختلف کد حاصل را درک و تفسیر کنند.
اجرای این برنامه به گونه ای است که در بدنه توابع و کلاس ها در نتیجه نهایی و خروجی اصلی برنامه تغییری را در پی نخواهد داشت. البته استفاده از این متد که به صورت توکار (یا درون ساخت built-in) هم در کتابخانه های جاوا و هم توسط ide پیش فرض شرکت سان، یعنی netbeans نیز پشتیبانی می شود، نمی تواند تمام آنچه که برنامه نویسان برای ایجاد امنیت بیشتر به آن نیاز دارند را تامین کند. گذشته از این، استفاده از روش مذکور سبب افزایش حجم فایل اجرایی پس از کامپایل، کندی در بارگذاری و اجرای برنامه، سخت تر شدن انجام عملیات اشکال زدایی (دیباگ)، بالا بردن میزان استفاده از حافظه اصلی و تحمیل بار مضاعف بر دوش پردازنده به دلیل استفاده مکرر از حلقه های تکرار و تصمیم گیری می شود.
در این میان روشی کاملا ابتکاری توسط برخی برنامه نویسان برای هر چه بالاتر بردن ضریب امنیت در کدهای جاوا یا حتی دیگر زبان های برنامه نویسی که از یک قالب همسان با فریم ورک جاوا بهره می برند، ارائه شده است. این روش که به متد رمزگذاری (encryption) معروف است، هم اکنون به عنوان یکی از بهترین و موثرترین راه حل های مطرح شده برای حفاظت از کدهای جاوا شناخته می شود. تفاوت عمده این روش با دیگر متدها در این است که روش رمزگذاری از آغاز تا پایان باید توسط برنامه نویس و گروه توسعه دهنده پروژه پیاده سازی شود؛ برخلاف روش obfuscator که برای مبهم کردن کد منبع از الگوهای محدود و تکراری استفاده می کند.
شاید این موضوع در نگاه اول کمی دشوار به نظر برسد اما کارایی واقعی روش رمزگذاری به این موضوع وابسته است که منطق رمزنگاری در برنامه شما می تواند کاملا متفاوت با تصور دیگران یا به عبارت دیگر کاملا ابتکاری و شخصی باشد.
رفتار متد رمزگذاری
در این روش فرض بر این است که تمام یا تعدادی از کلاس های نوشته شده، به جز کلاس اصلی پروژه و کلاسی که قرار است عملیات کدبرداری دیگر کلاس ها را انجام دهد، با استفاده از یک برنامه واسط و یک کلید اصلی به مجموعه ای از کاراکترهای غیرقابل فهم و نامفهوم تبدیل شده است. سپس کلاس های کدشده در مسیر مناسب به پروژه افزوده می شوند.
کلاس اصلی پروژه باید بتواند با استفاده از توابعی که برای رمز گشایی کلاس های کدشده توسط برنامه نویس طراحی شده اند، کلاس های مذکور را در حافظه دیکد و بازسازی کند تا در محل و زمان مناسب فراخوانی و استفاده شوند. به این ترتیب حتی بعد از دیکامپایل شدن برنامه نیز کاربران با انبوهی از کلاس های رمزگذاری شده و کاراکترهای غیرقابل فهم روبه رو خواهند شد.
نحوه پیاده سازی
پیش از هر چیز باید گفت که بهترین حالت ممکن برای پیاده سازی روش رمزگذاری، زمانی است که تمام برنامه نویسی های مربوط به کلاس ها و متدهایشان به صورت کامل انجام شده و پروژه آماده کامپایل شدن نهایی باشد. همان طور که پیشتر نیز گفته شد، برای پیاده سازی این متد ما نیاز به یک برنامه واسط برای رمزنگاری کلاس های مورد نظرمان با استفاده از یک کلید اصلی و بر اساس الگویی که برنامه نویس مشخص کرده است داریم. برای نمونه، برنامه ساده ای بنویسید که تمام کاراکترهای یک فایل از نوع کلاس جاوا را به عنوان ورودی دریافت کرده و با یک مقدار به عنوان کلید اصلی xor کند. سپس باید کلاس یا تابع مستقلی برای کدبرداری کلاس های رمزگذاری شده با استفاده از همان کلید اصلی نوشته شود تا در هنگام اجرای برنامه بتوانیم با فراخوانی آن، کلاس های کد شده را در حافظه رمزگشایی و دوباره سازی کنیم و سرانجام برنامه بدون هیچ مشکلی بتواند اجرا شود. توجه داشته باشید که کلید اصلی به عنوان یک عنصر حیاتی برای حفظ امنیت و حتی ضامن اجرای صحیح برنامه، می تواند برای هر کلاس به صورت متفاوت تولید شود یا از مجموعه چند عملیات پیچیده ریاضی روی مقادیر گوناگون به دست آمده باشد، یا حتی روی یک قفل سخت افزاری ذخیره شود تا برنامه بدون وجود آن اصلا اجرا هم نشود.
برای پنهان ماندن الگوریتم کدبرداری کلاس ها نیز می توانید از فایل های کتابخانه ای پویا و استاندارد (برای ویندوز پسوند dll و برای گنولینوکس پسوند so) نوشته شده با زبان c استفاده کنید. البته در این حالت پیاده سازی الگوریتم رمزگشایی باید در همین کتابخانه ها انجام شود و همین طور برای حفظ قابلیت اجرا و انتقال روی سایر پلتفرم ها نیز باید کتابخانه های مورد نیاز و قابل استفاده روی سایر پلتفرم ها را هم ایجاد کرده و همراه با دیگر منابع به پروژه بیفزایید تا بتوانید با توجه به نوع سیستم عامل، فایل کتابخانه مورد نظر را بارگذاری کرده و توابع مورد نیاز برای رمزگشایی را از داخل این فایل ها فراخوانی کنید.
نتیجه گیری
روش یا متد رمزگذاری راه حل مناسبی برای حفظ امنیت کد برنامه های نوشته شده به زبان جاواست که بر خلاف دیگر روش های معمول در روند عادی اجرای برنامه خللی وارد نمی کند و در صورتی که به درستی پیاده سازی شود حتی می توان با اتکا به آن از فریم ورک جاوا، بدون ترس از دیکامپایل شدن برنامه در پروژه های تجاری بزرگ و مستقل از سکو نیز استفاده کرد و با خیال راحت از مواهب بسیار زیاد جاوا برخوردار شد.
منابع
http://java.sun.com
http://www.javaworld.com
http://www.devarticles.com
محمد جواد احمدی


سادگی باید از وب آموخت !

... ) 3– طراحی های ساده برای اشکال زدایی، معتبر کردن، ویرایش و مهندسی دوباره ساده ترند ...

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


چه نکاتی در موفقیت یک گروه وب نقش دارند؟

... - پیاده سازی تکنولوژی (technology implementation): ایجاد یک سیستم فنی منوط به انجام مجموعه ای از فعالیت ها و دانش خاص است: زبان ها و پروتکل ها، کدینگ و اشکال زدایی، تست و ارزیابی ...

منبع : اخبار فناوری اطلاعات    تاریخ : 19   دی   1388   شاخه : وب   


برنامه نویس جایزالخطاست!

... حتی ماهرترین برنامه نویسان هم کد بی نقص نمی نویسند و همواره نیاز است که کدهای خود را رفع ایراد کنند تا از مشکلات آن با خبر شود، اما این اشکال زدایی یعنی چه و به چه صورت می توان آن را رفع کرد؟ شما یک برنامه نوشته اید که خروجی آن مطابق با نتیجه دلخواه شما نیست و کدهای شما هم از نظر منطقی درست به نظر می آیند، ولی خروجی آن درست نیست ... یکی از راه های یافتن اشکال این است که در هر مرحله مهم از برنامه، متغیرهای کد خود را مشاهده کنید و مطمئن شوید که درست در کدام خط و کجای برنامه داده های شما اشتباها تغییر می کنند ... روش دیگر، استفاده از ابزارهای اشکال زدایی (debugger) است ... visual studio debugger این برنامه به همراه تمامی نسخه های ویژوال استودیو منتشر شده است و امکانات زیادی دارد که می توان از میان آن ها به موارد زیر اشاره کرد:1- یکسان کردن سورس و سمبل کدها به طور کامل2- اضافه شدن به پردازش های در حال اجرای روی سیستم برای اشکال زدایی (از این روش به منظور اشکال زدایی سرویس های ویندوزی نوشته شده در ویژوال استودیو استفاده می شود ... )3- امکان اشکال زدایی برنامه های نوشته شده در دات نت و برنامه های محلی نوشته شده در ++c 4- امکان اشکال زدایی به صورت از راه دور5- قابلیت های ویژه و حرفه ای برای گذاشتن نقطه توقف (breakpoint)6- نمایش داده ها و وضعیت آنها ...

منبع : جام جم آنلاین    تاریخ : 22   آذر   1388   شاخه : برنامه نویسی   


تونلی به دنیای قدیم

... این کار debug (اشکال زدایی) برنامه را راحت تر و نگهداری کد را ساده تر می کند ...

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


گوگل به سرعت صفحات اینترنتی کمک می کند

... این نرم افزار که مکمل نرم افزار اشکال زدایی فایرباگ (firebug) است زمان بارگذاری صفحه را تحلیل کرده و در همین حال به دیگر مواردی که به بهبود آن منجر می شود، کمک می کند ...

منبع : همشهری آنلاین    تاریخ : 16   خرداد   1388   شاخه : وب   


باگ چیست؟

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

منبع : هموطن سلام    تاریخ : 19   فروردین   1388   شاخه : برنامه نویسی   


توپولوژی باس

... در بیشتر اوقات مشکل در این توپولوژی شکستن خط اصلی است که کاری مشکل برای اشکال زدایی (troubleshooting) به حساب می آید ...

منبع : جام جم آنلاین    تاریخ : 15   دی   1387   شاخه : شبکه   


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

... همچنین اگر برنامه ای را که به یک زبان واحد نوشته شده است و در کامپایلری بدون اشکال به فایل اجرایی نهایی منتج شده است، در پیاده سازی دیگر آن کامپایلر بخواهیم کنیم ممکن است با اشکالات متعدد روبه رو شویم که عملا اشکال یابی و اشکال زدایی آن را غیرممکن خواهد ساخت و در نتیجه فرد مجبور خواهد بود همواره با یک کامپایلر کار کند ... این که نتوان یک برنامه به یک زبان واحد را در کامپایلرهای دیگر همان زبان کامپایل کرد، یک اشکال بزرگ به شمار می رود که به آن نداشتن قابلیت انتقال1 گفته می شود ... مثلا ممکن است سوال شود که وقتی یک برنامه در کامپایلری مثل کامپایلر ++ c بورلند بدون اشکال به فایل اجرایی تبدیل می شود، چه لزومی دارد آن را به کامپایلر ++ c مایکروسافت انتقال دهیم؟ این سوال از دو دیدگاه قابل بررسی است ... اما برنامه نویس باید به این نکته توجه داشت باشد که اگر قرار باشد برنامه خود را در یک کامپایلر دیگر از آن زبان یا در سیستم عامل دیگری کامپایل کند، ممکن است حتی اگر با خطایی نیز مواجه نشود، یک اشکال منطقی ظریف در برنامه ظهور کند که معمولا یافتن این گونه اشکالات زمانگیر و خسته کننده است ... در صورتی که اگر آ ن دستور انتساب مقدار به مؤلفه ها وجود داشت این اشکال رخ نمی داد ...

منبع : جام جم آنلاین    تاریخ : 24   آذر   1387   شاخه : برنامه نویسی   


نسل جدید ابزارهای برنامه نویسی

... پیش از این php با وجود وسعت کاربردش، یک محیط کار مجتمع و توانمند نداشت و برنامه نویسان ناچار بودند برنامه های خود را در ویراستارهای معمولی نوشته و در سرورهای خود آزمایش و اشکال زدایی کنند ...

منبع : جام جم آنلاین    تاریخ : 17   آذر   1387   شاخه : برنامه نویسی   

صفحه 1
2 3 4


طراحی وب سایت

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

Get Adobe Flash player