Strona 1 z 1
Zipforge - ukrywanie zawartości archiwum
Napisane:
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
Napisane:
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
Napisane:
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
Napisane:
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.
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
Napisane:
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
Napisane:
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
Napisane:
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
Napisane:
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
Napisane:
wtorek, 10 sierpnia 2010, 09:50
przez Corvis
Gdzie jest ten plik pomocy ???
Re: Zipforge - ukrywanie zawartości archiwum
Napisane:
wtorek, 10 sierpnia 2010, 09:59
przez Cyfrowy Baron
W katalogu: [...]\ComponentAce\ZipForge\Help\
Re: Zipforge - ukrywanie zawartości archiwum
Napisane:
wtorek, 10 sierpnia 2010, 10:10
przez Corvis
dzięki