Megválaszolatlan hozzászólások | Aktív témák Pontos idő: hétf. jan. 06, 2025 13:10



Hozzászólás a témához  [ 6 hozzászólás ] 
File megrongálás 
Szerző Üzenet
arany tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 474
Hozzászólás 
Na akkor gyorsan osszedobtam egy delphi kodot (szerintem barmelyik delphi megeszi en 5-osben probaltam).
Garanciat nem adok ra, de nekem muxik (hibakezeles az minimalis). Ez egy konzol progi; hivasa 1 vagy 2 parameteres. Az elso parameter lehet "-R" ez jelzi, hogy az alkonyvtarakban is dolgozzon. A masodik parameter (vagy az -R kapcsolo hianyaban az elso) a filemaszk. Ez ugye a hagyomanyos standard maszk, pl.: "c:\akarmi\*.xls".
Minden fajlt 100 helyen rongal meg, veletlen byteokkal felul ir. Ha ez keves vagy sok akkor ird at a PostProc fuggvenyben. A file datumat nem valtoztatja meg (vagyis visszallitja az eredeti idore).

Kód:
program filedamager;
{$APPTYPE CONSOLE}
uses
  SysUtils,Classes;

type
  PFileRecursive = ^TFileRecursive;
  TFileRecursive = Object
    sPath :String[255];
    sMask :String[255];
    errorobj :String[255];
    bIncludeSubdirs: Boolean;
    Constructor Init(aPath,aMask:String;IncludeSubdirs:Boolean);
    Function    Run:Integer; Virtual;
    Function    SubRead(aPath:String):Integer; Virtual;
    Function    PreProcFile(aPath:String;sRec:TSearchRec):Integer; Virtual;
    Function    PostProcFile(aPath:String;sRec:TSearchRec):Integer; Virtual;
    Procedure   PathChanged(aPath:String); Virtual;
    Destructor  Done;
    End;

Constructor TFileRecursive.Init(aPath,aMask:String;IncludeSubdirs:Boolean);
 Begin
  sPath := aPath;
  sMask := aMask;
  errorobj := '';
  bIncludeSubdirs:=IncludeSubdirs;
 End;

Function    TFileRecursive.Run:Integer;
 Begin
  errorobj := '';
  Run := SubRead(sPath);
 End;

Procedure   TFileRecursive.PathChanged(aPath:String);
begin
end;

Function    TFileRecursive.SubRead(aPath:String):Integer;
 Var sRec:TSearchRec;
     err :Integer;
     DosError: Integer;
 Begin
  err := 0;
  DosError:=FindFirst( aPath+'*.*', faDirectory, sRec);
  If DosError <> 3 Then Begin
     PathChanged(aPath);
     While (DosError = 0) and (err = 0) Do Begin
       If (sRec.Name <> '.') and (sRec.Name <> '..') and ((sRec.Attr and faDirectory) <> 0) Then Begin
          err := PreProcFile(aPath,sRec);
          If err = 0 Then Begin
             If bIncludeSubdirs then
                err := SubRead(aPath+sRec.Name+'\');
             If err = 0 Then Begin
                err := PostProcFile(aPath,sRec);
                End;
             End;
          End;
       If Err = 0 Then DosError:=FindNext(sRec);
       End;
     If DosError = 3 Then Begin
        errorobj := aPath;
        Err := DosError;
        End Else Begin
        DosError:=FindFirst( aPath+sMask, faReadOnly+faHidden+faSysFile+faArchive+faAnyFile, sRec);
        If DosError <> 3 Then Begin
           While (DosError = 0) and (err = 0) Do Begin
             If (sRec.Name <> '.') and (sRec.Name <> '..') and ((sRec.Attr and faDirectory) = 0) Then Begin
                err := PreProcFile(aPath,sRec);
                If err = 0 Then Begin
                   err := PostProcFile(aPath,sRec);
                   End;
                End;
             If Err = 0 Then DosError:=FindNext(sRec);
             End;
           End;
        End;
     End Else Begin
     errorobj := aPath;
     Err := DosError;
     End;
  sysutils.FindClose(sRec);
  SubRead := Err;
 End;

Function    TFileRecursive.PostProcFile(aPath:String;sRec:TSearchRec):Integer;
 var
  fi:TFileStream;
  h,i:Integer;
  b:byte;
 Begin
  if (sRec.Attr and faDirectory) = 0 then begin
     Writeln(aPath,sRec.Name);
     fi:=TFileStream.Create(aPath+sRec.Name,fmOpenReadWrite);
     for i:=1 to 100 do begin
         fi.Seek(Random(fi.Size),soFromBeginning);
         b:=Random(255);
         fi.Write(b,1);
         end;
     fi.Free;
     h:=FileOpen(aPath+sRec.Name,fmOpenReadWrite);
     FileSetDate(h,sRec.Time);
     FileClose(h);
     end;
  PostProcFile := 0;
 End;

Function    TFileRecursive.PreProcFile(aPath:String;sRec:TSearchRec):Integer;
 Begin
  PreProcFile := 0;
 End;

Destructor  TFileRecursive.Done;
 Begin
 End;


var
 FileRecursive:TFileRecursive;
 path,mask:String;
 subdir:boolean;
begin
  if (ParamCount() < 1) or (ParamCount() > 2) then begin
     Writeln('Invalid parameters.');
     halt;
     end;
  subdir:=false;
  if ParamCount() = 2 then begin
     if (uppercase(Paramstr(1)) = '-R') or (uppercase(Paramstr(1)) = '/R') then subdir:=true
        else begin
        Writeln('Invalid switch:',Paramstr(1));
        halt;
        end;
     path:=ExtractFilePath(paramstr(2));
     mask:=ExtractFileName(paramstr(2));
     end else begin
     path:=ExtractFilePath(paramstr(1));
     mask:=ExtractFileName(paramstr(1));
     end;
  Randomize;
  FileRecursive.Init(path,mask,subdir);
  FileRecursive.Run;
  FileRecursive.Done;
end.


:!: :!: :!: Hasznalni csak esszel mert ez nem nagyon kerdez, fogja azt szetcseszi a fajlaidat! :!: :!: :!:
Jo szorakozast... 8)


hétf. jan. 03, 2005 10:03
Profil Privát üzenet küldése
arany tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 474
Hozzászólás 
Kerdes, hogy a "rongalas" utan Te meg meg tudd nyitni vagy azt mar senki sem?

Mi van, kirugtak (fognak rugni) a melohelyrol? :wink:


hétf. jan. 03, 2005 9:07
Profil Privát üzenet küldése
Online
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 4910
Hozzászólás 
Megoldható, ha a fájlok mérete vagy darabszáma miatt nem tart évekig...
:D


hétf. jan. 03, 2005 8:13
Profil Privát üzenet küldése
arany tag
Avatar

Csatlakozott: hétf. ápr. 26, 2004 14:57
Hozzászólások: 470
Hozzászólás 
vackor írta:
Írsz egy programot, ami kiolvassa a fájl dátum/idő adatait, feltölti a fájl tartalmát a random() fv. által generált adatokkal :D aztán visszaállítja az időket. Ez utóbbihoz szükség lehet admin/root jogosultságra.

Ez akár megoldható egy hexa editorral is, ha lusta az ember programozni. :D


csüt. dec. 30, 2004 18:33
Profil Privát üzenet küldése
Online
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 4910
Hozzászólás 
Írsz egy programot, ami kiolvassa a fájl dátum/idő adatait, feltölti a fájl tartalmát a random() fv. által generált adatokkal :D aztán visszaállítja az időket. Ez utóbbihoz szükség lehet admin/root jogosultságra.


csüt. dec. 30, 2004 12:00
Profil Privát üzenet küldése
vas-tag

Csatlakozott: csüt. nov. 25, 2004 13:55
Hozzászólások: 9
Hozzászólás File megrongálás
Üdv mindenkinek!

A segítségeteket kérném, hogy hogyan tudnék úgy fileokat (főleg .xls, .doc) úgy "megrongálni", hogy csak nehezen esetleg sehogy ne lehessen használni, de az én szándékosságom ne látszon rajta.

Előre is köszönettel: Ex


Ui.: Nem mások álltal készített adatokat szertetnék nehezen elérhetővé tenni, hanem azokat amiket én csináltam, de nem szeretném, ha visszaélnének a dolgaimmal.


csüt. dec. 30, 2004 11:52
Profil Privát üzenet küldése
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 6 hozzászólás ] 

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 4 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség