Bits bzw. Bytes einer Datei heruasfiden

  • jo, ich lern grad Java.
    Fileschreder sin ja ne schöne Sache, ne aber ich hab gehört man kann sogar Dinge wiederherstellen, die ein Schredder gelöscht hat. Das einzige mittel dagegen wäre, das ganze dann noch ein paar mal zu überschreiben. Daher wollte ich mir mit Java einen eigenen Schredder basteln, der die Bytes (Bits gibts ja in Java nich) herausfindet und diese 5-6mal zufällig ändert. GUI sieht schon gut aus, nur ich hab keine ahnung, wie ich an die Stellen der Bytes auf der Festplatte kommen soll, um die dann zu überschreiben.
    Weiss jemand wie das geht?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • wüsste nicht, dass sowas überhaupt geht, denn du brauchst ja ein object (ressource, stream, etc)
    du müsstest also als ausgangsobjekt mindestens ne file haben.
    könntest ja mal testen nen bild zu nehmen, diese file als stream zu laden und dann den stream nach ablauf von xx bytes zu zerhacken oder wat weiß ich

  • Naja, eig. weiss ich nur, wie ich Dateien einlesen kann, aber nich wie ich Bits/Bytes auf der Festplatte ändern kann.
    Ich schau mal in der API, was ein Filestream denn im genauen kann.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • mal fürs verständnis...
    hast du ne datei, die du schreddern willst oder hast du schredderschnipsel auf der hdd und willst die entschreddern?
    oder nochma schreddern oder wie?

    beschreib mal bitte was du vorhast und zwar so, dass ich kacknoob des auch kapier

  • So weit ich weiss, geht ein schredder her und setzt alle Bits, die etwas mit der Datei zu tun haben auf 0 oder 1.
    Wenn ich jetzt ein ASCII Textdocument habe, indem steht hallo, dann ist auf der festplatte (abzüglich registry-eintrag und bla) z.B. 00000001 für a, 00010010 für l (stimmt jetzt sicher nich, is jetzt aber mal egal).
    Dann setzt der Schredder das
    00000001 zu 00000000 und
    00010010 zu 00000000
    Aber anscheinend kann man das wiederherstellen, ausser man überschreibt das mehrfach, also z.B.
    00000001 zu 00000000,
    00010010 zu 00000000
    00000000 zu 11111111,
    00000000 zu 11111111,
    11111111 zu 00000000 un zu guter letzt
    11111111 zu 00000000
    Dann würde es nicht nicht vollständig oder garnicht wiederherstellbar sein.
    Aber ich kann ja nich wahllos auf der Festplatte rummachen. Sondern die Bits des Registry eintrags und die Bits der Dateifragmente (falls vorhanden) 2-3 mal überschreiben, sodass von der Datei NIX mehr da ist.

    Ich benutz ja keinen Schredder, damits hinterher immernoch da is.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (26. Februar 2010 um 21:38)

  • also is dein ausgangspunkt dass du ne datei hast und die willste zerpflücken.. oder?
    denn dann kannst du die file als stream laden und bitshiften und sonstwas damit anstellen und dir eigene fragmentgössen in bytearrays schreiben, die du dann auch wieder verwursten kannst.

    also so zumindest die theorie :)

  • Jap. Der benutzer gibt ne datei an und deren bytes zerruof und überschreib ich dann.

    In der API steht zu FileOutputStream() die Methode write(byte[] b).
    Sie schreibt alle bytes in b in den FileOutput.
    Damit wärs doch getan, oder?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Joa, ich dachte eher ich öffne das über FileInputStream(), wirft ja ne FileNotFound Exception, nehme dann die bytegröße mit new File("kasj").length(); mach dann das bytearray und fülle des mit lauter 0en.
    Stimmt der ansatz oder her wie dus gemient hast?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Also zerlegen tut er sie, hat hinterher (laut windoof) auch 0KB aber sie ist noch sichtbar, file.delete(); scheint nicht zu funktionieren. Hier mal der ganze Source(GUI noch nicht fertig):

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • also ich weiß net wie´s beim delete is, aber beim erzeugen braucht man noch die methode flush(), damit der vorgang auch auf die hdd comitted wird

    Code
    if(file.exists()){
         file.delete();
         file.flush();
     }

    bin mir da aber jetzt auch net 100%ig sicher.. musste mal in der methodenbeschreibung gucken :)

  • EDIT:
    Aso, ja dann. Ich probiers nochmal
    EDIT2:
    ne, ich schau nochmal wegen delete();
    /EDIT
    Weiss du, obs ne klasse gibt, mit der man so n Öffnen-Fenster machen kann?(Gibts ja überall, dieses Öffnen fenster mti dem Dateiauswahlkram)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (27. Februar 2010 um 14:52)

  • such mal nach dem JFileChooser

    edit:

    Code
    JFileChooser myfileChooser= new JFileChooser();
            myfileChooser.setCurrentDirectory(new java.io.File("."));
            myfileChooser.showOpenDialog(null);
            myfileChooser.setDialogTitle("Datei auswählen");

    damit gehste ins aktuelle verzeichnis von wo aus der chooser aufgerufen wird ;)

    2 Mal editiert, zuletzt von synaptic (27. Februar 2010 um 15:00)

  • Cool, danke. Damit gehts. Fehlt nurnoch, dass die Datei dann mal gelöscht wird, ich find den fehler nicht.

    EDIT:
    Und ich kann JARs baun, wie ich will, meine Runtime macht die Krätsche, JCreator nich..... Und ich dachte PHP sei schwer xDD

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    3 Mal editiert, zuletzt von Tobse (27. Februar 2010 um 21:54)

  • Mit JCreator. Ich hab das mit flush() und deleteOnExit(); probiert, hat aber beides net gefruchtet.
    FileWiper.zip

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • aaalso bei mir gehts nach kleinen änderungen :D
    vergleiche mal meinen code mit deinem ;)

    ok ich machs direinfacher.. des flush gehört nich zur file, sondern zum stream (hier den outputstream)
    des mit dem inputStream hab ich mal auskommentiert, denn ein objekt ohne referenz is humbug, wenn du es nicht anonym verwendest.

    dann konnte ja kein ergebnis kommen, weil du zwei mal file.delete() auf des gleiche file-objekt auszuführen.. wenn die file beim ersten mal gelöscht würde, wäre des zweite (in der if-bedingung) fürn arsch und würd eher ne exception werfen, als true zu werden^^

    im anhang hab ich dir des ganze mal zu ner jar compiled und gezipped.

    das ganze ding is auch übelst langsam, kann gar nich verstehen wieso des so is... ich hab hier win7 x64 enterprise laufen und hab 4GB ram und ich hab gedacht wenn einer jetzt was schlechteres hat muss des ja jahre dauern...

    wieso arbeitest du so viel mit inner classes?
    du könntest bei nem button ganz einfach dem button-objekt ne action performed geben..

    nimm dir mal netbeans oder eclipse zum developing von javazeugs..
    netbeans hat nen prima visual editor und eclipse is einfach geiler beim debuggen ;)

  • Nö, also meine Versionen haben 91 mb in 2 Sekunden geschreddert, ging flux.
    Wie kann ich dem Button ubjekt nen action performed gegen? Ne eigene Klasse extends?

    Lässt sich die JAR bei dir ausführen? Bei mir nicht....
    Ich Probier NetBeans mal aus.
    Ich hab halt mit JCreator angefangen, weil Kolegen meines Vaters, die auch schon Java Developed haben den wohl mega gelobt haben.
    Des unreferenziert FileOutPutStream hatte ich drin, weil FileOutputStream keine Exception wirft, wenn die Datei nich gefunden wurde.
    Und dann kann ich auch keine Datei nicht gefunden meldung anzeigen

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (28. Februar 2010 um 13:35)

  • welche java-version haste installiert? und ja bei mir gehts ;) hab jdk1.6.0_16 installiert
    und ich meine allgemein langsam beim öffnen des fensters, öffnen des filechoosers, des löschen selber ging fix.. jo

    zum glück hab ich den entsprechenden code hier nochma kopiert, so dass du des ja selber hinbekommen solltest ;)
    oder lad einfach den gezippten anhang in meinem vorigen posting runter