Decompiler به لحاظ "تئوريک" يعني ابزاري براي تبديل يک برنامهء باينري اجرائي يا يک کتابخانه يا درايور به سورس کد اصلي ؛ قبل از ورود به بحث لازمه يک طبقه بندي از موجوديتهائي که ممکنه ذيل عنوان Decompiler مطرح بشن داشته باشيم :
• -
برنامه هاي اجرائي باينري : برنامه هائي که عموما" با زبانهاي سطح بالائي نظير VC يا دلفي نوشته ميشن و به کدهاي "مخصوص" به ويندوز/معماري ماشين ( مثلا" Win32/IA32 يعني ويندوز 32 بيتي روي اينتل 32 بيتي ) ترجمه ميشن .
-
کتابخانه هاي اشتراکي : بسته هاي نرم افزاري که عموما با زبانهاي سطح بالا براي کاربري در ساير برنامه ها توليد ميشن و وابسته به سيستم عامل و معماري سخت افزاري هستند .
-
برنامه هاي تفسيري : برنامه هائي که قبل از هر بار اجرا بايد توسط يک مفسير ترجمه بشن . به عنوان مثال برنامه هاي VB6 که بصورت PCode منتشر ميشن و هر بار قبل از اجرا توسط VB runtime تفسير ميشن .
- برنامه هاي مبتني بر زمان اجرا : برنامه هائي که براي اجرا نياز به بستر از پيش فراهم شده اي براي روند اجرا دارند . مانند برنامه هاي دات نت و جاوا .
-
درايور ها : کدهاي سطح کرنلي که مختص سيستم عامل و معماري سخت افزاري هستند و عموما با زبانهاي سطح پائين توليد ميشن .
سوال : آيا معناي تئوريک Decompiler براي همه اين گروهها محقق شده ؟ ميشه ؟ خواهد شد ؟
جواب : خير .
هيچ Decompiler اي براي گروهاي اول و دوم و پنجم ارائه نشده ، نميشه ، نخواهد شد . يعني دريافت سورس کد کامل نرم افزارهاي اجرائي از نسخه باينري اونها مطلقا" غير ممکنه . اين عدم امکان فني نيست که در آينده با پيشرفت دانش امکان پذير بشه ؛ يک نفي منطقي است . يعني منطقا" امکان باز-توليد سورس کد کامل يک برنامه توليد شده با محيطهائي مثل Delphi يا VC وجود نداشته ، نداره ، نخواهد داشت .
سوال : پس نرم افزارهاي متعددي که تحت عنوان Decompiler منتشر ميشن چي ؟
جواب : با توجه به تعريف Decompiler ، جواب داده شد .
سوال : در مورد گروه هاي سوم و چهارم چي ؟
جواب : براي اين دو گروه Decompiler وجود داشته و داره ؛ با يک توضيح کوچک . برنامه هائي هستند که ميتونن از برنامهء اجرائي VB ( به عنوان نماينده گروه سوم ) يک سورس کامل قابل کامپايل توليد کنند ، اما ، اين سورس ، لزوما" قرار نيست همان سورسي باشد که توسعه گران نرم افزار توليد کرده اند ؛ براي دات نت ( نمايندهء گروه چهارم ) نيز Decompiler هاي متعددي وجود داره ؛ اما هيچکدام قول نميدهند خروجي آنها لزوما" همان سورس کدي باشد که برنامه از آن توليد شده .
سوال : آيا اصولا" وجود Decompiler لازمه ؟
جواب : براي اهداف مثبت و خيرخواهانه خير . حتي براي اهداف غير خيرخواهانه نيز وجود Decompiler يک لازمه نيست . هيچ کسي از وجود ابزاري که بتونه برنامهء او رو به سورس قابل قبولي مبدل کنه خوشحال نخواهد شد ؛ اين ابزار کمکي به توسعه نرم افزار نميکنه و سود اقتصادي ، پيشرفت علمي و افزايش قابليتهاي صنعت نرم افزار رو بيشتر نخواهد کرد . حتي براي اهداف مخرب هم ، وجود چنين ابزاري لازم نيست چون بسياري از کساني که در اين مسير فعاليت ميکنند براي تخريب امنيت يک نرم افزار نيازي به دست رسي به سورس اون ندارند . کشف نقاط ضعف امنيتي يا عبور از حفاظهاي نرم افزار عموما" در محيطهائي اتفاق مي افته که سورس وجود نداره و تمام فرآيند تخريب از طريق مهندسي معکوس يا Reverse Engineering انجام ميگيرد .
سوال : برنامه هائي که با جاوا و دات نت نوشته ميشن چقدر امن هستند ؟
جواب : چون نقطهء صفري وجود نداره ، ميزاني قابل ارائه نيست ؛ اما در مقام مقايسه :
• - بررسي و Trace و بازبيني روند اجرا ي برنامه هائي که با محيطهائي نظير دات نت و جاوا توليد ميشوند ، به مراتب دشوار تر از برنامه هائي است که با محيطهائي نظير دلفي و VC توليد ميشوند؛ چرا که وجود Runtime هاي بزرگي مانند JRE يا CLR باعث ميشه پيچيدگي فراخواني ها ، مديريت حافظه ، مديريت ريسمان ها و پردازه ها و غيرهم به مراتب از برنامه هاي اصطلاحا" Native ( مانند خروجي هاي VC ) بيشتر باشه . پس في المثل درک جزئيات فني يک الگوريتم ، وقتي با دات نت نوشته شده باشه و به خوبي با Framework مخلوط باشه واقعا" دشوار تر از درک جزئيات فني الگوريتمي که با Delphi کامپايل شده .
- عبور يا تخريب حفاظهاي نرم افزارهائي که با زبانهاي نظير جاوا و دات نت نوشته ميشن به مراتب آسون تر از برنامه هائي است که با امثال دلفي و VC توليد ميشن . چرا که اگر از درک جزئيات يک الگوريتم بگذريم ، وابستگي کامل اين برنامه ها به يک لايهء مياني به نام زمان اجرا و عدم وابستگي به عناصر زير ساختي سستم عامل و پردازنده و سخت افزار و همچنين امکانات بيشتر نفوذگران نرم افزار در تغيير محتويات اين برنامه ها باعث ميشن از اين ديدگاه ، برنامه هاي Native وضع بهتري داشته باشند .
• ( ميگذريم از اين حقيقت که براي يک حرفه اي ، اهميت خاصي نداره که يک برنامه با دلفي کامپايل شده يا Managed CPP )
سوال : روشهاي حفاظتي که براي مقابله با Decompiler ها مورد استفاده قرار ميگيره چقدر قابل اعتمادند ؟
جواب : براي امثال دات نت و جاوا ، تقريبا" هيچ . براي ساير محيطها ، Decompiler دشمن خطرناکي به حساب نمياد . في المثل برنامه اي با عنوان DeDe با Delphi Decompiler مدعي است که يک Decompiler براي دلفي است ؛ اما در واقع تو فقط ميتوني يک سري اطلاعات دريافت کني ؛ و نه سورس کد کامل . ممکنه در برخي موارد اين اطلاعات بتونه به يک نفوذگر نرم افزاري کمک خاصي بکنه ؛ اما من حيث مجموع ، اينگونه برنامه ها تهديد خطرناکي به حساب نميان . بگذريم از اين واقعيت که يک نفوذگر نرم افزاري براي حذف روتين حفاظتي نرم افزار يا جستجوي يک سرويس براي نقاط ضعف متداول ، نيازي به يک Decompiler نداره . تمام وقايع تلخي که سالهاست شاهدش هستيم داره تحت شرايطي مي افته که هيچ Decompiler ضعيفي هم وجود نداره.
منبع:www.barnamenevise.ir/س