dissect.target 3.16.dev15__py3-none-any.whl → 3.16.dev17__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -63,46 +63,48 @@ class Color(Enum):
63
63
 
64
64
 
65
65
  class CyberIO(StringIO):
66
- def __init__(self, color: Optional[Color] = None, mask_space: bool = False, run_at_end: bool = False):
66
+ def __init__(self, color: Optional[Color] = None, run_at_end: bool = False, **kwargs):
67
67
  self._color = color
68
- self._mask_space = mask_space
69
68
  self._run_at_end = run_at_end
69
+ self._kwargs = kwargs
70
70
  super().__init__()
71
71
 
72
72
  def write(self, s: str) -> int:
73
73
  if self._run_at_end:
74
74
  super().write(s)
75
75
  else:
76
- cyber_print(s, self._color, self._mask_space)
76
+ cyber_print(s, self._color, **self._kwargs)
77
77
  return len(s)
78
78
 
79
79
 
80
80
  @contextmanager
81
- def cyber(color: Optional[Color] = Color.YELLOW, mask_space: bool = False, run_at_end: bool = False) -> None:
82
- stream = CyberIO(color, mask_space, run_at_end)
81
+ def cyber(color: Optional[Color] = Color.YELLOW, run_at_end: bool = False, **kwargs) -> Iterator[None]:
82
+ stream = CyberIO(color, run_at_end, **kwargs)
83
83
  with redirect_stdout(stream):
84
84
  yield
85
85
 
86
86
  if run_at_end:
87
- cyber_print(stream.getvalue(), color, mask_space)
87
+ cyber_print(stream.getvalue(), color, **kwargs)
88
88
 
89
89
 
90
- def cyber_print(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> None:
90
+ def cyber_print(buf: str, color: Optional[Color] = None, **kwargs) -> None:
91
91
  if not buf or buf == "\n":
92
92
  sys.__stdout__.write(buf)
93
93
  return
94
94
 
95
95
  if not CAN_CYBER:
96
96
  sys.__stdout__.write("you're not cybering hard enough\n")
97
+ sys.__stdout__.write(buf)
98
+ return
97
99
 
98
100
  if os.getenv("CYBER") == "💊":
99
- matrix(buf, color, mask_space)
101
+ matrix(buf, color, **kwargs)
100
102
  else:
101
- nms(buf, color, mask_space)
103
+ nms(buf, color, **kwargs)
102
104
 
103
105
 
104
106
  # https://github.com/bartobri/libnms
105
- def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> None:
107
+ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False, mask_indent: bool = True, **kwargs) -> None:
106
108
  orig_row, orig_col = (0, 0)
107
109
  with _set_terminal():
108
110
  max_rows, max_cols = _get_win_size()
@@ -118,6 +120,7 @@ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> No
118
120
  character_state = []
119
121
 
120
122
  try:
123
+ is_indent = True
121
124
  # Write initial mask
122
125
  for char, has_ansi, end_ansi in characters:
123
126
  # Initialize the character state with a mask and reveal time
@@ -129,7 +132,16 @@ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> No
129
132
  mask = random.choice(NMS_MASK_TABLE)
130
133
  character_state.append((char, mask, reveal_time, has_ansi))
131
134
 
132
- if ("\n" in char or "\r\n" in char) or (not mask_space and char == " "):
135
+ if char != " ":
136
+ is_indent = False
137
+
138
+ if (
139
+ ("\n" in char or "\r\n" in char)
140
+ or (not mask_space and char == " " and not is_indent and not mask_indent)
141
+ or (not mask_indent and is_indent)
142
+ ):
143
+ if "\n" in char:
144
+ is_indent = True
133
145
  sys.__stdout__.write(char)
134
146
  continue
135
147
 
@@ -141,11 +153,21 @@ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> No
141
153
  _clear_input()
142
154
  time.sleep(1)
143
155
 
156
+ is_indent = True
144
157
  for _ in range((NMS_JUMBLE_SECONDS * 1000) // NMS_JUMBLE_LOOP_SPEED):
145
158
  _cursor_move(orig_row, orig_col)
146
159
 
147
160
  for char, _, _, _ in character_state:
148
- if ("\n" in char or "\r\n" in char) or (not mask_space and char == " "):
161
+ if char != " ":
162
+ is_indent = False
163
+
164
+ if (
165
+ ("\n" in char or "\r\n" in char)
166
+ or (not mask_space and char == " ")
167
+ or (not mask_indent and is_indent)
168
+ ):
169
+ if "\n" in char:
170
+ is_indent = True
149
171
  sys.__stdout__.write(char)
150
172
  continue
151
173
 
@@ -160,8 +182,18 @@ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> No
160
182
  _cursor_move(orig_row, orig_col)
161
183
  revealed = True
162
184
 
185
+ is_indent = True
163
186
  for i, (char, mask, time_remaining, has_ansi) in enumerate(character_state):
164
- if ("\n" in char or "\r\n" in char) or (not mask_space and char == " "):
187
+ if char != " ":
188
+ is_indent = False
189
+
190
+ if (
191
+ ("\n" in char or "\r\n" in char)
192
+ or (not mask_space and char == " " and not is_indent and not mask_indent)
193
+ or (not mask_indent and is_indent)
194
+ ):
195
+ if "\n" in char:
196
+ is_indent = True
165
197
  sys.__stdout__.write(char)
166
198
  continue
167
199
 
@@ -207,7 +239,7 @@ def nms(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> No
207
239
 
208
240
 
209
241
  # https://github.com/jsbueno/terminal_matrix
210
- def matrix(buf: str, color: Optional[Color] = None, mask_space: bool = False) -> None:
242
+ def matrix(buf: str, color: Optional[Color] = None, **kwargs) -> None:
211
243
  orig_row, orig_col = (0, 0)
212
244
  with _set_terminal():
213
245
  max_rows, max_cols = _get_win_size()
@@ -1,3 +1,5 @@
1
+ import os
2
+ import textwrap
1
3
  from pathlib import Path
2
4
 
3
5
  from dissect.target import Target
@@ -30,8 +32,11 @@ class CyberLoader(Loader):
30
32
  return False
31
33
 
32
34
  def map(self, target: Target) -> None:
33
- with cyber(mask_space=True):
34
- print(HEADER)
35
+ cols, _ = os.get_terminal_size()
36
+ width = HEADER.index("\n", 1)
37
+ header = textwrap.indent(HEADER, " " * ((cols - width) // 2))
38
+ with cyber(mask_space=True, mask_indent=False):
39
+ print(header)
35
40
 
36
41
  target.props["cyber"] = True
37
42
  return self._real.map(target)
@@ -158,16 +158,16 @@ class ApachePlugin(WebserverPlugin):
158
158
 
159
159
  Apache has three default access log formats, which this plugin can all parse automatically. These are::
160
160
 
161
- LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
162
- LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
163
- LogFormat "%h %l %u %t \"%r\" %>s %O"`` common
161
+ LogFormat "%v:%p %h %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"" vhost_combined
162
+ LogFormat "%h %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
163
+ LogFormat "%h %l %u %t \\"%r\\" %>s %O" common
164
164
 
165
165
  For the definitions of each format string, see https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
166
166
 
167
167
  For Apache, the error logs by default follow the following format::
168
168
 
169
- ErrorLogFormat ``"[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"``
170
- """ # noqa: E501, W605
169
+ ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\\ %a] %M% ,\\ referer\\ %{Referer}i"
170
+ """
171
171
 
172
172
  __namespace__ = "apache"
173
173
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.16.dev15
3
+ Version: 3.16.dev17
4
4
  Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -43,7 +43,7 @@ dissect/target/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
43
43
  dissect/target/helpers/cache.py,sha256=_0w_iPD1OM066Ueyadb70erQW05jNnpJe-bDDN1UyXc,8444
44
44
  dissect/target/helpers/config.py,sha256=6917CZ6eDHaK_tOoiVEIndyhRXO6r6eCBIleq6f47PQ,2346
45
45
  dissect/target/helpers/configutil.py,sha256=u8pG_6dznwnQwj7JpSH54NcYwLAhFkgdyixoBVTDWM0,22587
46
- dissect/target/helpers/cyber.py,sha256=MsGSF6BCWTIasqIk-PYySO0LQ9rfpgcz-kXtwr8aQ30,15746
46
+ dissect/target/helpers/cyber.py,sha256=Ki5oSU0GgQxjgC_yWoeieGP7GOY5blQCzNX7vy7Pgas,16782
47
47
  dissect/target/helpers/descriptor_extensions.py,sha256=uT8GwznfDAiIgMM7JKKOY0PXKMv2c0GCqJTCkWFgops,2605
48
48
  dissect/target/helpers/docs.py,sha256=J5U65Y3yOTqxDEZRCdrEmO63XQCeDzOJea1PwPM6Cyc,5146
49
49
  dissect/target/helpers/fsutil.py,sha256=jGinb11-w6TvbzH7z-9F6J09X5CY3_yxBoNsKxsFAXE,18637
@@ -74,7 +74,7 @@ dissect/target/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
74
74
  dissect/target/loaders/ad1.py,sha256=1_VmPZckDzXVvNF-HNtoUZqabnhCKBLUD3vVaitHQ00,571
75
75
  dissect/target/loaders/asdf.py,sha256=dvPPDBrnz2JPXpCbqsu-NgQWIdVGMOit2KAdhIO1iiQ,972
76
76
  dissect/target/loaders/cb.py,sha256=EGhdytBKBdofTd89juavDZZbmupEZmMBadeUXvVIK20,6612
77
- dissect/target/loaders/cyber.py,sha256=4dxXltOxlykFvYl2izg7Y-MajFLw8owOWm67xJcqTLA,1339
77
+ dissect/target/loaders/cyber.py,sha256=Ip2hI7L98ZP7gUZuHQr0GxBdmbTzD-PntXmLJ5KpBuQ,1533
78
78
  dissect/target/loaders/dir.py,sha256=nEJepNGI4EEP7MX3X15xysH9agKDmlKjfyd1DDulieU,4968
79
79
  dissect/target/loaders/hyperv.py,sha256=_IOUJEO0BXaCBZ6sjIX0DZTkG9UNW5Vs9VcNHYv073w,5928
80
80
  dissect/target/loaders/itunes.py,sha256=69aMTQiiGYpmD_EYSmf9mO1re8C3jAZIEStmwlMxdAk,13146
@@ -137,7 +137,7 @@ dissect/target/plugins/apps/vpn/wireguard.py,sha256=45WvCqQQGrG3DVDH5ghcsGpM_Bom
137
137
  dissect/target/plugins/apps/webhosting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  dissect/target/plugins/apps/webhosting/cpanel.py,sha256=OeFQnu9GmpffIlFyK-AR2Qf8tjyMhazWEAUyccDU5y0,2979
139
139
  dissect/target/plugins/apps/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
- dissect/target/plugins/apps/webserver/apache.py,sha256=H38Zj41EkfS27x98gBTuPHJmTOmlhfMK73PX6zQ4YOY,14933
140
+ dissect/target/plugins/apps/webserver/apache.py,sha256=ekvztMgL5h-KPCaaRtDxZXX8gEZfJVLjjVjlYgJc9O0,14924
141
141
  dissect/target/plugins/apps/webserver/caddy.py,sha256=qZsAK_tILGvroV4SWkDKc-Otwd41bUEtv9H9TuHmt-0,6422
142
142
  dissect/target/plugins/apps/webserver/citrix.py,sha256=FEPdBteEJeeGg3B95W_27O9wLJVhenEc5A5fSLDmK18,3044
143
143
  dissect/target/plugins/apps/webserver/iis.py,sha256=UwRVzLqnKScijdLoZFfpkSUzKTQosicZpn16q__4QBU,14669
@@ -323,10 +323,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
323
323
  dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
324
324
  dissect/target/volumes/md.py,sha256=j1K1iKmspl0C_OJFc7-Q1BMWN2OCC5EVANIgVlJ_fIE,1673
325
325
  dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
326
- dissect.target-3.16.dev15.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
327
- dissect.target-3.16.dev15.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
328
- dissect.target-3.16.dev15.dist-info/METADATA,sha256=SnVaNNIsvUdQtz2m0xMWaaBJi95rcbGRlLQPmLdMRy0,11113
329
- dissect.target-3.16.dev15.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
330
- dissect.target-3.16.dev15.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
331
- dissect.target-3.16.dev15.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
332
- dissect.target-3.16.dev15.dist-info/RECORD,,
326
+ dissect.target-3.16.dev17.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
327
+ dissect.target-3.16.dev17.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
328
+ dissect.target-3.16.dev17.dist-info/METADATA,sha256=YywPJw6suKORoLTsaNaA_ubrqmzRQJtwCuVQC1qEC7s,11113
329
+ dissect.target-3.16.dev17.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
330
+ dissect.target-3.16.dev17.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
331
+ dissect.target-3.16.dev17.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
332
+ dissect.target-3.16.dev17.dist-info/RECORD,,