From 6b87c6ab93bd6501637f9d32bea35446b5d42872 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 20:09:35 +0000 Subject: [PATCH] Translated ['', 'src/generic-methodologies-and-resources/basic-forensic- --- .../zips-tricks.md | 160 +++++++++++++++++- 1 file changed, 152 insertions(+), 8 deletions(-) diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md index 2b478caa1..ab5f39aa2 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md @@ -2,20 +2,164 @@ {{#include ../../../banners/hacktricks-training.md}} -**Narzędzia wiersza poleceń** do zarządzania **plikami zip** są niezbędne do diagnozowania, naprawiania i łamania plików zip. Oto kilka kluczowych narzędzi: +**Narzędzia w wierszu poleceń** do zarządzania **zip files** są niezbędne do diagnozowania, naprawiania i łamania plików zip. Oto kilka kluczowych narzędzi: -- **`unzip`**: Ujawnia, dlaczego plik zip może nie dekompresować się. -- **`zipdetails -v`**: Oferuje szczegółową analizę pól formatu pliku zip. -- **`zipinfo`**: Wyświetla zawartość pliku zip bez jego ekstrakcji. +- **`unzip`**: Pokazuje, dlaczego plik zip może się nie rozpakowywać. +- **`zipdetails -v`**: Oferuje szczegółową analizę pól formatu zip. +- **`zipinfo`**: Wyświetla zawartość pliku zip bez wyodrębniania. - **`zip -F input.zip --out output.zip`** i **`zip -FF input.zip --out output.zip`**: Próbują naprawić uszkodzone pliki zip. -- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Narzędzie do łamania haseł zip metodą brute-force, skuteczne dla haseł do około 7 znaków. +- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Narzędzie do brute-force łamania haseł zip, skuteczne dla haseł do około 7 znaków. -Specyfikacja [formatu pliku Zip](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) dostarcza szczegółowych informacji na temat struktury i standardów plików zip. +Specyfikacja formatu pliku [Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) zawiera kompleksowe informacje o strukturze i standardach plików zip. -Ważne jest, aby zauważyć, że pliki zip chronione hasłem **nie szyfrują nazw plików ani rozmiarów plików** wewnątrz, co stanowi lukę w zabezpieczeniach, której nie mają pliki RAR ani 7z, które szyfrują te informacje. Ponadto, pliki zip szyfrowane starszą metodą ZipCrypto są podatne na **atak jawny**, jeśli dostępna jest niezaszyfrowana kopia skompresowanego pliku. Atak ten wykorzystuje znaną zawartość do złamania hasła zip, co jest szczegółowo opisane w artykule [HackThis](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) oraz dalej wyjaśnione w [tym artykule naukowym](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf). Jednak pliki zip zabezpieczone szyfrowaniem **AES-256** są odporne na ten atak jawny, co podkreśla znaczenie wyboru bezpiecznych metod szyfrowania dla wrażliwych danych. +Warto zauważyć, że pliki zip zabezpieczone hasłem **nie szyfrują nazw plików ani rozmiarów plików** wewnątrz archiwum — jest to luka bezpieczeństwa, której nie mają RAR ani 7z, które szyfrują te informacje. Ponadto pliki zip zaszyfrowane starszą metodą ZipCrypto są podatne na **plaintext attack**, jeśli dostępna jest nieszyfrowana kopia skompresowanego pliku. Ten atak wykorzystuje znaną zawartość do złamania hasła zip, co opisano w artykule [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) oraz w [tym artykule naukowym](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf). Pliki zip zabezpieczone **AES-256** są jednak odporne na ten plaintext attack, co pokazuje, jak ważne jest wybieranie bezpiecznych metod szyfrowania dla danych wrażliwych. -## References +--- + +## Anti-reversing tricks in APKs using manipulated ZIP headers + +Nowoczesne droppery malware na Androida używają sfałszowanych metadanych ZIP, aby zepsuć narzędzia statyczne (jadx/apktool/unzip), jednocześnie zachowując możliwość instalacji APK na urządzeniu. Najczęstsze sztuczki to: + +- Fake encryption by setting the ZIP General Purpose Bit Flag (GPBF) bit 0 +- Abusing large/custom Extra fields to confuse parsers +- File/directory name collisions to hide real artifacts (e.g., a directory named `classes.dex/` next to the real `classes.dex`) + +### 1) Fake encryption (GPBF bit 0 set) without real crypto + +Objawy: +- `jadx-gui` zgłasza błędy takie jak: + +``` +java.util.zip.ZipException: invalid CEN header (encrypted entry) +``` +- `unzip` prosi o hasło dla kluczowych plików APK, mimo że prawidłowy APK nie może mieć zaszyfrowanych `classes*.dex`, `resources.arsc`, ani `AndroidManifest.xml`: + +```bash +unzip sample.apk +[sample.apk] classes3.dex password: +skipping: classes3.dex incorrect password +skipping: AndroidManifest.xml/res/vhpng-xhdpi/mxirm.png incorrect password +skipping: resources.arsc/res/domeo/eqmvo.xml incorrect password +skipping: classes2.dex incorrect password +``` + +Wykrywanie za pomocą zipdetails: +```bash +zipdetails -v sample.apk | less +``` +Spójrz na General Purpose Bit Flag w nagłówkach lokalnych i centralnych. Charakterystyczną wartością jest ustawiony bit 0 (Encryption) nawet dla głównych wpisów: +``` +Extract Zip Spec 2D '4.5' +General Purpose Flag 0A09 +[Bit 0] 1 'Encryption' +[Bits 1-2] 1 'Maximum Compression' +[Bit 3] 1 'Streamed' +[Bit 11] 1 'Language Encoding' +``` +Heurystyka: Jeśli APK instaluje się i uruchamia na urządzeniu, ale core entries wyglądają na "encrypted" dla narzędzi, GPBF został zmanipulowany. + +Napraw to przez wyczyszczenie bitu 0 GPBF w wpisach Local File Headers (LFH) oraz Central Directory (CD). Minimal byte-patcher: +```python +# gpbf_clear.py – clear encryption bit (bit 0) in ZIP local+central headers +import struct, sys + +SIG_LFH = b"\x50\x4b\x03\x04" # Local File Header +SIG_CDH = b"\x50\x4b\x01\x02" # Central Directory Header + +def patch_flags(buf: bytes, sig: bytes, flag_off: int): +out = bytearray(buf) +i = 0 +patched = 0 +while True: +i = out.find(sig, i) +if i == -1: +break +flags, = struct.unpack_from(' 1: +print('COLLISION', base, '->', variants) +``` +Blue-team — pomysły wykrywania: +- Flag APKs, których lokalne nagłówki oznaczają szyfrowanie (GPBF bit 0 = 1), a mimo to instalują/uruchamiają się. +- Flag duże/nieznane Extra fields w core entries (szukaj znaczników takich jak `JADXBLOCK`). +- Flag kolizje ścieżek (`X` i `X/`) szczególnie dla `AndroidManifest.xml`, `resources.arsc`, `classes*.dex`. + +--- + +## Źródła - [https://michael-myers.github.io/blog/categories/ctf/](https://michael-myers.github.io/blog/categories/ctf/) +- [GodFather – Part 1 – A multistage dropper (APK ZIP anti-reversing)](https://shindan.io/blog/godfather-part-1-a-multistage-dropper) +- [zipdetails (Archive::Zip script)](https://metacpan.org/pod/distribution/Archive-Zip/scripts/zipdetails) +- [ZIP File Format Specification (PKWARE APPNOTE.TXT)](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) {{#include ../../../banners/hacktricks-training.md}}