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

زبان و کامپایلر

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

فایل‌های وابسته‌

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

منابع به‌کار رفته‌

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

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

Disassemblerها

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

فعالیت‌های فایل اجرایی‌

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

ورودی و خروجی‌

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

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

فعالیت در رجیستری و شبکه‌

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

ارتباطات سخت‌افزاری‌

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

منبع : گلیک


دسته ها : برنامه‌نویسی
شنبه نهم 6 1387
X