Showing posts with label Extraction. Show all posts
Showing posts with label Extraction. Show all posts

استخراج فایل از منابع فایل اجرایی در زمان اجرا


امروز یه نفر از من خواست یه قطعه کد توی vc++  براش بنویسم که به کمک اون یه فایل اجرایی رو که توی resource های برنامه اضافه کرده در زمان اجرا استخراج کنه و روی هارد ذخیره کنه. دیدم در این مورد روی اینترنت یه قطعه کد قابل اجرا به راحتی پیدا نمیشه و برای همین اون رو اینجا قرار میدم.

روش کار هم ساده است. 
1- در Resource View راست کلیک کنید و گزینه Add و سپس Resource رو انتخاب کنید.
2- دکمه Import رو بزنید و فایل مورد نظر خودتون رو انتخاب کنید.
3- در پنجره Custome Resource Type ، باید برای Resource type مقدار EXE رو وارد کنید.
4- حالا قطعه کد زیر این فایل موجود در resource رو براتون استخراج میکنه.
HMODULE exe = GetModuleHandleA(NULL);
HRSRC hResInfo = FindResourceA(exe, MAKEINTRESOURCEA(IDR_EXE1), "EXE" );
HGLOBAL hRes = LoadResource(exe, hResInfo);
LPVOID memRes = LockResource(hRes);
DWORD sizeRes = SizeofResource(exe, hResInfo);

FILE* fexe = fopen("C:\\e.exe", "wb" );
for(int i=0; i<sizeRes; i++ )
   fwrite( (LPVOID)(((char*)memRes+i)), sizeof(char), 1, fexe);
fclose(fexe);

نکته ها:
1- "EXE" (پارامتر سوم FindResourceA ) همان چیزی است که به عنوان Resource type وارد کردید.
2- اگر پارامتر GetModuleHandleA را NULL قرار دهید، دستگیره ماژول جاری رو برمیگردنه
3- داخل حلقه for به کمک عملگر جمع روی اشاره گرها، بایت های resource رو پیمایش می کنیم.
4- IDR_EXE1 شناسه همان فایلی است که به Resource ها اضافه کردیم.
لینک دانلود کد: