الفريق العربي للهندسة العكسية
التعديل على ملفات bin - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بلغة السى و السى بلس بلس ++C & C (https://www.at4re.net/f/forum-17.html)
+--- الموضوع : التعديل على ملفات bin (/thread-2930.html)



التعديل على ملفات bin - aliouat50 - 05-12-2021

السلام عليكم 

اريد معرفة طريقة فتح ملفات .bin و تعديل عليها بدون استعمال hexeditor بلغة c++


RE: التعديل على ملفات bin - Polia - 06-12-2021

(05-12-2021, 10:39 PM)aliouat50 كتب : السلام عليكم 

اريد معرفة طريقة فتح ملفات .bin و تعديل عليها بدون استعمال hexeditor بلغة c++

وعليك السلام 
يستحسن ان تكون لديك دراية بلغتي Assembly Mips & Arm 32Bit 
ثانيا فتح الملف ببرنامج IDA PRO في الويندوز  او radare في بيئة اللينكس 
معرفة نقطة دخول entry point عمل ديبغ للملف 
بالتوفيق لك


RE: التعديل على ملفات bin - aliouat50 - 06-12-2021

شكرا على المعلومات . و لكن انا لا أبحث عن تفكيك الملفات . 

مثلا اريد تغيير او تنقيح بعض المعلومات ب hex في الملف بدون إستعمال winhex . فقط لتسهيل العملية لكي لا تفتح winhex كل مرة تريد تغيير نفس المعلومات


RE: التعديل على ملفات bin - Cyperior - 06-12-2021

تقصد بطريقة برمجية.

أبئمكانك وضع مثال للملف والتغيير الذي تريد.


RE: التعديل على ملفات bin - aliouat50 - 06-12-2021

مثلا تغيير قيمة 001 الى 000 باستعمال لغة سي بلوس بلوس 



[صورة مرفقة: Capture.png]


RE: التعديل على ملفات bin - Cyperior - 06-12-2021

الأمر بسيط

في المرفقات مثال يوضح ذلك.

كيفية الاستعمال

هناك ملف باسم 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

يعدل على بيانات متعددة بدءا من العنوان الأول ,يعدل أيضا على قيمة مفردة كما في السابق.


RE: التعديل على ملفات bin - aliouat50 - 06-12-2021

(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 البرنامج لمعرفة طريقة عمل الكود . لاستعماله في برامج اخرى . و جزاك الله خيرا


RE: التعديل على ملفات bin - Cyperior - 06-12-2021

#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


RE: التعديل على ملفات bin - wattan - 30-05-2022

يمكنك القيام بذلك بسهولة من خلال Qbytearray لو كنت تستخدم Qt