كسب اطلاعات،اساسيترينگام در مهندسي معكوس
همانطور كه براي طراحي و پيادهسازي يك نرمافزار گامهاي مشخص و سلسله مراتب وجود دارد، مهندسي معكوس نيز بايد با برداشتن يك قدم آغاز شود و آن قدم مهم و اساسي چيزي نيست جز جمعآوري اطلاعات اوليه.
زبان و كامپايلر
پيش از هر چيزي، لازم است بدانيم، نرمافزاري را كه ميخواهيم بررسي كنيم با چه زباني نوشته شده است و با چه كامپايلري به فايل اجرايي تبديل شده است. معمولا كامپايلرها با روشهاي بهخصوصي اقدام به ساخت فايلهاي اجرايي ميكنند. با توجه به آن روشها كه در همه فايلهاي اجرايي نيز يكسان است ميتوان فهميد كه آن برنامه با چه كارهايي ساخته شده است. البته بهدليل آن كه شناخت كامپايلرها و طريقه ساخت فايلهاي اجرايي توسط هر كدام از آنها نيز مستلزم داشتن آگاهي و شناخت كافي از آنهاست، اين كار با استفاده نرمافزارهاي ويژهاي انجام ميشود. برنامههاي بسياري هستند كه پس از اجراي آنها و انتخاب فايل اجرايي دلخواه، اطلاعات كاملي در مورد زبان برنامهنويسي، كامپايلر مورد نظر و حتي نگارش كامپايلر و اطلاعات مفيد ديگر را در اختيارتان قرار ميدهد. خوب است بدانيم كه شناسايي نوع كامپايلر ميتواند استراتژي ما را در مراحل بعد، كاملا تحت تاثير قرار دهد. زيرا معمولا هر كامپايلر ساختار خاصي را براي مديريت و سازماندهي كدها، دادهها و منابع در فايل اجرايي خاص خود در نظر ميگيرد كه با كامپايلرهاي ديگر كاملا متفاوت است.
فايلهاي وابسته
بسياري از نرمافزارها و فايلهاي اجرايي، بههنگام اجرا از كتابخانهها و فايلهايي استفاده ميكنند كه معمولا اين فايلها با پسوند.dll شناخته ميشوند. گاهي لازم است بدانيم كه هرdll شامل چه توابعي است و يك فايل اجرايي در هنگام كار به كدام فايلها وابسته است و كداميك را فراخواني ميكند. نرمافزارهايي وجود دارند كه قادر هستند كليه فايلهاي مورد نياز يك برنامه در هنگام اجرا را بهصورت چند سطحي تشخيص دهند، به اين معنا كه اگر يك فايل وابسته، خود به فايل ديگري نيز وابسته بود، آن را هم شناسايي كنند.
منابع بهكار رفته
يكي از اجزاي مهم بهكار رفته در فايلهاي اجرايي، به منابع (Resources) معروف هستند كه در واقع دادههاي از پيش تعريفشده را براي برنامه نگهداري ميكنند. پنجرههاي از پيش تعريفشده، آيكونها، تصاوير گرافيكي موجود در برنامه، رشتههاي متني، فايلهاي صوتي و تصويري و ... از جمله منابع يك فايل اجرايي بهشمار ميروند. يك برنامهنويس ميتواند به هر تعداد و از نوع منبع به فايل ارجايي خود بيافزايد و در مهندسي معكوس ميتوان اين منابع را استخراج كرده يا تغيير داده و يا نمونه ديگري جايگزين كرد.
نرمافزارهاي ويژهاي هستند كه ميتوان با استفاده از آنها به منابع يك فايل اجرايي دسترسي پيدا كرد و آنها را مطابق ميل خود تغيير داد و يا آنها را از دل فايل اجرايي بيرون كشيد. با استفاده از همين برنامههاست كه ميتوان زبان منوها، پنجرههاي و محيط برنامه را بدون دسترسي داشتن به كد برنامه تغيير داد. انواع نرمافزارهاي فارسيساز با استفاده از همين تكنيكها طراحي ميشوند
Disassemblerها
هر برنامه، مستقل از زبان برنامهنويسي آن به كد ماشين تبديل ميشود. حال اگر بخواهيم كه ماشين را دوباره به كدهاي زبان برنامهنويسي تبديل كنيم، ممكن است اين كار امكانپذير نباشد. اما با توجه به اينكه هر دستور زبان ماشين معادل يك دستور زبان اسمبلي است، ميتوان هر برنامهاي را بهزبان اسمبلي برگرداند كه اين عمل را Disassemble يا عكس عمل اسمبل گويند. با اين كار، اگر شخص بهقدر كافي به زبان اسمبلي مسلط باشد، ميتواند هر تغييري در كد برنامه بدهد و مجددا آن را اسمبل كرده و فايل اجرايي جديد با اعمال تغييرات ايجاد كند. نرمافزارهاي توانمندي هستند كه ميتوانند علاوه بر عمل disassemble ، امكانات بسياري را براي اعمال تغييرات در فايل اجرايي در اختيار كاربران قرار دهند.
فعاليتهاي فايل اجرايي
بهعنوان اطلاعات اوليه، شايد لازم باشد كه بدانيم يك فايل اجرايي در زمان اجرا چه رفتاري از خود نشان ميدهد و فعاليت آن چگونه است. بهعنوان مثال چه ميزان حافظه اصلي را اشغال ميكند و چه ميزان از حافظه مجازي روي ديسك را به خود اختصاص ميدهد يا در زمان اجرا تا چه حد از توان پردازنده را در اختيار خود ميگيرد. اين اطلاعات و بسياري اطلاعات ديگر، از جمله مواردي هستند كه ميتوان در زمان اجرا، از يك فايل اجرايي كسب كرد. براي اين كار نيز نرمافزارهاي متنوعي وجود دارند. سادهترين ابزار موجود در اين زمينه Task Manager موجود در ويندوز است كه تا حدي، اطلاعات مفيدي در مورد برنامههاي در حال اجرا در اختيار كاربران قرار ميدهد.
ورودي و خروجي
بيشتر برنامهها عمل ورودي و خروجي روي فايل دارند. يعني يا از فايل خواند يا بر روي آن مينويسند. اطلاعات مربوط به اين فعاليتها نيز ممكن است در جايي لازم باشد.
نرمافزارهايي وجود دارند كه بهمحض اجراي يك برنامه، تمامي فعاليتهاي ورودي و خروجي مربوط به فايل آن را تحت نظارت و كنترل قرار ميدهند. با استفاده از اينگونه نرمافزارها ميتوان اطلاعات ارزشمندي در مورد اين نوع فعاليت فايلهاي اجرايي نيز كسب كرد.
فعاليت در رجيستري و شبكه
دو نوع فعاليت ديگر وجود دارد كه در حوزههاي جداگانه بررسي ميشوند و ميتوانند اطلاعات خوبي در اختيار كار برقرار دهند و يكي تاثيرات كه يك فايل اجرايي در رجيستري ويندوز اعمال ميكند و ديگري ارتباطات و اتصالهايي كه برنامه با شبكه و اينترنت برقرار ميكند. در اين زمينهها نيز نرمافزارهايي وجود دارند كه كليه كارهاي يك برنامه را براي تغيير دادن رجيستري در نظر ميگيرد و ميتوان با بررسي آن به رفتارهاي فايل اجرايي پي برد. برنامههايي نيز تحت عنوان كليNetwork monitor هستند كه كليه اتصالها، نوع اتصال و پروتكل بهكار رفته در آن و ديگر جزييات مربوط به ارتباطات و شبكه را كنترل ميكنند.
ارتباطات سختافزاري
و بالاخره يك فايل اجرايي ممكن است در طول اجرا با سختافزارهاي مختلف و درگاهها، تبادل اطلاعات و ارسال و دريافت داده داشته باشد. ارتباط با درگاههاي سريال، موازي، USB و ... . ارسال اطلاعات به نمايشگر و تبادل اطلاعات با ديسكها و درايوها و ديگر لوازم جانبي رايانه از جمله مواردي هستند كه ميتوانند در بررسي رفتار يك فايل اجرايي و كسب اطلاعات اوليه در گام اول مهندسي معكوس موثر واقع شوند.
ضميمه كليك جام جم