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