تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
التعديل على ملفات bin
#1
Lightning 
السلام عليكم 

اريد معرفة طريقة فتح ملفات .bin و تعديل عليها بدون استعمال hexeditor بلغة c++
أعضاء أعجبوا بهذه المشاركة : wattan
#2
(05-12-2021, 10:39 PM)aliouat50 كتب : السلام عليكم 

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

وعليك السلام 
يستحسن ان تكون لديك دراية بلغتي Assembly Mips & Arm 32Bit 
ثانيا فتح الملف ببرنامج IDA PRO في الويندوز  او radare في بيئة اللينكس 
معرفة نقطة دخول entry point عمل ديبغ للملف 
بالتوفيق لك
رَبِّ إِنِّي لِمَا أَنْزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ 
أعضاء أعجبوا بهذه المشاركة : aliouat50
#3
شكرا على المعلومات . و لكن انا لا أبحث عن تفكيك الملفات . 

مثلا اريد تغيير او تنقيح بعض المعلومات ب hex في الملف بدون إستعمال winhex . فقط لتسهيل العملية لكي لا تفتح winhex كل مرة تريد تغيير نفس المعلومات
أعضاء أعجبوا بهذه المشاركة :
#4
تقصد بطريقة برمجية.

أبئمكانك وضع مثال للملف والتغيير الذي تريد.
من طلب العلا ... سهر الليالي
أعضاء أعجبوا بهذه المشاركة : aliouat50
#5
مثلا تغيير قيمة 001 الى 000 باستعمال لغة سي بلوس بلوس 



[صورة مرفقة: Capture.png]
أعضاء أعجبوا بهذه المشاركة :
#6
الأمر بسيط

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

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

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

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


الملفات المرفقة
.zip   filepatcher.zip (الحجم : 14.73 KB / التحميلات : 35)
.zip   filepatcher_multibytes.zip (الحجم : 16.06 KB / التحميلات : 27)
من طلب العلا ... سهر الليالي
أعضاء أعجبوا بهذه المشاركة : aliouat50 , rce3033
#7
(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 البرنامج لمعرفة طريقة عمل الكود . لاستعماله في برامج اخرى . و جزاك الله خيرا
أعضاء أعجبوا بهذه المشاركة :
#8
#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
من طلب العلا ... سهر الليالي
أعضاء أعجبوا بهذه المشاركة : Untold , aliouat50 , rce3033 , Polia
#9
يمكنك القيام بذلك بسهولة من خلال Qbytearray لو كنت تستخدم Qt
أعضاء أعجبوا بهذه المشاركة :


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 3 ) ضيف كريم