Shredder programmieren (c++)

Ich möchte einen Shredder mit verschiedenen Überschreibmethoden machen. Darunter US DoD 5220-22.M, Gutmann und Schneider's 7 pass.
Jetzt habe ich einige Fragen dazu...
  1. Hat jemand vieleicht ein Beispiel wie man dieses Problem angeht?
  2. Wie würdet ihr das machen? Die Startadresse einer Datei rausfinden --> Anzahl Bytes der Datei (mittels Dateigrösse) mit einer Methode überschreiben?
  3. Wie finde ich die grösse eines Clusters eines PCs raus? Bei Vista und XP?
  4. Wie kann ich alle unbenutzten Cluster ermitteln und die überschreiben?
    [/list=1]
    Vielen Dank für Ihre Antworten!
 
ich denke dass man dieses progg in assembler wesentlich einfacher umsetzen könnte, denn in asm ist es auch einfach dateilänge usw herauszufinden und direkt zu überschreiben.

falls du noch kein asm kannst, eigne es dir an, google mal "adoks way to assembler" das is ganz gut zum einstieg.

fallste asm kannst sollte das ganze kein problem darstellen.
 
Hallo,
hab mal vor Ewigkeiten folgendes geschrieben:
Code:
//C-Code

//Datei-Länge
handle = open("name_der_datei", O_TEXT);
i=filelength(handle);
close(handle);

 FILE *ein = fopen("name_der_datei","rb+");
 if(ein == NULL) { printf("Datei nicht vorhanden!"); exit(0); }
    
     while(n++<i)           
       putc(0x00,ein);
            
     fclose(ein);

Zwar nicht wirklich schön, da ich es geschrieben habe als ich C lernen wollte, so in etwa sollte es aber klappen.

Soweit ich weiß brauchst du die Startadressen etc. nicht zu wissen, du kannst die Datei ja ganz normal öffnen und überschreiben.
Er überschreibt auch die alten Speicherbereiche, da wenn du mitten drin aufhörst, hast du z.B. in der Datei "00000...000Hallo Welt" stehen. Das kopiert der ja nicht immer um (oder?).
Dann brauchst man natürlich auch nicht die Cluster-Größe.
 
@ LionC
Ich kann ein kleines bisschen ASM aber leider nicht genügend dafür.

@Elderan
So klappt das leider nicht ganz, denn so kann ich nur den Dateiinhalt beschreiben, nicht aber bereits gelöschte Dateien, ADS und ähnliches.
 
Danke, das könnte gehen. Dann implentiere ich dies einfach als inline-ASM-Funktion. Ich geh es einmal ausprobieren
 
Da es sich hier doch eher um ein programmiertechnisches Problem handelt als security, verschiebe ich das ganze mal in die Code Kitchen
 
Wenn du dir den letzten Post angeschaut hast siehst du, dass dort die Adresse zum Source-Code von Eraser ist...
 
Original von jmc
Mit ASM hat es sich für mich etwas zu schwierig herausgestellt...
Ich habe aber ein super Programm gefunden, bei dem sogar der Source-Code zur Verfügung gestellt wird:
http://downloads.sourceforge.net/eraser/Eraser584Src.zip

Es bringt dir auch überhaupt keinen Vorteil das ganze in Assembly zu schreiben, da dir alle Operationen auch in C/C++ zur Verfügung stehen, und wahrscheinlich auch in so ziemlich jeder anderen Sprache, da du eigentlich nur in Dateien schreiben willst(Ok mehrfaches Überschreiben des Dateieintrages(also abhängig vom FS) geht wahrscheinlich nicht mit jeder Sprache) und du in C letztlich die selben Möglichkeiten hast.
 
Wie du sehen kannst wird - eigentlich der wichtigste Teil - auch bei diesem Beispiel mit Assembler gemacht und Assembler bietet sehr viele Vorteile, wenn man es gut beherrscht. Z.B. , was in diesem Fall sehr wichtig ist, die Geschwindigkeit bei Schreiben der Daten.
 
Wo wir grad schonmal dabei sind: Was ist der Unterschied zwischen der ASM Methode und der einzigen Methode, mit der man in Java sowas machen könnte: Stream auf, random zahlen reinklatschen, dann delete.??
 
ich weis nicht auf das Thema bezogen... :rolleyes:

@LionC
--------------------------------------------------------------------------------
wenn du ein bisschen asm kannst reicht das, gnau so etwas hab ich letztens in einem anfänger asm tut gesehen, ich such mal schnell den link.

//EDIT: gefunden www.it-helpnet.de/Dokumente/Programmieru...20Tutorial.html

kapitel 18 sollte dir glaube ich helfen

:) endlich mal ein ASM link den ich gesucht habe...
finde ich gut erklärt und gut in der Umsetzung zu üben.

Kennst du noch weiter solcher links bzw. Tut's
 
@Serow
So einfach ist das auch wieder nicht und ausserdem mit Java würde es etwa 10x solange dauern mit C++ etwa 2x so lange, wie wenn dieser Teil in direkt in ASM ist.
Der Unterschied ist, dass du direkt optimalen ASM Code benutzen kannst statt der Interpreter (bei Java) oder der Compiler (bei z.B. C++).

@ByteSurfer
http://andremueller.gmxhome.de/toc.html <-- das ist auch ganz nett
 
Original von jmc
@Serow
So einfach ist das auch wieder nicht und ausserdem mit Java würde es etwa 10x solange dauern mit C++ etwa 2x so lange, wie wenn dieser Teil in direkt in ASM ist.
Der Unterschied ist, dass du direkt optimalen ASM Code benutzen kannst statt der Interpreter (bei Java) oder der Compiler (bei z.B. C++).

@ByteSurfer
http://andremueller.gmxhome.de/toc.html <-- das ist auch ganz nett

Da wäre ich mir nicht so sicher.
Ok das der Interpreter von Java länger braucht als C++ ist klar.

Doch das C++ ca. doppelt solange brauchen soll wie Assembler?
Ich glaube es gibt sehr sehr wenige Personen die den Code besser optimieren können als die heutigen Compiler heutzutage.
Es gibt so viele Möglichkeiten bestimmte Dinge zu tun und die heutigen Compiler wissen bestens darüber bescheid, dass es meistens keinen Sinn mehr macht direkt in Assembler zu arbeiten. [Assembler Tricks]
 
Naja sicher wird es immer wieder ein paar Dinge geben mit denen man in Assembler schnelller ist und das auch gravierend.
Aber das sind dann eben meist auf den Prozessor bezogene Geschichten oder eben andere Geschichten die bitbasierend sind.(wo findet man die denn noch?) Doch in aller Regel ist der C++ Code mittlerweile schon sehr sehr erfahren und hat auch deswegen entsprechende schnelle Geschichten im Hintergrund laufen, die wohl eher schneller als der Assemblecode eines Newbs sind.
Native Code von C++ kann ja eben auch verdammt schnell sein und ich behaupte mal dass da nichts um ist zum optimalen Assemblercode.
 
Also bei Festplatten (und bei anderen Medien macht das mehrfasche überschreiben meist keinen Sinn) würde ich behaupten, dass die vielleicht 100 MB/s an Daten mit eigentlich jeder Programmiersprache generiert werden können?!
 
Zurück
Oben