View Full Version : سوال: آنالیز کد یعنی چی؟
Netsky
شنبه 28 دی 1387, 19:08 عصر
سلام .
فکر کنم عنوان تاپیک خیلی گویا سوال من رو مطرح کرده .
از اساتید محترم درخواست میکنم در صورت اطلاع داشتن از جواب این سوال ما را هم یاری کنند .
با تشکر .................................
Nima NT
شنبه 28 دی 1387, 21:23 عصر
آنالیز کد یعنی بررسی کد برای رسیدن به هدفی خاص مثل یافتن نقاط پرش و شرطی , فراخوانی توابع و ...
Netsky
شنبه 28 دی 1387, 21:53 عصر
سلام . جواب شما به طوری کلی خوب بود . و مسئله رو خیلی خوب برام روشن کرد .
ولی اگه لطف کنید و یه کم با جزئیات باشه متشکر میشم .
با تشکر .........................
Nima NT
یک شنبه 29 دی 1387, 02:29 صبح
خوب دوست عزیز فرض کنید شما فایلی رو به من دادید تا من براتون کرک کنم , دو حالت داره , یا من مجهز به علم غیب هستم و تا فایل رو از شما گرفتم میرم سراغ آدرس مربوطه و فایل رو کرک میکنم:لبخند:
حالت دوم اینه که من تجهیزات فوق رو نداشته باشم , پس مجبورم فایل شما رو بررسی کنم , تو محیط دیباگر اون رو Trace کنم تا از الگوریتم شما سر در بیارم , به این مرحله میگن آنالیز کد , یعنی من کد شما رو آنالیز کردم تا بفهمم چی کار کردین , مرحله آخر هم یافتن راه حلی برای مقابله با تکنیک های شماست.:چشمک:
Mehdi Asgari
یک شنبه 29 دی 1387, 02:58 صبح
آنالیز یعنی تجزیه ، بررسی
برنامه ای وجود داره که میخوام در موردش بیشتر بدونم (پسورد برنامه ، الگوریتمی که برای انجام فلان کار استفاده کرده ، این که برای فلان کار از یه تابع API ویندوز استفاده کرده یا توی WMI کوئری می کنه ، با چه زبانی نوشته شده ، هر گونه اطلاعات دیگه ، ....)
تقریبا میشه گفت دو روش کلی برای انجام آنالیز داریم:
1- Static Code Analysis (http://en.wikipedia.org/wiki/Static_code_analysis) که از اسمش معلومه. کار پویایی نمی کنیم (وضعیت چیزی (داده ، کد ، ...) تغییر نمی کنه. در واقع برنامه اجرا نمیشه) مثل برنامۀ strings ، دیس اسمبلر ها ، PE Stud و ....
2- Dynamic Code Analysis (http://en.wikipedia.org/wiki/Dynamic_program_analysis) : هنگام اجرای برنامه اون رو inspect می کنیم (دیباگر ها ، پروفایلر ها ، ...)
روش استاتیک مثل اینه که قبل از خرید ماشین ، بیرون و داخلش رو نگاه می کنی ، بی رنگ بودنش رو چک می کنی ، کاپوت رو می زنی بالا و سرکی به موتور می کشی و ... (تغییری ایجاد نشده در وضعیت جهان)
اما در روش دینامیک ماشین رو روشن می کنی ، بعد می رونیش ، گاز میدی ، به صدای موتور گوش میدی ، ترمزها رو تست می کنی ، ...
{گیر ندید. آدمی که ساعت 8 امتحان داره ، اون وقت این موقع صبح داره روتر کانفیگ می کنه ، بهتر از این مثال نمی تونه بزنه}
یه نیگا به این کتاب بنداز. در جوانی به من خیلی چیزا یاد داد: http://en.wikipedia.org/wiki/index.html?curid=13309886
Mehdi Asgari
یک شنبه 29 دی 1387, 03:24 صبح
البته من یک حالت رو فراموش کردم و اون هم code analysis هست که فکر کنم اصلا منظورت همین بوده (تا حالا داشتیم program analysis رو توضیح می دادیم!)
بررسی کد در این مفهوم به معنی جستجو برای یافتن الگوهایی از پیش تعریف شده در سورس کد برنامه است. مثل کاری که FxCop یا Stylecop یا اصلا خود ادیتور ویژوال استودیو می کنن. اینا کدت رو اسکن می کنن ، بعد اگه الگوهای خاصی رو پیدا کردن طبق الگوریتمی از پیش تعریف شده ، کار معینی رو انجام میدن. (اینا در ردۀ ادیتور و refactoring tools می گنجن)
در این صورت front end کامپایلر هم داره کار بررسی کد رو انجام میده.
یه مورد دیگه Formal Verification هست که صحت برنامه های نوشته شده رو توسط متدهای ریاضی بررسی می کنه.
در مورد تفاوت روش استاتیک و دینامیک یه روش کامپیوتری تر بزنم:
فرض کن برنامه ای هست که داده ها رو با روش خاصی در فایل یا جایی دیگر ذخیره می کنه. اگه من بخوام از روش استاتیک فرمت فایل ها رو متوجه شده و در نتیجه بتونم به داده های ارزشمند این برنامه دسترسی داشته باشم ، باید با hex viewer بیفتم به جونش تا بتونم بلکه به جایی برسم. روش دینامیک اینه که با یه دیباگر و یه file system monitor تغییرات ایجاد شده در data store رو با توجه به input ها بررسی کرده و در نهایت متوجه فرمت داده ها بشم.
این لینک رو هم نگاه کن ضرر نمی کنی:
http://en.wikipedia.org/wiki/Computer_forensics
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.