From cafc4fb6055b1c18a03820b4f3c485bceac9b3c1 Mon Sep 17 00:00:00 2001 From: JSCU-CNI <121175071+JSCU-CNI@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:08:09 +0200 Subject: [PATCH] Improve tar loader for Windows filesystem tar files (#353) --- dissect/target/loaders/tar.py | 6 ++++-- tests/data/test-windows-fs-c-absolute.tar | Bin 0 -> 10240 bytes tests/data/test-windows-fs-c-relative.tar | Bin 0 -> 10240 bytes tests/data/test-windows-sysvol-absolute.tar | Bin 0 -> 10240 bytes tests/data/test-windows-sysvol-relative.tar | Bin 0 -> 10240 bytes tests/test_loaders_tar.py | 18 ++++++++++++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 tests/data/test-windows-fs-c-absolute.tar create mode 100644 tests/data/test-windows-fs-c-relative.tar create mode 100644 tests/data/test-windows-sysvol-absolute.tar create mode 100644 tests/data/test-windows-sysvol-relative.tar diff --git a/dissect/target/loaders/tar.py b/dissect/target/loaders/tar.py index f6f7c8b9b..f8b544802 100644 --- a/dissect/target/loaders/tar.py +++ b/dissect/target/loaders/tar.py @@ -42,7 +42,7 @@ def map(self, target: target.Target) -> None: if member.name == ".": continue - if not member.name.startswith("fs/") and not member.name.startswith("/sysvol"): + if not member.name.startswith(("/fs", "fs/", "/sysvol", "sysvol/")): if "/" not in volumes: vol = filesystem.VirtualFilesystem(case_sensitive=True) vol.tar = self.tar @@ -52,8 +52,10 @@ def map(self, target: target.Target) -> None: volume = volumes["/"] mname = member.name else: - if not member.name.startswith("/sysvol"): + if not member.name.startswith(("/sysvol", "sysvol/")): parts = member.name.replace("fs/", "").split("/") + if parts[0] == "": + parts.pop(0) else: parts = member.name.lstrip("/").split("/") volume_name = parts[0] diff --git a/tests/data/test-windows-fs-c-absolute.tar b/tests/data/test-windows-fs-c-absolute.tar new file mode 100644 index 0000000000000000000000000000000000000000..1378746dcdbdad13c9e0bf7ea110d871fe091f8a GIT binary patch literal 10240 zcmeIx(F(#K6vlBMWlxYgHKEt&qU%^2bkT$~s<+SWZi9$m^Jf2ZBPz(@_jzO&Wpj|H zYkvvPD8(A3a(VB?u;!YtyK6y2NW1Afn~(&;@O+uh>*lD> zxBlv0UaM8g#H#CBjccssI-QBNWmOh3-CHA-sH|M2o5iC~A1;sB(&Bh8+isTs>ElCt zmptu97z6$<|J>Mu{I~dnU-IvqJA`*g)4|XDW7zZg7m-S3o6O|i=ij-kaeZj};M1hd vD+nNf00IagfB*srAbq>m?f2E8PMV6gh`TnPvi-T`t)5b7I x*8G700tg_000IagfB*srAb