ورود

View Full Version : ادغام واقعی دو فایل اجرایی



limpizik
دوشنبه 03 فروردین 1394, 21:52 عصر
سلام دوستان.
سوالی که داشتم من میام با کد copy /b file1.exe + file2.exe c.exe result.exe دو فایل اجرایی رو با هم ادغام میکنم اما مشکل اینه که فایلها ادغام میشوند اما فقط فایل اول اجرا میشه و با به انتها رسیدن برنامه اول کنترل به سیستم عامل بازمیگردد و برنامه دوم اجرا نمیشود.آیا راهی هست کنترل به سیستم عامل بازنگردد و برنامه دوم هم اجرا گردد؟(تو فروم هم سرچ کردم اما هیچکدوم کاربردی نبودن).
ممنونم

reza_noei
سه شنبه 04 فروردین 1394, 00:40 صبح
سلام دوستان.
سوالی که داشتم من میام با کد copy /b file1.exe + file2.exe c.exe result.exe دو فایل اجرایی رو با هم ادغام میکنم اما مشکل اینه که فایلها ادغام میشوند اما فقط فایل اول اجرا میشه و با به انتها رسیدن برنامه اول کنترل به سیستم عامل بازمیگردد و برنامه دوم اجرا نمیشود.آیا راهی هست کنترل به سیستم عامل بازنگردد و برنامه دوم هم اجرا گردد؟(تو فروم هم سرچ کردم اما هیچکدوم کاربردی نبودن).
ممنونم

سلام
تا اون جایی که من اطلاع دارم هر برنامه ای پس از پایان کار یک فراخوانی سیستمی را به منظور اعلام اتمام کار خودش صدا میزنه (در سیستم عاملی مثل داس از یک روتین وقفه برای این کار استفاده میشده). بعد کنترل به سیستم عامل برمیگرده. وقتی دو تا برنامه رو ادغام کنید پس از پایان کار برنامه اول کنترل به سیستم عامل برمیگرده.
اگر بخواهید واقعا دو فایل اجرایی رو ادغام کنید باید زبان اسمبلی یاد بگیرید و خودتون این کار رو انجام بدید.
راه حل دیگه استفاده از ترم افزارهایی مثل Exe Joiner است (البته خودم امتحان نکردم ولی فکر کنم کارتون رو راه بندازه)
اما شما میتونید یک فایل bat ایجاد کنید و کد های زیر را داخل اون وارد کنید تا دو برنامه به صورت ترتیبی اجرا شوند :


@echo off
start "" "File1.exe"
start "" "File2.exe"

limpizik
سه شنبه 04 فروردین 1394, 08:34 صبح
ممنونم از پاسختون.
بایندرها معمولا یه فایل stub دارن که دو برنامه رو در ریسورس خودشون قرار میدن و بعد از اجرا دو فایل را در پوشه ای مثل تمپلیت ویندوز منتقل میکنند و اجرا میکنند.که عملا به این کار نمیشه گفت ادغام.
شما اطلاع دارید چجوری میشه دستوراتی که کنترل رو به سیستم عامل برمیگردونند حذف کرد و به جاش NOP صادر کرد؟

reza_noei
سه شنبه 04 فروردین 1394, 14:32 عصر
ممنونم از پاسختون.
بایندرها معمولا یه فایل stub دارن که دو برنامه رو در ریسورس خودشون قرار میدن و بعد از اجرا دو فایل را در پوشه ای مثل تمپلیت ویندوز منتقل میکنند و اجرا میکنند.که عملا به این کار نمیشه گفت ادغام.
شما اطلاع دارید چجوری میشه دستوراتی که کنترل رو به سیستم عامل برمیگردونند حذف کرد و به جاش NOP صادر کرد؟

خواهش میکنم.
اگر واقعا به این کار علاقمند هستید سراغ نرم افزار olleydbg بروید. این نرم افزار یک Disassembler حرفه ای برای نرم افزارهای ویندوزیه و معمولا برای کرک کردن
نرم افزارها ازش استفاده میکنن.
این برنامه رو یکی از دوستانم به من معرفی کرده بود. راستش منم بدم نمیاد باهاش کار کنم.
راهی که به نظر من معقول میرسه اینه که شما یک برنامه خالی
int main() {return 0;}
با ویژوال سی پلاس پلاس بنویسید و بعد با این برنامه اون رو Disassemble کنید. طبعا دستورات اسمبلی که به شما نمایش میده یک راه کاری رو پیش روی شما قرار میده.
شما میتونید از این روش استفاده کنید. اما به نظر من باید به نحوه (کد) شروع برنامه و برچسب های برنامه هم توجه کنید تا بتونید برنامه دوم رو بلا فاصله بعد از برنامه اول شروع کنید بدلیل اینکه برنامه های زبان (خانواده) سی از تابع main آغاز بکار میکنند ولی ممکنه تو برنامه شما پیش از این تابع توابعی نوشته شده باشند. مثلا:
int SUM(int A, int B)
{
return A+B;
}
int main()
{
...
}

که البته می طلبه که یک jmp به دستورات اضافه کنید. برچسب ها هم طبعا زمانی که شما دو برنامه رو ادغام میکنید دچار تغییراتی میشوند مثلا آدرس 1000 در برنامه دوم با آدرس 1000 در برنامه ادغام شده جدید معنی متفاوتی میده.
اگر به مشکل برخوردید اطلاع بدید (من هم امتحان کنم)

xman_1365_x
چهارشنبه 05 فروردین 1394, 17:36 عصر
سلام دوستان.
سوالی که داشتم من میام با کد copy /b file1.exe + file2.exe c.exe result.exe دو فایل اجرایی رو با هم ادغام میکنم اما مشکل اینه که فایلها ادغام میشوند اما فقط فایل اول اجرا میشه و با به انتها رسیدن برنامه اول کنترل به سیستم عامل بازمیگردد و برنامه دوم اجرا نمیشود.آیا راهی هست کنترل به سیستم عامل بازنگردد و برنامه دوم هم اجرا گردد؟(تو فروم هم سرچ کردم اما هیچکدوم کاربردی نبودن).
ممنونم

کاری که شما کردین فایل دوم رو به عنوان overlay(در ارتباط با ساختار فایل PE مطالعه کنید) به فایل اول اضافه میکنه،در ویندوز هر برنامه اجرایی برای اجرا شدن نیاز به ایجاد پروسه داره چون شما به انتهای برنامه اول بافر رو اضافه کردید در ساختار PE نادیده گرفته میشه و ویندوز فقط یک پروسه ایجاد میکنه، برای همین قابلیت اجرایی نداره، پس باید دو پروسه ایجاد کنید یا با روش fork (حالت خاصی!) روی همان پروسه یا پروسه دیگر اجراش کنید، پس در کل میتونید یک پروسه داشته باشید که بعد از اتمام کارش پروسه دوم رو اجرا کنه یا دو پروسه داشته باشین که موازی یا سری اجرا شود.
کاری که شما می خوای انجام بدی نوشتن بایندر هست،که میتونید برنامه سوم رو خودتون بنویسید که اونا رو در داخل خودش به عنوان ریسورس داشته باشه بعد createProcess کنید یا Fork(Runpe) استفاده کنید.

استفاده سوء از این اطلاعات برعهده اینجانب نمیباشد.
موفق باشید.

limpizik
سه شنبه 11 فروردین 1394, 21:52 عصر
کاری که شما کردین فایل دوم رو به عنوان overlay(در ارتباط با ساختار فایل PE مطالعه کنید) به فایل اول اضافه میکنه،در ویندوز هر برنامه اجرایی برای اجرا شدن نیاز به ایجاد پروسه داره چون شما به انتهای برنامه اول بافر رو اضافه کردید در ساختار PE نادیده گرفته میشه و ویندوز فقط یک پروسه ایجاد میکنه، برای همین قابلیت اجرایی نداره، پس باید دو پروسه ایجاد کنید یا با روش fork (حالت خاصی!) روی همان پروسه یا پروسه دیگر اجراش کنید، پس در کل میتونید یک پروسه داشته باشید که بعد از اتمام کارش پروسه دوم رو اجرا کنه یا دو پروسه داشته باشین که موازی یا سری اجرا شود.
کاری که شما می خوای انجام بدی نوشتن بایندر هست،که میتونید برنامه سوم رو خودتون بنویسید که اونا رو در داخل خودش به عنوان ریسورس داشته باشه بعد createProcess کنید یا Fork(Runpe) استفاده کنید.

استفاده سوء از این اطلاعات برعهده اینجانب نمیباشد.
موفق باشید.

بسیار ممنون از کمکتون دوست من.
سورس نمونه موجود دارید شما؟

xman_1365_x
جمعه 14 فروردین 1394, 06:34 صبح
بسیار ممنون از کمکتون دوست من.
سورس نمونه موجود دارید شما؟

این تاپیک با اسمبلی ارتباطی نداره، بهتر هست در بخش مربوطه تاپیک ایجاد کنید(مثلا مهندسی مجدد و معکوس)!
برای سورس و بیشتر از اون هم میتونید در گوگل جستجو کنید،بهتره قبل از اون در ارتباط با سیستم عامل ویندوز و برنامه نویسی سیستمی مطالعه کنید(مثلا سه کتاب windows internals , Windows via C/C++ , Windows System Programming).

موفق باشید.