Hex bytes umschreiben

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Warfley.

    Mit ReadAllBytes() die Exe einlesen und dann das Byte an Array Position 736 (Dezimal) (oder 735 wegen Nullbasierung) in den ensprechenden Wert ändern, wieder Dezimal.
    anschließend mit WriteAllBytes() zurück in die Datei schreiben.
    So kannst Du punktgenau Deine Werte patchen:

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(&H2E0, IO.SeekOrigin.Begin)
    3. sw.WriteByte(72)
    4. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    So kannst Du punktgenau Deine Werte patchen:

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(&H2E0, IO.SeekOrigin.Begin)
    3. sw.WriteByte(72)
    4. End Using

    danke könntest du mir das nich genau erklären wie es geht iwie verstehe ich das noch nicht so bin noch neu in vb

    Dodo schrieb:

    Dafür gibt es MSDN, die Befehl und Klassen Referenz für das .NET Framework, da steht alles ausführlich beschrieben falls mal eine Methode nicht kennst oder nicht weiß was an sie übergeben sollste

    FileStream - msdn.microsoft.com/de-de/library/y0bs3w9t.aspx
    Seek - msdn.microsoft.com/de-de/libra…m.io.filestream.seek.aspx
    WriteByte - msdn.microsoft.com/de-de/libra…filestream.writebyte.aspx

    verstehe es leider nicht ganz
    Wieso? Das doch deutsch O.o was versteht man daran nicht?

    Okay veranschauliche ich es mal:

    Der FileStream ist ein leeres Buch, gibst du dem FileStream eine Datei an, so wird das Buch mit Wörtern, also Inhalt gefüllt.
    Nun wird der Seek Befehl ausgeführt welcher z.B. jetzt das Buch zu Seite 30 blättert.
    Der Befehl WriteByte ändern nun den Text auf der aktuellen Seite, also Seite 30.

    Aber allgemein und unabhängig von diesem Beispiel kann ich dir nur raten die Grundlagen zu lernen, dann solltest auch bei den Beschreibungen auf MSDN keine Probleme mehr haben, hierzu gibts genügend im Netz wie z.B. openbook.galileocomputing.de/vb_net/ und auch weiterführende Literatur.
    @Dodo:Schon wieder so einer :D

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(&H2E0, IO.SeekOrigin.Begin)
    3. sw.WriteByte(72)
    4. End Using

    Using - laufzeitmäßig begrenztes Bereitstellen einer Instanz von IDisposable-Etwas (IDisposable wird jetzt nicht erklärt)
    FileStream - eine Instanz, die Dir Zugriff auf Deinen File erlaubt, wird geöffnet, nicht aber erstellt, um da reinschreiben zu können.
    Seek - freie Positionierung im File, hier Byte 736 (nullbasiert) von vorn
    WriteByte - Schreiben des Bytes mit dem Wert 72 an die ausgewählte Position
    End Using - aufräumen der FileStream-Instanz
    ------------------------------------
    Und nun Marsch an Deine Hausaufgaben - Grundlagen lernen.
    Wo: Siehe Links von Dodo.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @Dodo:Schon wieder so einer :D

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("path", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(&H2E0, IO.SeekOrigin.Begin)
    3. sw.WriteByte(72)
    4. End Using

    Using - laufzeitmäßig begrenztes Bereitstellen einer Instanz von IDisposable-Etwas (IDisposable wird jetzt nicht erklärt)
    FileStream - eine Instanz, die Dir Zugriff auf Deinen File erlaubt, wird geöffnet, nicht aber erstellt, um da reinschreiben zu können.
    Seek - freie Positionierung im File, hier Byte 736 (nullbasiert) von vorn
    WriteByte - Schreiben des Bytes mit dem Wert 72 an die ausgewählte Position
    End Using - aufräumen der FileStream-Instanz
    ------------------------------------
    Und nun Marsch an Deine Hausaufgaben - Grundlagen lernen.
    Wo: Siehe Links von Dodo.
    habe es so versucht wem man buuton Clickt

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("test.exe", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(0x00050, IO.SeekOrigin.Begin)
    3. sw.WriteByte(30)
    4. End Using

    Test.exe die datei die er schreiben soll

    0x00050 welche stelle er ändern soll z.b 0x00050= 2A


    und 30 soll dan da stehen wo 2A steht ?

    wen ja klappt es so nicht habe es versucht

    Edit by der_Kurt:
    Die Farbe ROT darf nur von den Moderatoren verwendet werde - siehe Boardregeln
    * Farbe geändert *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Ich habe mich falsch ausgedrückt:
    VB Erwartet das 10er System nicht das 16er

    Natürlich kann man als 16 system angeben, dann wird es auch erkannt(wär ja auch dumm wenn ned, da gerade das Hexadec system im info bereich sehr oft zum einsatz kommt)

    Dodo schrieb:

    VB Arbeit mit jedem System, wenn man es entsprechend deklariert, Dezimal einfache Zahlen, möchte man Hex Werte schreiben muss man es so angeben wie im Beitrag von Rod

    [VB 2010] Hex bytes umschreiben

    Wieso du den genannten Code kopierst, den Wert jedoch nicht in diesem Format übernimmst ist mir eh rätselhaft.

    Ich Verstehe das nicht so ganz den code gabst du mir ja so, habe ihn an einer form mit button reingemacht und das rot makierte angepasst.

    VB.NET-Quellcode

    1. Using sw As New System.IO.FileStream("test.exe", IO.FileMode.Open, IO.FileAccess.Write)
    2. sw.Seek(0x00050, IO.SeekOrigin.Begin)
    3. sw.WriteByte(30)
    4. End Using
    sw.Seek(0x00050, IO.SeekOrigin.Begin)

    da ist dein fehler
    Du hast eine hexadec zahl geschrieben ohne diese als solche zu kenzeichnen(&H50)

    Edit by der_Kurt:
    Die Farbe ROT darf nur von den Moderatoren verwendet werde - siehe Boardregeln
    * Farbe geändert *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Warfley schrieb:

    da ist dein fehler
    Du hast eine hexadec zahl geschrieben ohne diese als solche zu kenzeichnen(&H50)

    Hat er schon gemacht :D
    Er hat nur die C#-Schreibweise für Hex-Zahlen verwendet.
    VB - &h123
    C* - 0x123 (C, C++, C#)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!