Hexeditor & Memoryviewer

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Dadido3
Beiträge: 103
Registriert: 24.02.2007 22:15
Kontaktdaten:

Hexeditor & Memoryviewer

Beitrag von Dadido3 »

Tag auch,

Lange ist's her, dass ich an diesem Projekt gearbeitet habe.
Nun hab ich mich die letzten Wochen mal hingesetzt und habe es von Grund auf neugeschrieben.
Der Clou an diesem Editor ist, dass man in diesem den Datenstrom komplett frei steuern kann.
Somit kann man verschiedene Datenquellen mit verschiedenen Darstellungs/Verarbeitungsobjekten verbinden.
Bzw. könnte man mit einem Netzwerkobjekt über verschiedene Rechner hinweg Daten manipulieren/anzeigen.
Oder eine Diskrete Fourier Transformation einer Datenquelle machen, und diese in einem Graph plotten.
Die Möglichkeiten sind endlos, leider nicht die aktuelle Zahl an verfügbaren Objekten.
Dies wird sich aber hoffentlich bald ändern.

Bild

Anwendungsbeispiele:
Benutzen des Netzwerk Terminals: http://youtu.be/5pLZ3XWtc34
  • Features:
  • Komplett Node-Basiert
  • Schnelles Lesen, Schreiben und Bearbeiten von Datenquellen
  • Datenmengen von maximal 9,223EB (Exa Byte) verarbeitbar, auch unter x86
  • Speichern und Laden kompletter Node-Konfigurationen
  • Undo und Redo
  • Nodes:
  • Editor:
    Hiermit lassen sich Datenquellen wie mit jedem anderen Hexeditor manipulieren
    Suchen/Ersetzen wird hiermit realisiert
  • Datei:
    Stellt eine Datei als Datenquelle zur Verfügung
  • Historie:
    Verwaltet Undo und Redo Operationen, und macht Operationen möglich,
    welche viele Daten verschieben.
  • Zufall:
    Stellt eine beliebige Datenmenge von Zufallszahlen als Datenquelle zur Verfügung
  • Dummy:
    Stellt eine virtuelle Datenquelle zur Verfügung.
    Diese ist persistent in jeder Node-Konfiguration.
  • Process:
    Virtueller Speicher von Prozessen wird als Datenquelle verfügbar gemacht,
    wobei im Editor nur lesbare Segmente angezeigt werden.
  • Network Terminal:
    Stellt eine Verbindung zu einem Server als Datenquelle/Datensenke zur Verfügung.
  • Ideen für Nodes:
  • Datenquellen verifizierer:
    Prüfen ob Verhalten von angeschlossenen Datenquellen der Spezifikation entspricht.
  • zweidimensionales Anzeigeelement:
    Oder einfach: Bildanzeige von 2 dimensionalen Arrays
  • dreidimensionales Anzeigeelement?
  • Abbildung der Daten auf Hilbert-Fraktal:
    Ausgabe könnte ein zweidimensionales Array sein, welches mit Hilfe des zweidimensionalen Anzeigeelements dargestellt werden könnte.
  • Sonstige Analysefunktionen:
    Byteverteilung, Vergleich, Checksummen
  • Mathematische Operationen:
    +, -, *, /, ...
  • Logische Operationen:
    Or, And, XOr, ...
  • Korrellation / Autokorrellation
  • Diskrete Fourier Transformation
  • Disassembler:
    x86, x64, 6809, AVR, ...
  • Audiowiedergabe:
    Wiedergabe von eindimensionalen Daten als Sound.
    Macht zum Beispiel sinn zum wiedergeben von rohen Audiodaten, welche mit Hilfe eines
    Dekodierelements gewonnen wurden.
  • Dekodierelement für geläufige Formate:
    JPEG, PNG, WAV, MP3, ....
  • Named Binary Tags:
    Die Node-Konfigurationen werden in diesem Format gespeichert, somit wäre es nicht schlecht,
    wenn dieses auch im Hexeditor zu manipulieren wäre.
  • Cheat-Engine ähnliche analyse von Veränderungen.
    Macht sinn im Verbund mit Objekt zur bereitstellung des virtuellen Speichers von Prozessen.
  • Bereitstellung der Rohdaten von logischen/physikalischen Datenträgern als Datenquelle
  • Signalgeneratoren:
    Erzeugen von Daten bestimmter Form (Sinus, Dreieck, ...) und beliebigem Datentyps (Float, Integer, ...)
  • Splitter:
    Aufteilen von einer Datenquelle in kleinere Datenquellen
  • Array-Splitter:
    Aufteilen eines 1,2,3,...-dimensionalen Arrays in teile von diesem.
  • Copy:
    Kopiert Daten von einem Eingang zu anderem Eingang
  • Netzwerk:
    Verbindet Datenquellen/Datensenken verschiedener Rechner miteinander, als wären diese lokal vorhanden.
  • Lua-Scriptable:
    Manipulation von Daten via Lua-Script.
Download: >>> Neuste Version auf GitHub <<<

Viel Spass damit
Zuletzt geändert von Dadido3 am 21.03.2017 14:13, insgesamt 10-mal geändert.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Hexeditor & Memoryviewer

Beitrag von TomS »

Kannst du das Bild bitte als Thumbnail reinstellen? ;)
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Re: Hexeditor & Memoryviewer

Beitrag von Dostej »

Cool, sieht gut aus.
Life das evtl. auch auf Linux (d.h. kannst Du das auch für Linux kompilieren?)
Das wäre super...
iostream
Beiträge: 109
Registriert: 15.06.2008 12:59

Re: Hexeditor & Memoryviewer

Beitrag von iostream »

Was mir spontan aufgefallen ist:
- Dein Menü ist z.T. zweisprachig
- Es gibt kein Edit-Menü
OS: Windows 8.1 Pro
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: Hexeditor & Memoryviewer

Beitrag von mpz »

Hallo,

jaaaa ich brauche das Programm und ich oute mich hier als hexeditor Fan. Mein derzeitiges Programm stammt noch aus der guten alten Windows 95 Zeit, funktioniert aber auch noch unter Windows XP etc.

Leider funktioniert der Edit Modus noch nicht in Deinem Programm. Man kann zwar das Fenster "umschalten auf schreibmodus" aktivieren, aber nicht benutzen. Wäre toll wenn das bald ginge. Kann man in Zukunft auch den Ram Spreicher editieren?!? Wär eine interessante Möglichkeit >:)

Ansonsten danke :allright:

Gruß Michael
Working on - MP3D Engine -
Benutzeravatar
Dadido3
Beiträge: 103
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: Hexeditor & Memoryviewer

Beitrag von Dadido3 »

iostream hat geschrieben:Was mir spontan aufgefallen ist:
- Dein Menü ist z.T. zweisprachig
- Es gibt kein Edit-Menü
Das Programm ist noch (lange) nicht fertig.
Die fehlenden Menüs & andere Kleinigkeiten werden bald ergänzt.
(Falls ich Zeit und Lust finde)

Dostej hat geschrieben:Cool, sieht gut aus.
Li(e)fe das evtl. auch auf Linux (d.h. kannst Du das auch für Linux kompilieren?)
Das wäre super...
Da ich einiges an Win-API verwende, wird das mit der Linux-Version wahrscheinlich nichts.
Selbst wenn ich das bearbeiten von Prozessen weglasse,
wird immernoch ein wenig Win-API für die Eingabe / Events benötigt.

mpz hat geschrieben:Leider funktioniert der Edit Modus noch nicht in Deinem Programm. Man kann zwar das Fenster "umschalten auf schreibmodus" aktivieren, aber nicht benutzen. Wäre toll wenn das bald ginge.
Der Edit modus sollte funktionieren. Je nach dem welche Seite du markiert hast, kannst du entweder hex-Werte oder Ascii-Zeichen eingeben.
Oder du hast versucht in eine schreibgeschützte Datei bzw. einen schreibgeschützen Prozess(bereich) zu schreiben?

mpz hat geschrieben:Kann man in Zukunft auch den Ram Spreicher editieren?!? Wär eine interessante Möglichkeit >:)
Ich hörte mal in den Weiten des Netzes von einer DLL, welche zugriff auf den Physikalischen Arbeitsspeicher liefert.
Wenn ich diese finde, könnte ich sie einbauen.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: Hexeditor & Memoryviewer

Beitrag von mpz »

Ups,

Dein Programm kann doch speichern. Die Datei war gerade in Benutzung daher schreibgeschützt. Das mit den Arbeistspeicher sollte gar nicht sooo schwierig sein. Ich habe Dir mal das "GDI image finder" Programm rausgesucht. Damit kann man einfach Bilder auslesen über eine Ramadresse und dem Winapi Befehl GetObjectType_(hBmp) = #OBJ_BITMAP

hier gibt es noch

#OBJ_REGION = Region
#OBJ_DC = Device context
#OBJ_MEMDC = Memory device context

und wer bekanntlich lesen kann sollte auch schreiben können (ist so meine Theorie). Läuft auch unter PB 4.51 und höher

Gruß Michael

Code: Alles auswählen

;GDI image finder
;================
; This source is released under zlib-licence
; Durchsucht das Betriebssystem nach Bildern

DisableDebugger

OpenWindow(1,0,0,800,600,"GDI image finder")

StopButton = ButtonGadget(#PB_Any,0,0,100,20,"Stop")
InputGadget = StringGadget(#PB_Any,200,0,100,20,"")
SaveButton = ButtonGadget(#PB_Any,300,0,100,20,"Save")

TABPOS = 1
PanelGadget(0, 0, 20, 800, 580)
 
 
  AddGadgetItem (0, -1, "Img"+Str(TABPOS))
  InnerWidth = GetGadgetAttribute(0, #PB_Panel_ItemWidth)
  InnerHeight = GetGadgetAttribute(0, #PB_Panel_ItemHeight)
  ImgWidth = InnerWidth
  ImgHeight = 1
 
  ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
   
    Repeat

     
      If hBmp < $7FFFFFFF
        hBmp + 1
        If GetObjectType_(hBmp) = #OBJ_BITMAP
          Found + 1
          bmp.BITMAP
          GetObject_(hBmp,SizeOf(BITMAP), bmp)
         
          ImageGadget(#PB_Any, 0, ImgHeight, bmp\bmWidth, bmp\bmHeight, hBmp)
          TextGadget(#PB_Any , bmp\bmWidth + 16, ImgHeight, 200, 16, Str(hBmp))
         
          If bmp\bmWidth + 16 + 200 > ImgWidth
            ImgWidth = bmp\bmWidth + 16 + 200
            SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerWidth, ImgWidth)
          EndIf
         
          ImgHeight + bmp\bmHeight + 16
          SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerHeight, ImgHeight)
        EndIf
       
        If ImgHeight => 32000
          TABPOS + 1
          ImgHeight = 1
          AddGadgetItem (0, -1, "Img"+Str(TABPOS))
          ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
          EndIf
         
          Count + 1
        Else
          Count = 0
        EndIf
       
       
        If Count % 10000 = 0 Or hBmp >= $7FFFFFFF
          Repeat
            If hBmp < $7FFFFFFF
              SetWindowTitle(1, "GDI image finder " + Str(hBmp) + "/" +Str($7FFFFFFF) + "  Found:" + Str(Found))
            EndIf
            Event = WindowEvent()
            If Event = #PB_Event_CloseWindow :Quit = #True:EndIf
           
            If Event = #PB_Event_Gadget
              If EventGadget() = StopButton:hBmp = $7FFFFFFF:EndIf
             
              If EventGadget() = SaveButton
                Bitmap = Val(GetGadgetText(InputGadget))
               
                If GetObjectType_(Bitmap) = #OBJ_BITMAP
                  bmp.BITMAP
                  GetObject_(Bitmap,SizeOf(BITMAP), bmp)
                  CreateImage(1,bmp\bmWidth,bmp\bmHeight, 32)
                  StartDrawing(ImageOutput(1))
                    DrawImage(Bitmap,0,0)
                  StopDrawing()
                  File$ = SaveFileRequester("Save as Bitmap","noname.bmp", "Bitmap(*.bmp)|*.bmp", 0)
                  If SaveImage(1, File$) =0
                    MessageRequester("ERROR","Can't save image!")
                  EndIf
                 
                Else
                  MessageRequester("ERROR","No valid BitmapID!")
                EndIf
               
               
               
              EndIf
             
            EndIf
           
           
          Until Event = 0
        EndIf
       
       
      Until Quit
Working on - MP3D Engine -
LCD
Beiträge: 107
Registriert: 23.01.2008 13:13
Wohnort: Wien

Re: Hexeditor & Memoryviewer

Beitrag von LCD »

Excellent, aber bei mir werden die Icons nicht angezeigt (AMD E-350 Nettop, 4 GB RAM, Win7 mit abgeschalteten visuellen Effekten). Mich würde auch interessieren wie man Speicherinhalte von Prozessen ausliest, weil ich Grafiken aus einen Emulator rippen wollte.
PB 4.61Beta1 32/64Bit. AMD FX6100, 8 GB RAM, ATI Radeon 5750, Win7 64 (64 bit ist mist weil 16-Bit Programme wie MakeTZX nicht mehr darauf funktionieren).
Benutzeravatar
Dadido3
Beiträge: 103
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: Hexeditor & Memoryviewer

Beitrag von Dadido3 »

Moin,

Ich hatte die letzten Wochen mal wieder an diesem Projekt gearbeitet.
Bzw. ich habe es neugeschrieben.

Weitere Informationen dazu im Startpost.

Edit: Ich hab gerade eben noch nen kleinen Crash-Bug mit UnbindEvent... beseitigt.
Neue Version ist online.


mfG

David
Benutzeravatar
Dadido3
Beiträge: 103
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: Hexeditor & Memoryviewer

Beitrag von Dadido3 »

Moin,

Ich habe soeben mal ein Update hochgeladen.

Neuigkeiten:
  • Process Node:
    Virtueller Speicher von Prozessen wird als Datenquelle verfügbar gemacht,
    wobei im Editor nur lesbare Segmente angezeigt werden.
  • Network Terminal Node:
    Stellt eine Verbindung zu einem Server als Datenquelle/Datensenke zur Verfügung.
  • Kleine geschwindigkeitsoptimierungen an der Suche.
    In manchen Fällen ist sie leider immernoch langsam, das wird aber noch behoben.
  • Der Editor Node hat jetzt einen Ausgang, an welchem markierte Daten ausgegeben werden.
    Es wird später noch ein Analyse-Node hinzugefügt, welchen man sinvollerweise daran anschließen kann.
    Dadurch kann man ganz bequem eine markierte Float-Zahl, UTF-x Strings oder sonstwas ansehen.
  • Viele kleine interne Verbesserungen.
Auch habe ich ein Beispielvideo erstellt, worin gezeigt wird, wie man mit Hilfe des Network Terminal Nodes Daten senden und empfangen kann.
Das Video lade ich morgen Nachmittag hoch. Es wird doch langsam zu spät.

Viel Spass damit.
Antworten