منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] كيفية التعديل على قيمه معينه داخل ملف هيكس - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] كيفية التعديل على قيمه معينه داخل ملف هيكس (/showthread.php?tid=2858)

الصفحات: 1 2 3 4


RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - Motaz Alnuweiri - 23-05-14

(23-05-14, 11:02 AM)محمديات كتب : 1- بالنسبه لل crc وجدت برنامج يقوم بعمله بالطريقة الصحيحه ويكتب ال crc المناسب للملف والملف يعمل بطريقه صحيحه انا رفعت البرنامج لمعرفة نوع ال crc او الطريقة التي يتبعها في حساب ال crc او على الأقل طريقة دمجه داخل برنامجي ليعمل في الخلفية ويعدل ال crc

والله أنا ما عندي خبرة بالـ Ckeck Sum وأنواع التشفير Blush

بالنسبة للتحويل لـ Hex يوجد طريقتين:

كود :
1- Conversion.Hex(Value)
2- Value.ToString("X")

مثال
كود :
'الطريقة الأولى
TextBox2.Text = Conversion.Hex(Buffer(Index + 0))

'الطريقة الثانية
TextBox3.Text = Buffer(Index + 1).ToString("X")

أما بخصوص إظهار مصفوفة البايت بالمقلوب يمكنك استخدام هذا الكود Smile

كود :
''' <summary>
''' تحويل مصفوفة البايت لنص
''' </summary>
''' <param name="Array">المصفوفة</param>
''' <param name="Reverse">اخراج الناتج بشكل مقلوب</param>
''' <param name="Hex">اظهار الناتج بالـ Hex</param>
''' <returns>قيمة المصفوفة علي شكل نص</returns>
Function ByteArrayToString(ByVal Array As Byte(), ByVal Reverse As Boolean, Optional ByVal Hex As Boolean = True) As String
    Dim Result As String = String.Empty

    If Reverse Then
        For I As Integer = Array.Length - 1 To 0 Step -1
            Result += If(Hex, Array(I).ToString("X"), Array(I).ToString())
        Next
    Else
        For I As Integer = 0 To Array.Length - 1
            Result += If(Hex, Array(I).ToString("X"), Array(I).ToString())
        Next
    End If

    Return Result
End Function

تطبيق للكود
كود :
TextBox2.Text = ByteArrayToString(Find, True)

(23-05-14, 11:02 AM)محمديات كتب : مع امكانية عمل swap بالضغط على زر وليكن مثلا لنقل مربع ازرق مكان مربع ازرق اخر في نفس الملف

ممكن توضيح أكثر، وهل سيتم التعديل على القيم قبل عمل swap لها ولا سوف تبقى كما هي؟


RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - محمديات - 23-05-14

لا لن يتم التعديل على القيم قبل ال swap فقط يتم التبديل بينهما


RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - Motaz Alnuweiri - 23-05-14

تفضل أخي Smile ، بخصوص Swap عند الضغط على زر

كود :
'تعريف متغيرات عامة
Dim MyBuffer As Byte()
Dim FilePath As String = "D:\test.exe"

'كود فتح الملف وتحميل بيانات الملف داخل MyBuffer
Private Sub OpenButton_Click(sender As System.Object, e As System.EventArgs) Handles OpenButton.Click
    Dim MyFileStream As IO.FileStream = Nothing

    Try
        'تعريف مسار الملف
        MyFileStream = New IO.FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.Read)

        'مصفوفة من البايت بحجم الملف
        Array.Resize(MyBuffer, MyFileStream.Length - 1)

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

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

'كود Swap
Private Sub SwapButton_Click(sender As System.Object, e As System.EventArgs) Handles SwapButton.Click
    If MyBuffer Is Nothing Then Return

    'المصفوفة 1 المراد البحث عنها داخل الملف
    Dim Find1 As Byte() = {&HB8, &H0, &H0, &H0}

    'المصفوفة 2 المراد البحث عنها داخل الملف
    Dim Find2 As Byte() = {&HE, &H1F, &HBA, &HE}

    'البحث عن المصفوفة الأولى
    Dim Index1 As Integer = SearchByteArray(MyBuffer, Find1, 0)

    'البحث عن المصفوفة الثانية
    Dim Index2 As Integer = SearchByteArray(MyBuffer, Find2, 0)

    If Not Index1 = -1 And Not Index2 = -1 Then
        'تبديل المصفوفة الأولى بالثانية
        For I As Integer = 0 To Find2.Length - 1
            MyBuffer(Index1 + I) = Find2(I)
        Next

        'تبديل المصفوفة الثانية بالأولى
        For I As Integer = 0 To Find1.Length - 1
            MyBuffer(Index2 + I) = Find1(I)
        Next
    End If
End Sub

'كود حفظ التغييرات للملف
Private Sub SaveButton_Click(sender As System.Object, e As System.EventArgs) Handles SaveButton.Click
    Dim MyFileStream As IO.FileStream = Nothing

    Try
        'تعريف مسار الملف
        MyFileStream = New IO.FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.Write)

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

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

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

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



RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - محمديات - 23-05-14

بالنسبه للكود الذي يظهر القيم بالمقلوب اريده ان يخرج قيمتين فقط ولكنه يخرج عندي قيم الصناديق السابقه + القيم المطلوبة

ومن المفترض ان يظهر فيالصندوق الثالث FFF0


RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - محمديات - 23-05-14

القيم التي سوف يتم تغييرها ليست ثابته في كل الملفات ولكن تتغير من ملف لأخر
كود :
'المصفوفة 1 المراد البحث عنها داخل الملف
    Dim Find1 As Byte() = {&HB8, &H0, &H0, &H0}

    'المصفوفة 2 المراد البحث عنها داخل الملف
    Dim Find2 As Byte() = {&HE, &H1F, &HBA, &HE}
ولذلك فاننا سوف نقوم بالبحث اولا عن القيم الموجوده الثابته وهي 46 ونترك بايت ونذهب للبايتين الثابتين اللذي يليه وهما ff 0f



وشكرا لك


RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - محمديات - 23-05-14






RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - Motaz Alnuweiri - 25-05-14

(23-05-14, 07:13 PM)محمديات كتب : القيم التي سوف يتم تغييرها ليست ثابته في كل الملفات ولكن تتغير من ملف لأخر
كود :
'المصفوفة 1 المراد البحث عنها داخل الملف
    Dim Find1 As Byte() = {&HB8, &H0, &H0, &H0}

    'المصفوفة 2 المراد البحث عنها داخل الملف
    Dim Find2 As Byte() = {&HE, &H1F, &HBA, &HE}
ولذلك فاننا سوف نقوم بالبحث اولا عن القيم الموجوده الثابته وهي 46 ونترك بايت ونذهب للبايتين الثابتين اللذي يليه وهما ff 0f



وشكرا لك

تفضل أخي Smile

كود :
Dim MyBuffer As Byte()
Dim FilePath As String = "D:\0B.bin"

Private Sub OpenButton_Click(sender As System.Object, e As System.EventArgs) Handles OpenButton.Click
    Dim MyFileStream As IO.FileStream = Nothing

    Try
        'تعريف مسار الملف
        MyFileStream = New IO.FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.Read)

        'مصفوفة من البايت بحجم الملف
        Array.Resize(MyBuffer, MyFileStream.Length - 1)

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

        Dim SearchIndex As Integer = 0
        Do
            SearchIndex = Array.IndexOf(Of Byte)(MyBuffer, &H46, SearchIndex)

            If SearchIndex <> -1 Then
                If (SearchIndex + 28) < MyBuffer.Length Then
                    Dim Index As Integer = SearchIndex

                    Dim Ckeck(1) As Byte
                    Index += 2
                    Array.ConstrainedCopy(MyBuffer, Index, Ckeck, 0, 2)

                    If IsArraysEqual(Ckeck, {&HFF, &HF}) Then
                        Dim Value1(2) As Byte
                        Index += Ckeck.Length + 2
                        Array.ConstrainedCopy(MyBuffer, Index, Value1, 0, 3)
                        TextBox1.Text = ByteArrayToString(Value1, True)

                        Dim Value2(2) As Byte
                        Index += Value1.Length + 1
                        Array.ConstrainedCopy(MyBuffer, Index, Value2, 0, 3)
                        TextBox2.Text = ByteArrayToString(Value2, True)

                        Dim Value3(2) As Byte
                        Index += Value2.Length + 1
                        Array.ConstrainedCopy(MyBuffer, Index, Value3, 0, 3)
                        TextBox3.Text = ByteArrayToString(Value3, True)

                        Dim Value4(2) As Byte
                        Index += Value3.Length + 1
                        Array.ConstrainedCopy(MyBuffer, Index, Value4, 0, 3)
                        TextBox4.Text = ByteArrayToString(Value4, True)

                        Dim Value5(2) As Byte
                        Index += Value5.Length + 1
                        Array.ConstrainedCopy(MyBuffer, Index, Value5, 0, 3)
                        TextBox5.Text = ByteArrayToString(Value5, True)

                        Dim Value6(2) As Byte
                        Index += Value5.Length + 1
                        Array.ConstrainedCopy(MyBuffer, Index, Value6, 0, 3)
                        TextBox6.Text = ByteArrayToString(Value6, True)

                        Exit Do
                    End If
                End If
            End If
        Loop Until SearchIndex = -1

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



RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - محمديات - 25-05-14

تمام اخي انا كنت حابب اني اضيف ايضا الثوابت في txtbox
يعني 46 في صندوق و 03 اللتي تتغير في صندوق وال ff0f الثابته في صندوق ولكن بالمقلوب و 00 في صندوق و07 في صندوق
ولاتنسى عمل الswap بين القيم اللتي باللون الزرق (قيم متغيره ) عن طريق مثلا نقل المربع الأزرق الأول مكان الثاني والعكس وايضا زر لنقل المربع الازرق الثالث مكان الاول

وشكرا لمساعدتك لي اخي معتز
ودعمك لي
ووضعه الله في ميزان حسناتك
Smile