2013-07-26 3 views
0

Я открывающий EXE-файл в Hex Workshop, и я хочу, чтобы редактировать эту строки:Hex Edit с BinaryWriter (VB.NET)

hex

Как это возможно с VB. NET с помощью BinaryWriter? Строка представляет IP-адрес exe. Я хочу иметь программу, которая включает текстовое поле, в которое вы помещаете новый IP-адрес. Итак, я до сих пор:

Using writer As BinaryWriter = New BinaryWriter(File.Open("C:\localhost.exe", FileMode.Open)) 
      writer.BaseStream.Position = ??? 
      writer.write??? 
      End Using 

Итак, в какую позицию я его устанавливаю и какой тип я пишу? Б? Благодарю.

+0

Возможно, вам стоит взглянуть на это: http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx или на другие коды: http: //www.dotnetperls. com/binarywriter-vbnet То, что вы просите, не кажется слишком трудным для выяснения после легкого чтения о BinaryWriter. – varocarbas

+0

Трудно интерпретировать IP как что-либо еще, кроме интеллектуальной собственности, обычно покрывается лицензионным соглашением, в котором говорится, что вы не можете этого сделать. Если вы имели в виду указатель инструкций, то обратите внимание, что вы фактически взламываете * данные * в этом файле, а не код. Если вы не знаете, где эти данные находятся в файле, то у вас нет больших шансов найти его. Кроме инструмента. Как шестнадцатеричный зритель. Для изменения файла требуется FileStream, используйте Seek + Write. –

ответ

0

Найти смещение первого символа в строке и использовать этот метод:

Private Sub Patch(ByVal TargetFile As String, ByVal FileOffset As Long, ByVal NewValue() As Byte) 
    Try 
     Dim br As BinaryReader = New BinaryReader(File.Open(TargetFile, FileMode.Open)) 
     br.BaseStream.Position = FileOffset 
     Dim byteB As Byte 
     For Each byteB In NewValue 
      If (byteB.ToString <> String.Empty) Then 
       br.BaseStream.WriteByte(byteB) 
      Else 
       Exit For 
      End If 
     Next byteB 
     br.Close() 
    Catch 
    End Try 
End Sub 

Как это:

Patch("C:\localhost.exe", Val("OFFSET OF FIRST CHARACTER IN STRING"), New Byte() {&H31, &H32, &H37, &H2e, &H30, &H2e, &H30, &H2e, &H38}) 

Или вместо того, чтобы ваш байт-массив, используйте:

System.Text.Encoding.ASCII.GetBytes("127.0.0.8") 'It'll change 127.0.0.1 to 127.0.0.8 

Просто убедитесь, что у вас есть правильный сдвиг для первого символа вашей строки

Смежные вопросы