PDA

View Full Version : تبدیل فایل EXE به DLL



CYCLOPS
سه شنبه 06 بهمن 1388, 19:54 عصر
سلام خدمت دوستان عزیز
سوالم اینه که چطور میشه یه فایل EXE رو به فایل DLL تبدیل کرد ؟؟

بذارید با یه مثال ساده بحث رو شروع کنیم :
فرض کنید یه برنامه خیلی ساده داریم (PE) که شامل یک فرم ؛ دو تا تکست باکس و یک دکمه هست کل کد برنامه هم تو رویداد کلیک دکمه است و بعد از کلیک دکمه جمع دو عد ورودی تکست باکس ها نمایش داده میشه حالا میخوایم این فایل رو تبدیل کنیم به یک DLL که یک متد داره که دو تا عدد میگیره و یک عدد (جمعشون) رو بر میگردونه

در واقع :
باید چه تغییری تو ساختار یک فایل EXE ایجاد کرد که تبدیل به یک DLL بشه ؟؟
تغییر در هدر فایل برای تبدیلش کافیه یا نه ؟؟ (اگه آره کجا و چه تغییری ؟؟)

پیشاپیش ممنون :تشویق:

BackTrace
چهارشنبه 07 بهمن 1388, 20:05 عصر
سلام، خسته نباشین.
با این مثالی که زدین من یاد ActiveXهای VB افتادم. که داستانشون با DLL کمی فرق میکنه.:متفکر:
ما با DLLها با Call و Return ارتباط برقرار میکنیم. فکر نکنم فایل DLL به صورت ویژوال وجود داشته باشه. اما ...
Entry Point فایل های DLL تابع DllMain و برای فایل های EXE تابع WinMain هستش درضمن Messageهای هرکدوم هم با دیگری دربیشتر جاها متفاوت هست. DLLها دارای Export Table هستن درحالیکه فایل های EXE دارای این قسمت نیستن. علاوه بر اینها درموارد دیگه ای هم تفاوت وجود داره.:عصبانی++:
پس شما باید حداقل تغییرات بالا رو انجام بدین که فکر کنم از اول نوشتن یک DLL خیلی بهتر باشه.

پیروز باشید./

CYCLOPS
چهارشنبه 07 بهمن 1388, 20:31 عصر
ممنون دوست عزیز
صحبت هات همه درسته ولی خوب یه زمانی هست که ما یه فایل EXE داریم و به سورسش دسترسی نداریم و میخوایم یه سری پارامتر رو به فایل بفرستیم تا کاری رو انجام بده و خروجی رو برگردونه در واقع میخوایم یه جورایی فایل EXE رو Automate کنیم .


خوب حالا برای اضافه کردن یه Export Table به یه فایل EXE باید چیکار کرد ؟؟
تو هدر فایل های PE یه فلگ با عنوان Is Dll Library یا همچین چیزی هست آیا با تغییر اون فلگ از 0 به 1 برای فایل EXE ما Export Table ساخته میشه؟؟
برای تغییر Entry Point یه فایلEXE باید چیکار کرد ؟؟

ممنون از توجهتون :چشمک:

BackTrace
چهارشنبه 07 بهمن 1388, 22:29 عصر
خواهش میکنم.
اضافه کردن یه Export Table کار دشوار و شاید غیرممکنه چون احتمالا به بازنویسی کامل کد نیاز داره. (من اطلاعات موثق بیشتری نداشتم که ارائه کنم.:افسرده:)
گزینه "Is Dll Library" برای DLLها ضروری هست اما کافی نیست.:چشمک:
Entry Point در واقع یک تابع هست که باید برای پیفام هایی که به Dll میرسه از خودش واکنش نشون بده. تغییر Entry Point یک EXE سخته چون باید توابع رو کامل و در سطح اسمبلی بشناسین و با یک اشتباه ساده، Exception تولید میشه.
در کل اگه مهمه پیشنهاد میکنم وقتتون رو برای Reverse کردنش بذارین.

پیروز باشید./

CYCLOPS
پنج شنبه 08 بهمن 1388, 07:08 صبح
به نظر بقیه دوستان هم اینکار سخته ؟؟

ابزاری چیزی نیست که این سختی ها رو متحمل بشه و تبدیل EXE به DLL رو خودش انجام بده ؟؟ :ناراحت:

BackTrace
پنج شنبه 08 بهمن 1388, 13:27 عصر
یه مقاله خوب پیدا کردم:

http://keeper.lubie.org/other_docs/change_exe_to_dll.htm

نوشته Tomasz Lis


پیروز باشید./