خرید بک لینک

میخوام یه فایل test.bin رو باز بکنم و چند جاش مقادیرش رو عوض بکنم.
راه دستیش استفاده از یه هگزا ادیتور هست (مثل HxD)
ولی میخوام واسه این کار یه برنامه بنویسم که اتوماتیک مقادیر مورد نظرم رو روی فایل بنویسه.
توی اینترنت جستجو کردم ولی نتونستم دقیقا اون چیزی که میخواستم رو پیدا بکنم.
ولی چند تا مثال مرتبط پیدا کردم که تونستم با ترکیبشون به چیزی که میخوام برسم.
برنامه ظاهرا خوب کار میکنه.
ولی اگه میشه یه نفر یه نگاهی بندازه ببینه مورد ناشیانه ای توی برنامه هست یا نه که بعدا باعث باگ نشه.
مثلا اینکه آیا نیاز هست که حی فایل رو باز و بسته بکنم؟
یا اون قسمت بک آپ مشکلی ایجاد نمیکنه؟
مرسی

ضمنا مراحل اجرای برنامه هم به این صورت هست :
قسمت اصلی برنامه داخل یه تابع هست.
تابع با سه تا آرگومان فراخوانی میشه : نام فایلی که میخوام پچ بشه / آدرس آفستی که میخوام پچ بشه / مقدار جدیدی که میخوام داخل اون آدرس آفست نوشته بشه
با فراخوانی تابع :
اول : سایز فایل پیدا میشه
دوم : تک تک بایت های فایل به داخل آرایه Buffer لود میشه
سوم : از فایل اصلی یه بک آپ ایجاد میشه
چهارم : با توجه به آرگومان های تابع مقدار مورد نظر روی آرایه بافر نوشته میشه
پنجم : تک تک بایت های آرایه بافر به داخل فایل نوشته میشه

# include <iostream>
using namespace std;

void patch_file(std::string filename,int offset, int value);

void main ()
{
// File name, Offset, Value to patch
patch_file("test.bin", 0x0F, 0xFF);
}

void patch_file(std::string filename,int offset, int value)
{
// File Size
FILE *file_size = NULL;
file_size = fopen(filename.c_str(),"rb");
fseek(file_size,0,SEEK_END);
int size = ftell(file_size);
fclose (file_size);

// File to Buffer
FILE *read_file = NULL;
read_file = fopen(filename.c_str(),"rb");
unsigned char *buffer = new unsigned char[size];
fread(buffer,1,size,read_file);
fclose (read_file);

// Backup from File
FILE *backup_file = NULL;
char backup[20];
strcpy(backup, filename.c_str());
strcat (backup, ".backup");
backup_file = fopen(backup,"wb");
fwrite(buffer,1,size,backup_file);
fclose (backup_file);

// Patch value to buffer
buffer [offset] = value;

// Buffer to File
FILE *write_file = NULL;
write_file = fopen(filename.c_str(),"wb");
fwrite(buffer,1,size,write_file);
fclose (write_file);
}


برچسب: نویسنده: محمد رضا جوادیان تاريخ: دوشنبه 20 ارديبهشت 1395 ساعت: 23:10

صفحه بندی