Seite 1 von 1

ganze exe/avi/jpg Datei auslesen...

Verfasst: 21.10.2007 21:39
von pede
Hallo.

Wie schafft man es eine exe/Jpg/avi ect Datei vollständig auszulesen und den Inhalt in einem String zu speichern?
Das Problem ist, dass immer nur die ersten 2 oder 3 Zeichen der Datei ausgelesen werden...

Ich brauch das, um die Dateien verschlüsseln zu können!

So klappt es nicht:

Code: Alles auswählen

If ReadFile(#datei_auslesen, pfad$)
        
        laenge = Lof(#datei_auslesen)
        If laenge
            *mem = AllocateMemory(laenge)
            ReadData(#datei_auslesen, *mem, laenge)
            Datei_Inhalt$ = PeekS(*mem, laenge)
            CloseFile(#datei_auslesen)
        EndIf
    EndIf
Bei Text/ini ect. Dateien funktioniert es jedoch!

mfg
Pede

Verfasst: 21.10.2007 21:44
von #NULL
die daten sind schon im buffer. nur das auslesen ist nullterminiert. und 'ne 0 taucht in binären dateien nun mal recht schnell auf.

Verfasst: 21.10.2007 22:25
von pede
#NULL hat geschrieben:die daten sind schon im buffer. nur das auslesen ist nullterminiert. und 'ne 0 taucht binären dateien nun mal recht schnell auf.
hä? das versteh ich nicht... :oops:
mit Notepad kann man so ne Datei doch auch öffnen...
Und die Zeichen, die da dargestellt werden, sind doch keine Binärdaten..
Es kommen doch haufenweiße komische Zeichen vor?!
Ein kleiner Ausschnitt aus ner exe:
Y‹Æ^Â V‹ñè öD$tVè³
Und wie kann ich das Problem dann beheben?

Sry, ich checks nich... :oops:

lg

Verfasst: 21.10.2007 22:29
von X0r
Du willst eine Datei verschlüsseln und den Inhalt in einem String speichern? Verrückt.

Wie wäre es mal mit:

Code: Alles auswählen

if readfile(0,"Program.exe")

while not eof(0)
debug readbyte(0)

wend
closefile(0)
endif
Eine einfache Verschlüsselungsmethode:

Code: Alles auswählen

if readfile(0,"Program.exe")
createfile(1,"Program_crypt.exe")

while not eof(0)
byte=readbyte(0)

writebyte(1,byte+1)


wend
closefile(0)
closefile(1)
endif

Achtung, nicht getestet!
Du musst die Datei mit ReadByte auslesen, den Bytewert z.b nach der obigen Methode "verschlüsseln" und sie auch wieder mit Writebyte erstellen.

Verfasst: 21.10.2007 22:35
von Kurzer
pede hat geschrieben:...Sry, ich checks nich... :oops: lg
Pede, in einem String darf kein 0 Byte [chr(0)] vorkommen, weil dieses Byte das Ende eines Strings markiert.
Wenn die eingelesene Binärdatei also an der 5ten Stelle ein 0-Byte aufweist, dann werden, wenn Du das ganze in einen String einliest und den String 'printen' läßt, nur die ersten 4 Zeichen angezeigt.

@Xor:
writebyte(1,byte+1)
Und was machst Du, wenn byte = $ff ist? Da wirds doch dann zu $100.

Verfasst: 21.10.2007 22:43
von pede
:?
Xor: ich glaub das hast du falsch verstanden, oder ich versteh deine Aussage nicht

Einen verschlüsslungsalgorithmus hab ich schon!
Eine Text-Datei kann ich schon verschlüsseln, und zwar so, dass die Datei ausgelesen wird --> in den String "Datei_Inhalt$" und dieser dann mit einem einfachen Xor Algo :mrgreen: verschlüsselt wird...

Bei Binärdateien tritt aber eben nun das Problem auf, dass nicht die ganze Datei eingelesen wird, sondern nur, soweit ich jetzt #Null verstanden habe, bis zum ersten Nullbyte, das in Binärdateien öfters vorkommt!
Anstatt die ganze Datei zu verschlüsseln werden meinetwegen nur 10 Zeichen verschlüsselt...

Und das Problwm möcht ich lösen!
Ich hoff ich hab mich verständlich ausgedrückt, wenn nicht tuts mir leid

lg

Edit: das mit den Nullbytes hab ich jetzt verstanden, danke :allright:
Aber wie kann ich das Problem dann beheben?

Verfasst: 21.10.2007 22:50
von Kurzer
Du hast doch die Datei lt. Deinem obigen Code schon in einen allokierten Speicherbreich gelesen. Verschlüssle ihn dort und schreib den Speicherbereich einfach in eine neue Datei. Du musst da nichts mit Strings machen.

Verfasst: 21.10.2007 22:59
von pede
jo das klingt gut, werd ich gleich morgen probieren

und wenns nicht klappt, meld ich mich einfach wieder! :D

Verfasst: 21.10.2007 23:10
von X0r
@Kurzer:

Geht natürlich nur von -128 bis 127. Muss man halt prüfen. Meins war ein grobes sample.