05-12-2021, 10:39 PM
06-12-2021, 08:18 AM
(05-12-2021, 10:39 PM)aliouat50 كتب : [ -> ]السلام عليكم
اريد معرفة طريقة فتح ملفات .bin و تعديل عليها بدون استعمال hexeditor بلغة c++
وعليك السلام
يستحسن ان تكون لديك دراية بلغتي Assembly Mips & Arm 32Bit
ثانيا فتح الملف ببرنامج IDA PRO في الويندوز او radare في بيئة اللينكس
معرفة نقطة دخول entry point عمل ديبغ للملف
بالتوفيق لك
06-12-2021, 09:16 AM
شكرا على المعلومات . و لكن انا لا أبحث عن تفكيك الملفات .
مثلا اريد تغيير او تنقيح بعض المعلومات ب hex في الملف بدون إستعمال winhex . فقط لتسهيل العملية لكي لا تفتح winhex كل مرة تريد تغيير نفس المعلومات
مثلا اريد تغيير او تنقيح بعض المعلومات ب hex في الملف بدون إستعمال winhex . فقط لتسهيل العملية لكي لا تفتح winhex كل مرة تريد تغيير نفس المعلومات
06-12-2021, 11:48 AM
تقصد بطريقة برمجية.
أبئمكانك وضع مثال للملف والتغيير الذي تريد.
أبئمكانك وضع مثال للملف والتغيير الذي تريد.
06-12-2021, 01:07 PM
06-12-2021, 03:50 PM
الأمر بسيط
في المرفقات مثال يوضح ذلك.
كيفية الاستعمال
هناك ملف باسم test.txt وبداخلة السطر التالي AT4RE TEAM
فإذا أردنا تغيير قيمة A في AT4RE إلى @ فسنقوم بالتالي:
قيمة A بالهيكس = 0x41
قيمة @ بالهيكس = 0x40
ننفذ الأمر من cmd
filepatcher.exe test.txt 0x00 0x40
إن أردت أن يقوم بالتعديل على بيانات أكثر فأخبرني لأضع الكود المصدري.
تحديث:
filepatcher_multibytes.exe test.txt 0x00 0x4041
0x00 == 0x41
0x01 == 0x40
يعدل على بيانات متعددة بدءا من العنوان الأول ,يعدل أيضا على قيمة مفردة كما في السابق.
في المرفقات مثال يوضح ذلك.
كيفية الاستعمال
هناك ملف باسم test.txt وبداخلة السطر التالي AT4RE TEAM
فإذا أردنا تغيير قيمة A في AT4RE إلى @ فسنقوم بالتالي:
قيمة A بالهيكس = 0x41
قيمة @ بالهيكس = 0x40
ننفذ الأمر من cmd
filepatcher.exe test.txt 0x00 0x40
إن أردت أن يقوم بالتعديل على بيانات أكثر فأخبرني لأضع الكود المصدري.
تحديث:
filepatcher_multibytes.exe test.txt 0x00 0x4041
0x00 == 0x41
0x01 == 0x40
يعدل على بيانات متعددة بدءا من العنوان الأول ,يعدل أيضا على قيمة مفردة كما في السابق.
06-12-2021, 05:12 PM
(06-12-2021, 03:50 PM)EarthMan123 كتب : [ -> ]الأمر بسيط
في المرفقات مثال يوضح ذلك.
كيفية الاستعمال
هناك ملف باسم test.txt وبداخلة السطر التالي AT4RE TEAM
فإذا أردنا تغيير قيمة A في AT4RE إلى @ فسنقوم بالتالي:
قيمة A بالهيكس = 0x41
قيمة @ بالهيكس = 0x40
ننفذ الأمر من cmd
filepatcher.exe test.txt 0x00 0x40
إن أردت أن يقوم بالتعديل على بيانات أكثر فأخبرني لأضع الكود المصدري.
تحديث:
filepatcher_multibytes.exe test.txt 0x00 0x4041
0x00 == 0x41
0x01 == 0x40
يعدل على بيانات متعددة بدءا من العنوان الأول ,يعدل أيضا على قيمة مفردة كما في السابق.
شكرا جزيلا . اذا امكنك اعطائي code source البرنامج لمعرفة طريقة عمل الكود . لاستعماله في برامج اخرى . و جزاك الله خيرا
06-12-2021, 05:18 PM
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
class hexo {
public:
hexo() = default;
static unsigned short hextobyte(std::string hexstr) { //one at a time. == 0x00 ~ 0xFF
int cnt = 0, byte = 0;
char ch;
for (int i = (int)hexstr.length() - 1; i >= 0; i--)
{
ch = hexstr[i];
if (ch >= '0' && ch <= '9')
byte += (ch - '0') * (int)std::pow(16, cnt++);
else if (ch >= 'A' && ch <= 'F')
byte += (ch - 'A' + 10) * (int)std::pow(16, cnt++);
else if (ch >= 'a' && ch <= 'f')
byte += (ch - 'a' + 10) * (int)std::pow(16, cnt++);
else
return -1;
}
return byte;
}
static std::vector<unsigned short> hexstrtobytes(std::string hexstr) {
std::vector<unsigned short> hexbytes;
int cnt = 0;
hexstr = hexstr.substr(2, hexstr.length() - 1);
for (int i = (int)hexstr.length() - 2; i >= -1; i = i - 2)
if (i == -1)
hexbytes.push_back(hextobyte(hexstr.substr(0, 1)));
else
hexbytes.push_back(hextobyte(hexstr.substr(i, 2)));
return hexbytes;
}
};
int main(int argc, char const* argv[]) {
if (argc == 4) {
/*
* argv[1] == file name to patch.
* argv[2] == Patch Address
* argv[3] == Patch Value [must be the multiply of 2]
*/
std::cout << "File Name: " << argv[1] << std::endl;
std::cout << "Patch Start Address: " << argv[2] << std::endl;
std::cout << "Patch Value: " << argv[3] << std::endl;
std::istringstream addr(argv[2]);
std::vector<unsigned short> hexbytes = hexo::hexstrtobytes(argv[3]);
std::fstream binaryfile(argv[1], std::ios::in | std::ios::out | std::ios::binary);
int patchaddr;
//convert patch address from text to hex number.
addr >> std::hex >> patchaddr;
size_t arrlen = hexbytes.size();
for (size_t i = 0; i < arrlen; i++) {
binaryfile.seekp(patchaddr + i);
binaryfile << char(hexbytes[i]);
}
binaryfile.close();
}
else {
std::cout << "filepatcher.exe filetopatch patchaddress patchvalue" << std::endl;
std::cout << "\nEx: " << std::endl;
std::cout << " filepatcher.exe at4re.exe 0x4325 0x56789654" << std::endl;
}
system("pause"); //Works on Windows only
return 0;
}
أو من هنا
https://pastebin.com/8uWAjv2F
كلمة السر: AT4RETEAM
30-05-2022, 04:04 PM
يمكنك القيام بذلك بسهولة من خلال Qbytearray لو كنت تستخدم Qt