PDA

View Full Version : چگونگی قرار دادن یک فایل در درون یک برنامه اجرایی



r@y of light
چهارشنبه 23 شهریور 1384, 13:47 عصر
با عرض سلام و خسته نباشید خدمت تمامی دوستان و اساتید بزرگوار

میخواستم بدونم چطور میشه یک فایل دلخواه رو بنحوی در داخل برنامه جا داد بطوریکه دیگه نیاز نباشه این فایل توی یه پوشه کنار فایل EXE بمونه و اون فایل EXE با Open کردن فایل ، اونرو اجرا کنه ؟

اجازه بدین یه مثال بزنم. فرض کنین که ما یه پلیر مثل Flash Player نوشتیم که میتونه فایلهای SWF رو بخونه... حالا به فرض اینکه من نویسنده برنامه Flash Player هستم و سورس برنامه رو در اختیار دارم ، چطور میتونم این فایل SWF مورد نظرم رو داخل برنامه اصلی FlashPlayer ، بصورت HardCode وارد کنم تا دیگه با اجرای فایل نهایی Exe ، بطور مستقیم اون فایل swf که داخل این exe قرار داره اجرا بشه ؟

امیدوارم تونسته باشم منظورم رو برسونم. در ضمن من با زبان c++ و کامپایلر visual studio 6.0 کار میکنم.
پیشاپیش از راهنمایی های شما تشکر میکنم. :افسرده:

Reza_K
چهارشنبه 23 شهریور 1384, 17:08 عصر
چندین راه حل برای نیل به هدف مورد نظر شما وجود دارد:

1. فایل مورد نظر را در resource section فایل PE قرار دهید. این روش آسانترین راه حل است. بطور خلاصه خط زیر را در فایل اسکریپت resource قرار دهید:


RESOURCE_ID RESOURCE_TYPE "addr"

به جای RESOURCE_TYPE و RESOURCE_ID هرچه دوست دارید قرار دهید. توجه کنید که هم مقادیر عددی مجازاند و هم مقادیر string.

به جای addr هم آدرس فایل مورد نظر را وارد کنید. به این ترتیب Linker هنگام ایجاد فایل اجرایی فایل شما را در resource section وارد میکند. در هنگام اجرا بوسیله سرویسهای زیر میتوانید به اطلاعات فایل دسترسی پیدا کنید:
FindResource
LoadResource
LockResource

2. روش دوم یک روش قدیمی(مربوط به دوران C64) میباشد. بدین نحوه که فایل مورد نظر را توسط برنامه ای جانبی(یا دستی!!) به آرایه ای init شده تبدیل کرده و در فایل برنامه خود include می‌کنید.
یعنی فایل را تبدیل یه چیزی مثل زیر می‌کنید:


char myFile[] ={0x10, 0x34, 0x4c, 0xab, ...};
برنامه های زیادی وجود دارند که تبدیل فوق را بصورت خودکار انجام میدهند. به سایت protools.reverse-engineering.net مراجعه کرده و بدنبال Table Extractor بگردید.

3. روش آخر که روش مورد علاقه ویروسها هم هست اظافه کردن فایل دوم به انتهای فایل اجرایی است. از آنجایی که Loader سیستم عامل Windows (و همچنین تمامی سیتم عاملهایی که من میشناسم) هنگام Load کردن یک فایل تنها از Header فایل اجرایی که در ابتدا آن قرار دارد استفاده میکنند که هیچ ارجایی، به مثلا آخرین بایت فایل ندارد. بهمین دلیل میتوانید فایل خود را به انتهای فایل اجرایی بچسبانید بدون اینکه در عملکرد عادی Loader خللی وارد شود. آنچه باقی میماند Offset اولین بایت فایل میهمان! است که آنرا هم میتوانید به روشهای مختلف در فایل اجرایی خود ذخیره کنید(مثلا از فیلدهای بلا استفاده Pe Header استفاده کنید).

r@y of light
پنج شنبه 24 شهریور 1384, 01:07 صبح
آقا رضا از پاسخ کامل شما ممنونم. راستش من تجربه چندانی در برنامه نویسی تحت ویندوز ندارم. میشه بگین که ساده ترین راه برای قرار دادن یک تصویر در داخل یک فایل exe چیه ؟ اول باید یک پروژه win 32 application جدید تعریف کنم و بعد عکس مورد نظرم رو توش بارگذاری کنم و بعد هم توسط loadResource روی صفحه نمایش نشونش بدم. آیا این استدلال درسته ؟ اگه درسته چطور و کجا باید از load resource استفاده کنم ؟ اگه غلطه هم لطفا یکم راهنمایی کنید. در صورت امکان نحوه ساختن یک فرم ساده بطوریکه فقط یک تصویر رو نشون بده ( البته این تصویر تو خود فایل exe ذخیره شده باشه ) رو هم آموزش بدین.

متشکرم

r@y of light
جمعه 25 شهریور 1384, 20:01 عصر
لطفا یه نفر کمک کنه

r@y of light
دوشنبه 04 مهر 1384, 11:56 صبح
منو از گرفتن جواب تو سایت برنامه نویس ناامید نکنین.