Strona 1 z 1

Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: poniedziałek, 9 sierpnia 2010, 13:18
przez Corvis
Witam,

Mam problem, bo chcę stworzyć zaszyfrowane archiwum, ale niewiem jak ukryć jego zawartość. Jak pakuje pliki Zipforgem, to mogę sobie w windowsie otworzyć te archwium i zobaczeć co jest w środku, o hasło prosi dopiero podczas próby odczytu lub rozpakowania. Wie ktoś jak ukryć zawartość archiwum ??

Pozdrawiam

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: poniedziałek, 9 sierpnia 2010, 15:14
przez Cyfrowy Baron
Zawartości archiwum ZIP nie można ukryć. Ten format archiwum jest mniej funkcjonalny niż np. RAR. Taka ciekawostka: nawet jeżeli utworzysz archiwum ZIP zabezpieczone hasłem to można usunąć pliki z tego archiwum nie znając hasła, czyli nie można podejrzeć zawartości archiwum bez hasła, ale można usunąć pliki z archiwum bez podawania hasła.

Możesz zapisywać pliki w archiwum z atrybutem ukryty, wtedy w systemie w, w którym wyłączone jest pokazywanie ukrytych plików nic nie będzie widać.

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: poniedziałek, 9 sierpnia 2010, 15:39
przez Corvis
No tak też myślałem :(

A wiesz może jak odczytać plik z archiwum, przy użyciu ZIPFORGE bez rozpakowywania go na dysk ?

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: poniedziałek, 9 sierpnia 2010, 16:11
przez Cyfrowy Baron
Wiem. Tylko co chcesz z tego odczytać: Poniższy przykład odczytuje zawartość pliku tekstowego z archiwum bez wypakowywania go i przepisuje jego zawartość do obiektu typu TStringList.

KOD cpp:     UKRYJ  
void __fastcall TForm1::LoadText(TStringList *Lista, String fileArchive, String password, String fileTxt)
{
 if(!FileExists(fileArchive)) return; // sprawdza czy plik archiwum istnieje, jeżeli nie przerywa

 TMemoryStream *mStream = new TMemoryStream();

 Archiver->FileName  = fileArchive; // nazwa pliku archiwum
 Archiver->OpenArchive(fmOpenRead); // otwieram archiwum w trybie tylko do odczytu
 Archiver->Password = password; // podaję hasło do archiwum

 TZFArchiveItem ArchiveItem;
 std::auto_ptr<TStrings> findList(new TStringList());
 /* tutaj sprawdzam czy w archiwum są jakieś pliki tekstowe *.txt, wszystkie znalezione umieszczam na liście findList */
 if(Archiver->FindFirst("*.txt", ArchiveItem, faAnyFile - faDirectory))
  do
  {
    findList->Add(ArchiveItem.FileName);
  }
  while (Archiver->FindNext(ArchiveItem));

 /* sprawdzam czy na liście findList a co za tym idzie w archiwum znajduje się plik do wczytania fileTxt */
 if(findList->IndexOf(fileTxt) < 0)
 {
  Archiver->CloseArchive();
  delete mStream;
  return; // jeżeli nie ma pliku przerywam
 }

 Archiver->ExtractToStream(fileTxt, mStream); // przepisuję zawartość pliku do obiektu typu TMemoryStream
 mStream->Position = 0;
 Lista->LoadFromStream(mStream); // przepisuję zawartość obiektu typu TMemoryStream do TStringList
 Archiver->CloseArchive(); // zamykam archiwum - koniecznie

 delete mStream;
}


Można to oczywiście zrobić na wiele sposobów, ale ten pokazuje to bardzo obrazowo, pokazuje również jak wyliczyć pliki w archiwum z wykorzystaniem klasy TZFArchiveItem.

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 08:22
przez Corvis
Jedna rzecz to pliki txt, a druga to Bitmapa. Bitmapę chyba podobnie się robi ? Z tego co kojarze ma metodę LoadFromStream.


Wielkie dzięki za pomoc.


Edit:

No niby się nie da ukryć tych plików w archiwum, ale jak by jeszcze raz zipa zapakować wtedy będą ukryte hehee ;)

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 08:53
przez Cyfrowy Baron
No niby się nie da ukryć tych plików w archiwum, ale jak by jeszcze raz zipa zapakować wtedy będą ukryte hehee ;)


Czy jednak zdołasz wypakować pliki z drugiego archiwum (ponownie spakowanego) do pamięci, bez wypakowywania na dysk?! :)

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 09:05
przez Corvis
Właśnie spradzam ...


Edit: Da się tak zrobić :)

1. Kod szyfrujący:

Kod: Zaznacz cały
  // 1 pakowanie danych
    ZipForge1->FileName = "paczka_wew.zip";
    ZipForge1->BaseDir = ExtractFilePath(Application->ExeName)+"katalog";

    ZipForge1->EncryptionMethod = caAES_256;
    ZipForge1->Password = "ppp";
   
    ZipForge1->OpenArchive(fmCreate);
    ZipForge1->AddFiles("*.*");
    ZipForge1->CloseArchive();

    // 2 pakowanie danych

    ZipForge1->FileName = "ostateczny.zip";
    ZipForge1->BaseDir = ExtractFilePath(Application->ExeName);

    ZipForge1->EncryptionMethod = caAES_256;
    ZipForge1->Password = "ppp";

    ZipForge1->OpenArchive(fmCreate);
    ZipForge1->AddFiles("*.zip");
    ZipForge1->CloseArchive();

    DeleteFileA("paczka_wew.zip");


2. Kod roszyfrowujący

Kod: Zaznacz cały
    ZipForge1->FileName = "ostateczny.zip";  // głowny zip
    ZipForge1->OpenArchive(fmOpenRead);  // otwarcie

    TMemoryStream *str = new TMemoryStream();   
    ZipForge1->EncryptionMethod = caAES_256;
    ZipForge1->Password = "ppp";
    ZipForge1->ExtractToStream("paczka_wew.zip",str); // Odpakowanie wewnętrznego zipa do streama
    ZipForge1->CloseArchive();

    ZipForge1->OpenArchive(str,false); // Otwarcie archiwum ze strumienia
    TZFArchiveItem itm;
    Memo1->Lines->Clear();
    ZipForge1->FindFirst("*.*",itm,faAnyFile);
   
    do {
        Memo1->Lines->Add(itm.FileName);  // wypisanie zawartosci plików
    } while(ZipForge1->FindNext(itm));

    ZipForge1->CloseArchive();



Jeżeli udało mi się je wylistować to zapewne z wypakowaniem też, nie będzie problemu ;)


Pozdrawiam

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 09:40
przez Cyfrowy Baron
Rzeczywiście! Procedura jest opisana w pliku pomocy. Można wczytywać i wypakowywać plik ze strumienia pamięci.

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 09:50
przez Corvis
Gdzie jest ten plik pomocy ???

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 09:59
przez Cyfrowy Baron
W katalogu: [...]\ComponentAce\ZipForge\Help\

Re: Zipforge - ukrywanie zawartości archiwum

Nowy postNapisane: wtorek, 10 sierpnia 2010, 10:10
przez Corvis
dzięki