Конвертировать из шестнадцатеричного кода в exe-файл в vb.net

У меня есть этот код в vb6, который может создать исполняемый файл из своего шестнадцатеричного кода. Я хочу сделать то же самое в vb.net.

Это мой код vb6:

Public Sub Document_Open()

    Dim str As String
    Dim hex As String

    hex = hex & "4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 B8 00 00 00 00 00 00 00" 
    hex = hex & "40 00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"

    'you have to put the full hex code of the application here

    Dim exe As String
    Dim i As Long
    Dim puffer As Long

    i = 1

    Do
        str = Mid(hex, i, 2)

        'convert hex to decimal
        puffer = Val("&H" & str)

        'convert decimal to ASCII
        exe = exe & Chr(puffer)

        i = i + 2

        If i >= Len(hex) - 2 Then
            Exit Do
        End If
    Loop

    'write to file
    Open "C:\application.exe" For Append As #2
    Print #2, exe
    Close #2

    'and run the exe
    Dim pid As Integer
    pid = Shell("C:\application.exe", vbNormalFocus)

End Sub

1 ответ

Было бы проще, если бы данные были определены как литерал байтового массива, например так:

Dim bytes() As Byte = {&H4D, &H5A, &H50,
                       &H0, &H2, &H0} ' etc...
File.WriteAllBytes("c:\application.exe", bytes)

Однако было бы лучше сохранить двоичные данные в ресурсе, а затем просто записать ресурс в файл, например так:

File.WriteAllBytes("c:\application.exe", My.Resources.Application_exe)

Если вам действительно нужно преобразовать его из шестнадцатеричной строки, вы можете сделать это следующим образом:

Dim hex As String = "4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 B8 00 00 00 00 00 00 00" &
                    "40 00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Using fs As New FileStream("c:\application.exe", FileMode.Create, FileAccess.Write)
    For Each byteHex As String In hex.Split()
        fs.WriteByte(Convert.ToByte(byteHex, 16))
    Next
End Using
Другие вопросы по тегам