تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيفية التعديل على قيمه معينه داخل ملف هيكس
#21
لقد قمت بتعديل مثال "البحث عن 3 قيم وتعديل القيمة الثالثة" بحيث يقوم بحساب CRC-32 للملف بعد التعديل وتخزينها في المكان الذي أشرت إليه

كود :
Dim MyFileStream As IO.FileStream = Nothing

Try
    'تعريف مسار الملف
    MyFileStream = New IO.FileStream("D:\test.exe", IO.FileMode.Open, IO.FileAccess.ReadWrite)

    'مصفوفة من البايت بحجم الملف
    Dim Buffer(MyFileStream.Length - 1) As Byte

    'المصفوفة المراد البحث عنها داخل الملف
    Dim Find As Byte() = {&HFF, &HFF, &H10}

    'قرائة الملف حتي النهاية
    MyFileStream.Read(Buffer, 0, Buffer.Length)

    Dim Index As Integer = 0
    Do
        Index = SearchByteArray(Buffer, Find, Index)

        If Index <> -1 Then
            'اسنبدال القيمة الثالثة بقيمة جديدة
            Buffer(Index + 2) = &HFF
        End If
    Loop Until Index = -1

    'الانتقال لبداية الملف
    MyFileStream.Seek(&H0, IO.SeekOrigin.Begin)

    'كتابة المصفوفة للملف بعد التعديل
    MyFileStream.Write(Buffer, 0, Buffer.Length)

    'للتأكد من أنه تم كتابة كل البيانات للملف
    MyFileStream.Flush()

    'حساب CRC-32 للملف بعد التعديل وتحويله لمصفوفة من البايت
    Dim CRCBytes As Byte() = BitConverter.GetBytes(CRC32.ComputeChecksum(Buffer))

    'الانتقال لموقع حفظ CRC-32
    MyFileStream.Seek(&HC, IO.SeekOrigin.Begin)

    'كتابة قيمة CRC-32 الجديدة للملف بعد التعديل
    MyFileStream.Write(CRCBytes, 0, CRCBytes.Length)

Finally
    If MyFileStream IsNot Nothing Then MyFileStream.Close()
End Try

وهذا كود Crc32 - منقول

كود :
Public Class Crc32
    Shared table As UInteger()

    Shared Sub New()
        Dim poly As UInteger = &HEDB88320UI
        table = New UInteger(255) {}
        Dim temp As UInteger = 0
        For i As UInteger = 0 To table.Length - 1
            temp = i
            For j As Integer = 8 To 1 Step -1
                If (temp And 1) = 1 Then
                    temp = CUInt((temp >> 1) Xor poly)
                Else
                    temp >>= 1
                End If
            Next
            table(i) = temp
        Next
    End Sub

    Public Shared Function ComputeChecksum(bytes As Byte()) As UInteger
        Dim crc As UInteger = &HFFFFFFFFUI
        For i As Integer = 0 To bytes.Length - 1
            Dim index As Byte = CByte(((crc) And &HFF) Xor bytes(i))
            crc = CUInt((crc >> 8) Xor table(index))
        Next
        Return Not crc
    End Function
End Class

المصدر: Calculate CRC32 of an String or Byte Array
الرد }}}
تم الشكر بواسطة: محمديات
#22
لا ادري ما هي المشكله هنا

[صورة مرفقة: 356143508.png]
الرد }}}
تم الشكر بواسطة:
#23
[صورة مرفقة: 939592936.png]

وعلى فكره انا شغال على 2013 vb.net
والبرنامج تم عمله على .net freamwork 4
ولا ادري ما المشكله
الرد }}}
تم الشكر بواسطة:
#24
(21-05-14, 06:54 PM)محمديات كتب : [صورة مرفقة: 939592936.png]

وعلى فكره انا شغال على 2013 vb.net
والبرنامج تم عمله على .net freamwork 4
ولا ادري ما المشكله

ارجع إلي هذه المشاركة التي فيها البحث عن 3 قيم وتعديل القيمة الثالثة وانسخ كود البحث داخل مصفوفة عن مصفوفة آخرى

ملاحظة: لقد قمت بتعديل كل الاكواد في جميع المشاركات بحيث أصبحت أبسط وأصغر
الرد }}}
تم الشكر بواسطة: محمديات
#25
تمام واضح سوف اقوم بالتجربه والرد عليك
الرد }}}
تم الشكر بواسطة:
#26
ممتاااااااااااااز وشكرا لك للمجهود الطيب لكن المشكله ان ال crc لا يعطي القيم اللي انا طالبها بالظبط لأن المشكله لا اعرف نوع ال crc المستخدمه في مثل هذه الملفات ولن نتطرق له الن حتى اتاكد من crc صحيح اريد استخدامه


اما بالنسبه واجهتني مشكله في الكود هذا لا ادري لماذا وشكرا لك
[صورة مرفقة: 758516469.png]
الرد }}}
تم الشكر بواسطة:
#27
(21-05-14, 10:36 PM)محمديات كتب : اما بالنسبه واجهتني مشكله في الكود هذا لا ادري لماذا وشكرا لك
[صورة مرفقة: 758516469.png]

هذا حل لمشكلتك Smile

كود :
Dim Find As Byte() = {&HFF, &HFF, &H10}

If IsArraysEqual(Find, {&HFF, &HFF, &H10}) Then
    MsgBox("الحالة الأولى")
ElseIf IsArraysEqual(Find, {&H5E, &H5, &H64}) Then
    MsgBox("الحالة الثانية")
Else
    MsgBox("الحالة الثالثة")
End If

وهذا الكود المستخدم للتحقق من أن المصفوفتين متساويتين

كود :
Function IsArraysEqual(ByVal ArrayA As Byte(), ByVal ArrayB As Byte()) As Boolean
    If ArrayA.Length <> ArrayB.Length Then
        Return False
    Else
        Dim Counter As Integer = 0
        For I As Integer = 0 To ArrayA.Length - 1
            If ArrayA(I) = ArrayB(I) Then
                Counter += 1
            Else
                Exit For
            End If
        Next

        Return (Counter = ArrayA.Length)
    End If
End Function
الرد }}}
تم الشكر بواسطة: محمديات
#28
شكرا لمتابعتك لي اخي الحبييييييييييييييييييييييييييييييب جدا Motaz Alnuweiri واتمنى اقدر ارد جميلك هذا علي وسوف اجرب واوفيك بالنتيجه
الرد }}}
تم الشكر بواسطة:
#29
(22-05-14, 04:26 PM)محمديات كتب : شكرا لمتابعتك لي اخي الحبييييييييييييييييييييييييييييييب جدا Motaz Alnuweiri واتمنى اقدر ارد جميلك هذا علي وسوف اجرب واوفيك بالنتيجه

العفو أخي محمديات Smile
الرد }}}
تم الشكر بواسطة: محمديات
#30
1- بالنسبه لل crc وجدت برنامج يقوم بعمله بالطريقة الصحيحه ويكتب ال crc المناسب للملف والملف يعمل بطريقه صحيحه انا رفعت البرنامج لمعرفة نوع ال crc او الطريقة التي يتبعها في حساب ال crc او على الأقل طريقة دمجه داخل برنامجي ليعمل في الخلفية ويعدل ال crc Smile

2- عندي مشكله عند البحث بالهكس عن مجموعة بايت بجوار بعضهم اريد ان اظهر كل قيمة منهم في صندوق فيظهرون عندي بصيغة الأرقام ولا يظهرون بصيغة الهيكس وانا اريدهم يظهرون بصيغة الهيكس والكود المستخدم
كود :
Dim Buffer(MyFileStream.Length - 1) As Byte
            Dim Find As Byte() = {&H46, &H3, &HFF, &HF}
            MyFileStream.Read(Buffer, 0, Buffer.Length)
            If IsArraysEqual(Find, {&H46, &H3, &HFF, &HF}) Then
                Dim Index As Integer = 0
                Do
                    Index = SearchByteArray(Buffer, Find, Index)

                    If Index <> -1 Then

                        TextBox2.Text = Buffer(Index + 0)
                        TextBox3.Text = Buffer(Index + 1)
                        TextBox4.Text = Buffer(Index + 3) & Buffer(Index + 2)

                    End If
                Loop Until Index = -1

هذا ناتج الكود

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

ولكن من الفترض او المطلوب انه يظهر القيم الحقيقة مثل

[صورة مرفقة: 137951218.png]
ومكانهم بالملف الهيكس

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

مع العلم اني استخدمة خاصية البحث اللي حضرتك شرحتها علشان اعرف مكانه على ال buffer
ولكن ما الحل لأنه في النهاية المظهر اللي من المفترض ان يخرج

[صورة مرفقة: 930772012.jpg]

مع امكانية عمل swap بالضغط على زر وليكن مثلا لنقل مربع ازرق مكان مربع ازرق اخر في نفس الملف

واسف اني اطلت عليك اخي الحبيب والمحبوب Smile

Motaz Alnuweiri
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] كيفية عمل جدولين في نفس التقرير مختار الوافي 3 489 05-04-26, 02:51 PM
آخر رد: مصمم هاوي
  [سؤال] كيفية عمل ارشيف للملفات المحفوظة عاصم النجار 5 2,393 25-02-26, 04:04 AM
آخر رد: السودي
  كيفية منع ظهور الأخطاء من إعدادات البيسيك mmaalmesry 2 1,049 29-08-25, 10:30 AM
آخر رد: mmaalmesry
  [سؤال] طريقة توسيط النص داخل اداة comboBox سمير1404 7 4,222 24-08-25, 01:01 PM
آخر رد: أبو خالد الشكري
  كيفية جلب أسماء الأعمدة بجدول من جداول sql heem1986 2 952 17-08-25, 09:15 PM
آخر رد: heem1986
  كيفية حفظ إعدادات البرنامج بحيث لا تتغير أحمد إبراهيم سعد 4 3,335 06-08-25, 06:34 PM
آخر رد: Taha Okla
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,823 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  كيفية احتساب الفرق بين تاريخين بناء على عدد معين مصمم هاوي 2 762 15-01-25, 02:02 PM
آخر رد: مصمم هاوي
  كيفية التعامل مع inputbox في فيجوال ستوديو أسامة حسين 4 3,758 14-01-25, 02:04 AM
آخر رد: أبو خالد الشكري
  استدعاء من جدولين داخل اداه FlowLayoutPanel برجاء الافادة للضرورة جداً modymody300894 7 924 15-11-24, 11:02 AM
آخر رد: modymody300894

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


يقوم بقرائة الموضوع: