PDA

View Full Version : Relocation فایل اجرائی



ali_sayahiyan
جمعه 11 شهریور 1390, 23:59 عصر
با سلام خدمت اساتید بزرگ
در ساختار فایل اجرائی قسمت Relocation چه وظیفه ای بر عهده دارد؟
و چه زمانی حتماً باید وجود داشته باشد؟
پیشاپیش ممنون

Raham
شنبه 12 شهریور 1390, 08:10 صبح
سلام دوست عزیز

اگه درست یادم باشه شما داشتین پروتکتور می نوشتین :چشمک: موفق باشید:قلب:


در مورد RELOC باید ارز کنم. ببینید هر فایل بصورت پیش فرض یه ImageBase داره که تو Header تعریف شدس و OPCode های کد سکشن هم بر اساس اون نوشته شدن.
تو فایل EXE که معمولا ImageBase همونیه که تو هدر هستش.
اما توی فایلهایی مثل DLL امکان داره ImageBase که توی هدر هستش قبلا اشغال شده باشه.
یعنی چی؟ مثلا شما تو برنامت تو DLL داری. DLL1 و DLL2 و ImageBase جفتشون هم 0x10000000 هستش.
حالا اگه شما بخوای جفتشو Load کنی چه اتفاقی می افته؟ حالات عادی نمیشه چون اون امیج بیس اشغال هستش. تو این مورد که ویندوز میاد از RELOC استفاده می کنه.
یعنی الان Base 0x1000000 تعریف شدس و کد سکشن هم بر اساس اون تهیه شده اما تو حافظه می میخواد اجرا بشه بیس میشه 0x2000000

این وسط یه سوال پیش میاد:
خوب حالا چه نیاز که بعد از تغییر ImageBase کد ها فیکس بشن؟
اینجا ما 2دسته کد داریم
یه سری از کدها بر اساس Offset کار میکنند. این آفست ... آفست فایل نیست:D منظورم اینه که بر اساس انحراف از مقصد کار کنند.
مثل Opcodeهای 0xE8,0xE9,0x74,0xEB و ... اینها مشکلی ندارن....یعنی وقتی شما کل کد سکشن رو جابجا می کنی اختلاف مبدا و مقصد توی CALL که عوض نمیشه؟ پس مشکلی نداره
اما OPCODE هایی مثل A1,FF15,FF25 که بر اساس VirtualAddress کار میکنند دچار مشکل میشن.
یعنی چه؟ یعنی دستور قبلا بودن MOV EAX,401060 که قرار بودن از روی Data Section بخونه.
اما بعد از RELOC که Data سکشن شده 0x70001000 نیازه که اون دستور MOV EAX,401060 هم بشه
MOV EAX,0x70001060



موفق باشید
یا حق

ali_sayahiyan
شنبه 12 شهریور 1390, 19:10 عصر
رهام جان واقعاً دمت گرم!!
آره من همونی هستم که قصد نوشتن پروتکتور داشتم راستش من فارغ التحصیل کامپیوترم ولی شغلم در رابطه پخش مواد غذائی هستش واسه همین سالی یک بار وقت می کنم سر این پروتکتور ور برم!!
از این حرف ها بگذریم من چیزی که متوجه شدم این هستش که winLoader زمانی که فایل اجرائی را در مکان دیگری بارگداری کرد میاد تمام آدرس هایی که در ریدایرکشن هست رو اصلاح می کنه درسته؟
در ضمن نسخه جدید کرک می را به زودی میگذارم حتماً بررسیش کن ممنون میشم

Raham
شنبه 12 شهریور 1390, 19:46 عصر
سلام دوست عزیز
خواهش می کنم :قلب:

بله آدرس های موجود دو RVA رو اصلاح میکنه
فقط 2 تا نکته:
1.آدرس ها بر اساس RVA هستش.... که :
RVA=VA-ImageBase
البته روش های دیگه هم واسه بدست آوردن داره
2.آدرسی که اونجا هست آدرسی Instruction نیست...دقیقا آدرسی هستش که توش آدرس قرار داره. مثلا:


70A210A8=> ( A3 9CBCA270) MOV DWORD PTR DS:[70A2BC9C],EAX

آدرسی که باید قرار بگیره توی RELOC اینه:
VA-ImageBase + SizeOfOpCode
اینجا میشه:
70A210A8-70A20000+1=10A9



موفق و پیروز باشید

یا حق