Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dateigröße ändern ohne Inhalt (https://www.delphipraxis.net/140443-dateigroesse-aendern-ohne-inhalt.html)

stho 18. Sep 2009 08:00


Dateigröße ändern ohne Inhalt
 
Seid mir nicht böse aber ich habe erst vor kurzer Zeit angefangen zu Programmieren.

1.
Besteht die Möglichkeit eine Datei "künstlich" zu strecken?
Beispiel: Ich habe eine .exe mit 300 KB, möchte sie aber auf 1 MB, 5 MB oder 20 MB vergrößern ohne ihren Inhalt (sachlichen Inhalt, Funktionsumfang oder sinnlose Units einzubinden) zu ändern?
Lässt sich diese Datei nachher auch wieder ausführen?


2.
Kann ich eine (beispielsweise) textdatei erstellen die leer ist, aber eine gewisse größe hat?
(ja, die Frage währe eigentlich die selbe wie bei 1, doch ich habe keine ahnung was es da für Möglichkeiten gibt)

P.S.
Zu meinem Wissensstand: Etwas Erfahrung mit Delphi (7 Wochen)
Keine Ahnung vom Aufbau von Dateien




Vielen Dank schonmal
Liebe Grüße

himitsu 18. Sep 2009 08:08

Re: Dateigröße ändern ohne Inhalt
 
a) genau sowas hatten wir schonmal (versteckt sich z.B. irgendwo da Hier im Forum suchendatei erstellen)
> http://www.delphipraxis.net/internal...t.php?t=157806

b) auch hier nochmal: Wozu das Ganze?


1: worallem hier seh ich keinen Sinn dahinter
aber ja, die läßt sich dann noch ausführen

2: genau das Selbe ... eine Datei ohne Inhalt ist irgendwie sinnlos und Platzverschwendung
Lösung: einfach z.B. viele Leerzeichen drin abspeichern?



OK, Speicher wird immer billiger und wir haben "Unmassen" davon zur Verfügung, aber warum wollen alle ständig Diesen mit Nichts verschwenden?

stho 18. Sep 2009 08:16

Re: Dateigröße ändern ohne Inhalt
 
also ich bedanke mich schonmal :-) eine Antwort auf Frage 2 habe ich ja jetzt bekommen.
Ich habe mir daurch diese Frage eigentlich einen EInblick in Frage 1 erhofft.

Nun, es gibt ein schönes kleines Programm das sich Exe-Pump nennt.
Zu lernzwecken möchte ich es nachbauen. Es soll eine beliebige Dateigröße erhöhen ohne den Inhalt zu verändern...

Auch wenn es in den Augen mancher vielleicht kindisch erscheinen mag,
zu lernzwecken sollte es vielleicht genutzt werden...


EDIT:
Also sehe ich das richtig, dass, wenn ich eine Datei in einen Stream lade, die Größe angebe (größer als die Datei vorher) und die dann wieder abspeichere, dass er die selbe Datei speichert, nur das ganze dann größer?
Und diese soll dann noch funktionsfähig sein?
(sorry wenn ich so doof frage)

jfheins 18. Sep 2009 08:29

Re: Dateigröße ändern ohne Inhalt
 
Naja ... so ganz richtig nicht, nein.

An viele Dateien kann man Nullen anhängen, ohne den logischen INhalt zu verändern. Also z.B. Text ist (per c++ Definition) beim ersten Nullbyte zu ende. Wenn du also eine Textdatei mit Nullen auffüllst, und in ein Memo lädst wirst du immer noch den gleichen Text sehen. Aber man kann natürlich festestellen, das da Nullbytes hinten dran hängen. Und wahrscheinlich wird die Datei beim nächsten Speichern auch wieder gekürzt.

Etwas anderes ist das mit exe-Dateien. Da bei denen am Anfang die Länge gespeichert ist, weiß das Programm, wo die Datei zu Ende ist. Da kannst du beniebige Sachen hinten dranhängen, ohne dass das Programm unbrauchbar wird.

Es dürfte aber auch Dateien geben, bei denen das nicht funktioniert. iso-Images wären so ein Kanidat (kann mich aber auch irren) wo durch ändern der Dateigröße auch der logische Inhalt verändert wird.

nahpets 18. Sep 2009 08:32

Re: Dateigröße ändern ohne Inhalt
 
Hallo,

ja das geht, ich nutze diese Möglichkeit, um ans Ende meiner Exen (via Aftercompile-Experten) eine MD5-Checksumme zu schreiben, die beim Programmstart überprüft wird, stimmt sie nicht, ist das Programm defekt oder manipuliert worden.

Das Vorgehen ist relativ einfach mit den vorhandenen Dateioperationen umzusetzen.

Datei zum Schreiben Öffnen.
Ans Ende der Datei gehen.
Gewünschten Inhalt schreiben.
Datei schließen.

Aber Vorsicht: Du kannst damit (und ein paar weiteren Änderungen am Programm) auch destruktive Fehlfunktionalitäten in das Programm einbauen. Nennt man wohl auch Virus oder Trojaner...
Ach, ich möchte das Programm einfach nur größer machen, halte ich so erstmal nicht unbedingt für sinnvoll.

Wenn man sich aber z. B. selbstentpackende ZIP's anschaut, so scheinen die genau auf diese Art und Weise zu funktionieren. Es gibt da z. B. SFXHEAD.SFX und dort wird dann das "normale" ZIP drangehangen und schon hat man ein selbstentpackendes Archiv.

himitsu 18. Sep 2009 08:33

Re: Dateigröße ändern ohne Inhalt
 
Zitat:

Zitat von stho
EDIT:
Also sehe ich das richtig, dass, wenn ich eine Datei in einen Stream lade, die Größe angebe (größer als die Datei vorher) und die dann wieder abspeichere, dass er die selbe Datei speichert, nur das ganze dann größer?
Und diese soll dann noch funktionsfähig sein?
(sorry wenn ich so doof frage)

Ja, da das was in der EXE drinsteckt sozusagen in einer Tabelle in der EXE drinsteht und somit Windows weiß, was wirklich benötigt wird.

Aber was soll man da lernen?

PS: EXE-Pump ist och ganz schön aufgepumpt (selbst mit Delphi bekommt man soein Programm hin, welches selber vielleicht nur 20 KB groß ist und als Batch-Datei reichen wenige Byte dafür aus)

Was willst du denn lernen?
Gibt da bestimmt andere/sinvollere Beispiele.

stho 18. Sep 2009 08:37

Re: Dateigröße ändern ohne Inhalt
 
natürlich gibt es sinnvollere bereiche. :-)
Aber über sowas kann man fast überall streiten (Währe das Geld vom Staat nicht bei XYZ besser aufgehoben?, ...)


also eine 20KB exe in delphi schreiben, da das hab ich noch net hin bekommen. (VCL-Nutzer ^^)

Wie schaffe ich es denn an eine .exe eine bestimmte Menge an Nullen an zu hängen?
Ich hab leider keine vorstellung wie das geht :-(

Wie viele Nullen währen denn dann 1 byte? 8 Nullen müssten 1 byte sein, oder?

himitsu 18. Sep 2009 08:44

Re: Dateigröße ändern ohne Inhalt
 
Zitat:

Zitat von stho
also eine 20KB exe in delphi schreiben, da das hab ich noch net hin bekommen. (VCL-Nutzer ^^)

man muß nichtmal zu NonVCL wechseln ... eine Konsolenapllication genügt da schon :angel:


Zitat:

Zitat von stho
Wie schaffe ich es denn an eine .exe eine bestimmte Menge an Nullen an zu hängen?
Ich hab leider keine vorstellung wie das geht :-(

öffne die Datei in einen FileStreem, setze .Position ans Dateiende und dann hat der Stream so Funktionen, welche mit "Write" anfangen und die da was hinten dranschreiben

Zitat:

Zitat von stho
Wie viele Nullen währen denn dann 1 byte? 8 Nullen müssten 1 byte sein, oder?

da du eh nur in Byte schreiben kannst:
z.B. eine #0 = ein Byte

turboPASCAL 18. Sep 2009 08:47

Re: Dateigröße ändern ohne Inhalt
 
8-Nullen kann man mit einem Byte darstellen, da 1Byte 8Bit hat. ;)

Da du aber einen MD5 anhängen willst brauchst du da ein paar Byte oder ein Cardinal.


Irgend wo hab ich hier ein Demo gehabt. Ich geh mal suchen...

nahpets 18. Sep 2009 08:49

Re: Dateigröße ändern ohne Inhalt
 
Hallo,
Zitat:

Zitat von stho
natürlich gibt es sinnvollere bereiche. :-)
Aber über sowas kann man fast überall streiten (Währe das Geld vom Staat nicht bei XYZ besser aufgehoben?, ...)


also eine 20KB exe in delphi schreiben, da das hab ich noch net hin bekommen. (VCL-Nutzer ^^)

Wie schaffe ich es denn an eine .exe eine bestimmte Menge an Nullen an zu hängen?
Ich hab leider keine vorstellung wie das geht :-(

Wie viele Nullen währen denn dann 1 byte? 8 Nullen müssten 1 byte sein, oder?

Eine 0 wäre ein Byte mit dem Hexadezimalwert 30 ;-) Du meinst aber vermutlich die hexadezimalen Nullen.

Sorry, beschäfige Dich erstmal noch nicht damit. Such' Dir mal aus der Hilfe die Dateioprationen heraus, mit denen Du das machen kannst, was ich weiter oben beschrieben habe. Wenn Du das hast, bist Du schon viel weiter und kannst dann anfangen Dich um den Inhalt zu kümmern. Erstmal Datei öffnen, Größe bestimmen, das Ende der Datei finden, berechnen, wieviele Byte zur gewünschten Größe fehlen und irgendwas in der berechneten Menge hintendranschreiben, Datei schließen und schauen, ob das überhaupt geht. Dann erledigt sich die Frage nach Nullen und ob 1 oder 8 Byte oder 1 Null = 1 Byte oder 8 Nullen = 1 Byte (fast) von selbst.

Da auch noch andere Vorschläge kamen, hast Du jetzt mindestens zwei Wege, um Dein Problem zu lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz