From 5f1640d033cfb958e9e36b0051adccafe91e378c Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 20:10:12 +0000 Subject: [PATCH] Translated ['', 'src/generic-methodologies-and-resources/basic-forensic- --- .../zips-tricks.md | 163 ++++++++++++++++-- 1 file changed, 153 insertions(+), 10 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 1ef2e4e64..df68e87dd 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 @@ -1,21 +1,164 @@ -# ZIPs trikovi +# Trikovi sa ZIP fajlovima {{#include ../../../banners/hacktricks-training.md}} -**Alatke za komandnu liniju** za upravljanje **zip datotekama** su neophodne za dijagnostikovanje, popravku i probijanje zip datoteka. Evo nekoliko ključnih alata: +**Command-line tools** za upravljanje **zip fajlovima** su neophodni za dijagnostikovanje, popravku i probijanje zip fajlova. Evo nekoliko ključnih alata: -- **`unzip`**: Otkriva zašto zip datoteka možda ne može da se raspakuje. -- **`zipdetails -v`**: Pruža detaljnu analizu polja formata zip datoteke. -- **`zipinfo`**: Navodi sadržaj zip datoteke bez vađenja. -- **`zip -F input.zip --out output.zip`** i **`zip -FF input.zip --out output.zip`**: Pokušavaju da poprave oštećene zip datoteke. -- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Alat za brute-force probijanje zip lozinki, efikasan za lozinke do oko 7 karaktera. +- **`unzip`**: Otkriva zašto se zip fajl možda ne može dekompresovati. +- **`zipdetails -v`**: Pruža detaljnu analizu polja formata zip fajla. +- **`zipinfo`**: Prikazuje sadržaj zip fajla bez ekstrakcije. +- **`zip -F input.zip --out output.zip`** i **`zip -FF input.zip --out output.zip`**: Pokušavaju da poprave oštećene zip fajlove. +- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Alat za brute-force probijanje lozinki zip fajlova, efikasan za lozinke dužine do otprilike 7 karaktera. -[Specifikacija formata zip datoteka](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) pruža sveobuhvatne detalje o strukturi i standardima zip datoteka. +[Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) pruža sveobuhvatne detalje o strukturi i standardima zip fajlova. -Važno je napomenuti da zip datoteke zaštićene lozinkom **ne enkriptuju imena datoteka ili veličine datoteka** unutar, što je sigurnosni propust koji RAR ili 7z datoteke ne dele, jer enkriptuju te informacije. Pored toga, zip datoteke enkriptovane starijom metodom ZipCrypto su podložne **napadu u običnom tekstu** ako je dostupna neenkriptovana kopija kompresovane datoteke. Ovaj napad koristi poznati sadržaj za probijanje zip lozinke, ranjivost detaljno objašnjenu u [HackThis članku](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) i dodatno objašnjenu u [ovoj akademskoj studiji](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf). Međutim, zip datoteke zaštićene **AES-256** enkripcijom su imune na ovaj napad u običnom tekstu, što pokazuje važnost izbora sigurnih metoda enkripcije za osetljive podatke. +Važno je napomenuti da zip fajlovi zaštićeni lozinkom **ne šifruju nazive fajlova ili veličine fajlova** unutar arhive, što je sigurnosna mana koju nemaju RAR ili 7z fajlovi koji šifruju te informacije. Pored toga, zip fajlovi šifrovani starijom metodom ZipCrypto su podložni **plaintext attack** ako postoji nekriptovana kopija kompresovanog fajla. Ovaj napad koristi poznati sadržaj da bi otkrio lozinku zip arhive, ranjivost opisana u [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) i dalje objašnjena u [this academic paper](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf). Međutim, zip fajlovi zaštićeni sa **AES-256** enkripcijom su imuni na ovaj plaintext attack, što naglašava važnost izbora sigurnih metoda enkripcije za osetljive podatke. -## Reference +--- + +## Trikovi za anti-reversing u APK-ovima korišćenjem manipulisanih ZIP zaglavlja + +Moderni Android malware droperi koriste malformirane ZIP meta-podatke da bi slomili statičke alate (jadx/apktool/unzip) dok APK ostaje instalabilan na uređaju. Najčešći trikovi su: + +- Fake encryption by setting the ZIP General Purpose Bit Flag (GPBF) bit 0 +- Zloupotreba velikih/prilagođenih Extra polja da zbuni parsere +- Kolizije imena fajlova/direktorijuma za skrivanje pravih artefakata (npr. direktorijum nazvan `classes.dex/` pored pravog `classes.dex`) + +### 1) Fake encryption (GPBF bit 0 set) without real crypto + +Simptomi: +- `jadx-gui` javlja greške kao: +``` +java.util.zip.ZipException: invalid CEN header (encrypted entry) +``` +- `unzip` traži lozinku za osnovne APK fajlove iako validan APK ne može imati kriptovane `classes*.dex`, `resources.arsc`, ili `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 +``` + +Detekcija pomoću zipdetails: +```bash +zipdetails -v sample.apk | less +``` +Pogledajte General Purpose Bit Flag za lokalna i centralna zaglavlja. Upadljiva vrednost je postavljen bit 0 (Encryption) čak i za osnovne unose: +``` +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' +``` +Heuristika: Ako se APK instalira i pokreće na uređaju, ali core entries izgledaju "encrypted" alatima, GPBF je izmenjen. + +Rešenje: Očistite bit 0 GPBF-a u oba Local File Headers (LFH) i Central Directory (CD) unosa. 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 ideje za detekciju: +- Označiti APK-ove čija lokalna zaglavlja označavaju enkripciju (GPBF bit 0 = 1) ali se ipak instaliraju/pokreću. +- Označiti velika/nepoznata Extra polja na core entries (tražiti markere poput `JADXBLOCK`). +- Označiti path-collisions (`X` i `X/`) posebno za `AndroidManifest.xml`, `resources.arsc`, `classes*.dex`. + +--- + +## References - [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}}