atomicshop 2.11.49__py3-none-any.whl → 2.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of atomicshop might be problematic. Click here for more details.
- atomicshop/__init__.py +1 -1
- atomicshop/addons/mains/__pycache__/install_fibratus_windows.cpython-312.pyc +0 -0
- atomicshop/addons/mains/install_fibratus_windows.py +9 -0
- atomicshop/filesystem.py +46 -0
- atomicshop/permissions.py +29 -0
- atomicshop/web.py +1 -0
- atomicshop/wrappers/fibratusw/__init__.py +0 -0
- atomicshop/wrappers/fibratusw/install.py +81 -0
- atomicshop/wrappers/githubw.py +60 -11
- atomicshop/wrappers/msiw.py +60 -0
- {atomicshop-2.11.49.dist-info → atomicshop-2.12.0.dist-info}/METADATA +1 -1
- {atomicshop-2.11.49.dist-info → atomicshop-2.12.0.dist-info}/RECORD +15 -10
- {atomicshop-2.11.49.dist-info → atomicshop-2.12.0.dist-info}/LICENSE.txt +0 -0
- {atomicshop-2.11.49.dist-info → atomicshop-2.12.0.dist-info}/WHEEL +0 -0
- {atomicshop-2.11.49.dist-info → atomicshop-2.12.0.dist-info}/top_level.txt +0 -0
atomicshop/__init__.py
CHANGED
atomicshop/filesystem.py
CHANGED
|
@@ -6,6 +6,8 @@ import shutil
|
|
|
6
6
|
import stat
|
|
7
7
|
import errno
|
|
8
8
|
from contextlib import contextmanager
|
|
9
|
+
from typing import Literal
|
|
10
|
+
import tempfile
|
|
9
11
|
|
|
10
12
|
import psutil
|
|
11
13
|
|
|
@@ -115,6 +117,22 @@ def get_working_directory() -> str:
|
|
|
115
117
|
return str(Path.cwd())
|
|
116
118
|
|
|
117
119
|
|
|
120
|
+
def get_temp_directory() -> str:
|
|
121
|
+
"""
|
|
122
|
+
The function returns temporary directory of the system.
|
|
123
|
+
|
|
124
|
+
:return: string.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
# Get the temporary directory in 8.3 format
|
|
128
|
+
short_temp_dir = tempfile.gettempdir()
|
|
129
|
+
|
|
130
|
+
# Convert to the long path name
|
|
131
|
+
long_temp_dir = str(Path(short_temp_dir).resolve())
|
|
132
|
+
|
|
133
|
+
return long_temp_dir
|
|
134
|
+
|
|
135
|
+
|
|
118
136
|
def get_file_directory(file_path: str) -> str:
|
|
119
137
|
"""
|
|
120
138
|
The function will return directory of the file.
|
|
@@ -1273,3 +1291,31 @@ def is_file_open_by_process(file_path: str) -> bool:
|
|
|
1273
1291
|
continue
|
|
1274
1292
|
|
|
1275
1293
|
return False
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
def get_download_directory(place: Literal['temp', 'script', 'working'] = 'temp', script_path: str = None) -> str:
|
|
1297
|
+
"""
|
|
1298
|
+
The function returns the default download directory based on place.
|
|
1299
|
+
|
|
1300
|
+
:param place: string,
|
|
1301
|
+
'temp', then the function will return the temporary directory.
|
|
1302
|
+
'script', then the function will return the directory of the script.
|
|
1303
|
+
'working', then the function will return the working directory.
|
|
1304
|
+
:param script_path: string, full path to the script.
|
|
1305
|
+
:return: string, full path to the default download directory.
|
|
1306
|
+
"""
|
|
1307
|
+
|
|
1308
|
+
if place == 'script' and script_path is None:
|
|
1309
|
+
raise ValueError("Script path must be specified if place is 'script'.")
|
|
1310
|
+
|
|
1311
|
+
# Get the download directory based on the operating system
|
|
1312
|
+
if place == 'script':
|
|
1313
|
+
download_directory = get_file_directory(script_path)
|
|
1314
|
+
elif place == 'working':
|
|
1315
|
+
download_directory = get_working_directory()
|
|
1316
|
+
elif place == 'temp':
|
|
1317
|
+
download_directory = get_temp_directory()
|
|
1318
|
+
else:
|
|
1319
|
+
raise ValueError("Invalid place specified.")
|
|
1320
|
+
|
|
1321
|
+
return download_directory
|
atomicshop/permissions.py
CHANGED
|
@@ -108,3 +108,32 @@ def expand_user_path(user_name, path):
|
|
|
108
108
|
pwnam = pwd.getpwnam(user_name)
|
|
109
109
|
home_dir = pwnam.pw_dir
|
|
110
110
|
return path.replace("~", home_dir)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def unblock_file_windows(file_path):
|
|
114
|
+
"""
|
|
115
|
+
Unblock a file on Windows. This is used to unblock files downloaded from the internet.
|
|
116
|
+
When you Right-click then navigate to Properties, you will see the Unblock checkbox.
|
|
117
|
+
:param file_path:
|
|
118
|
+
:return:
|
|
119
|
+
"""
|
|
120
|
+
try:
|
|
121
|
+
subprocess.run(["powershell", "-Command", f"Unblock-File -Path '{file_path}'"], check=True)
|
|
122
|
+
print(f"Successfully unblocked the file: {file_path}")
|
|
123
|
+
except subprocess.CalledProcessError as e:
|
|
124
|
+
print(f"Failed to unblock the file: {file_path}\nError: {e}")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def get_command_to_run_as_admin_windows(command: str) -> str:
|
|
128
|
+
"""
|
|
129
|
+
Function returns the command to run a command as administrator on Windows.
|
|
130
|
+
:param command: str, command to run.
|
|
131
|
+
:return: str, command to run as administrator.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
executable = command.split()[0]
|
|
135
|
+
command = (
|
|
136
|
+
f"powershell -Command "
|
|
137
|
+
f"\"Start-Process {executable} -ArgumentList '{' '.join(command.split()[1:])}' -Verb RunAs\"")
|
|
138
|
+
|
|
139
|
+
return command
|
atomicshop/web.py
CHANGED
|
@@ -174,6 +174,7 @@ def download(file_url: str, target_directory: str, file_name: str = None, **kwar
|
|
|
174
174
|
file_path: str = f'{target_directory}{os.sep}{file_name}'
|
|
175
175
|
|
|
176
176
|
print_api(f'Downloading: {file_url}', **kwargs)
|
|
177
|
+
print_api(f'To: {file_path}', **kwargs)
|
|
177
178
|
|
|
178
179
|
# In order to use 'urllib.request', it is not enough to 'import urllib', you need to 'import urllib.request'.
|
|
179
180
|
# Open the URL for data gathering.
|
|
File without changes
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
import subprocess
|
|
3
|
+
import time
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
from .. import githubw, msiw
|
|
7
|
+
from ... import filesystem
|
|
8
|
+
from ...print_api import print_api
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
DEFAULT_INSTALLATION_EXE_PATH = r"C:\Program Files\Fibratus\Bin\fibratus.exe"
|
|
12
|
+
WAIT_SECONDS_FOR_EXECUTABLE_TO_APPEAR_AFTER_INSTALLATION: float = 10
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def install_fibratus(
|
|
16
|
+
installation_file_download_directory: str = None,
|
|
17
|
+
place_to_download_file: Literal['working', 'temp', 'script'] = 'temp',
|
|
18
|
+
remove_file_after_installation: bool = False
|
|
19
|
+
):
|
|
20
|
+
"""
|
|
21
|
+
Download latest release from GitHub and install Fibratus.
|
|
22
|
+
:param installation_file_download_directory: Directory to download the installation file. If None, the download
|
|
23
|
+
directory will be automatically determined, by the 'place_to_download_file' parameter.
|
|
24
|
+
:param place_to_download_file: Where to download the installation file.
|
|
25
|
+
'working' is the working directory of the script.
|
|
26
|
+
'temp' is the temporary directory.
|
|
27
|
+
'script' is the directory of the script.
|
|
28
|
+
:param remove_file_after_installation: Whether to remove the installation file after installation.
|
|
29
|
+
:return:
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
if not installation_file_download_directory:
|
|
33
|
+
installation_file_download_directory = filesystem.get_download_directory(
|
|
34
|
+
place=place_to_download_file, script_path=__file__)
|
|
35
|
+
|
|
36
|
+
github_wrapper = githubw.GitHubWrapper(user_name='rabbitstack', repo_name='fibratus')
|
|
37
|
+
fibratus_setup_file_path: str = github_wrapper.download_latest_release(
|
|
38
|
+
target_directory=installation_file_download_directory,
|
|
39
|
+
string_pattern='*fibratus-*-amd64.msi',
|
|
40
|
+
exclude_string='slim')
|
|
41
|
+
|
|
42
|
+
# Install the MSI file
|
|
43
|
+
msiw.install_msi(
|
|
44
|
+
msi_path=fibratus_setup_file_path, exit_on_error=True, as_admin=True)
|
|
45
|
+
|
|
46
|
+
count = 0
|
|
47
|
+
while count != WAIT_SECONDS_FOR_EXECUTABLE_TO_APPEAR_AFTER_INSTALLATION:
|
|
48
|
+
if os.path.isfile(DEFAULT_INSTALLATION_EXE_PATH):
|
|
49
|
+
break
|
|
50
|
+
count += 1
|
|
51
|
+
time.sleep(1)
|
|
52
|
+
|
|
53
|
+
if count == WAIT_SECONDS_FOR_EXECUTABLE_TO_APPEAR_AFTER_INSTALLATION:
|
|
54
|
+
message = \
|
|
55
|
+
(f"Fibratus installation failed. The executable was not found after "
|
|
56
|
+
f"{str(WAIT_SECONDS_FOR_EXECUTABLE_TO_APPEAR_AFTER_INSTALLATION)} seconds.\n"
|
|
57
|
+
f"{DEFAULT_INSTALLATION_EXE_PATH}")
|
|
58
|
+
print_api(message, color="red")
|
|
59
|
+
|
|
60
|
+
result = None
|
|
61
|
+
# Check if the installation was successful
|
|
62
|
+
try:
|
|
63
|
+
result = subprocess.run([DEFAULT_INSTALLATION_EXE_PATH], capture_output=True, text=True)
|
|
64
|
+
except FileNotFoundError:
|
|
65
|
+
print_api("Fibratus executable not found.", color="red")
|
|
66
|
+
|
|
67
|
+
if result:
|
|
68
|
+
if result.returncode == 0:
|
|
69
|
+
print_api("Fibratus installed successfully. Please restart.", color="green")
|
|
70
|
+
else:
|
|
71
|
+
print_api("Fibratus installation failed.", color="red")
|
|
72
|
+
print_api(result.stderr)
|
|
73
|
+
raise Exception("Fibratus installation failed.")
|
|
74
|
+
else:
|
|
75
|
+
print_api("Fibratus executable not found.", color="red")
|
|
76
|
+
|
|
77
|
+
# Wait for the installation to finish before removing the file.
|
|
78
|
+
time.sleep(5)
|
|
79
|
+
|
|
80
|
+
if remove_file_after_installation:
|
|
81
|
+
filesystem.remove_file(fibratus_setup_file_path)
|
atomicshop/wrappers/githubw.py
CHANGED
|
@@ -3,6 +3,7 @@ import fnmatch
|
|
|
3
3
|
|
|
4
4
|
from .. import web, urls
|
|
5
5
|
from ..print_api import print_api
|
|
6
|
+
from ..basics import strings
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class GitHubWrapper:
|
|
@@ -146,22 +147,17 @@ class GitHubWrapper:
|
|
|
146
147
|
archive_remove_first_directory=archive_remove_first_directory,
|
|
147
148
|
**kwargs)
|
|
148
149
|
|
|
149
|
-
def
|
|
150
|
+
def get_latest_release_url(
|
|
150
151
|
self,
|
|
151
|
-
target_directory: str,
|
|
152
152
|
string_pattern: str,
|
|
153
|
-
|
|
153
|
+
exclude_string: str = None,
|
|
154
154
|
**kwargs):
|
|
155
155
|
"""
|
|
156
|
-
This function will
|
|
157
|
-
leaving only the extracted folder.
|
|
158
|
-
:param target_directory: str, the target directory to download and extract the file.
|
|
156
|
+
This function will return the latest release url.
|
|
159
157
|
:param string_pattern: str, the string pattern to search in the latest release. Wildcards can be used.
|
|
160
|
-
:param
|
|
161
|
-
without first directory in the archive. Check reference in the
|
|
162
|
-
'archiver.zip.extract_archive_with_zipfile' function.
|
|
158
|
+
:param exclude_string: str, the string to exclude from the search. No wildcards can be used.
|
|
163
159
|
:param kwargs: dict, the print arguments for the 'print_api' function.
|
|
164
|
-
:return:
|
|
160
|
+
:return: str, the latest release url.
|
|
165
161
|
"""
|
|
166
162
|
|
|
167
163
|
# Get the 'assets' key of the latest release json.
|
|
@@ -172,6 +168,12 @@ class GitHubWrapper:
|
|
|
172
168
|
for single_dict in github_latest_releases_list:
|
|
173
169
|
download_urls.append(single_dict['browser_download_url'])
|
|
174
170
|
|
|
171
|
+
# Exclude urls against 'exclude_string'.
|
|
172
|
+
if exclude_string:
|
|
173
|
+
for download_url in download_urls:
|
|
174
|
+
if exclude_string in download_url:
|
|
175
|
+
download_urls.remove(download_url)
|
|
176
|
+
|
|
175
177
|
# Find urls against 'string_pattern'.
|
|
176
178
|
found_urls = fnmatch.filter(download_urls, string_pattern)
|
|
177
179
|
|
|
@@ -182,8 +184,55 @@ class GitHubWrapper:
|
|
|
182
184
|
f'{found_urls}'
|
|
183
185
|
print_api(message, color="red", error_type=True, **kwargs)
|
|
184
186
|
|
|
187
|
+
return found_urls[0]
|
|
188
|
+
|
|
189
|
+
def download_latest_release(
|
|
190
|
+
self,
|
|
191
|
+
target_directory: str,
|
|
192
|
+
string_pattern: str,
|
|
193
|
+
exclude_string: str = None,
|
|
194
|
+
**kwargs):
|
|
195
|
+
"""
|
|
196
|
+
This function will download the latest release from the GitHub repository.
|
|
197
|
+
:param target_directory: str, the target directory to download the file.
|
|
198
|
+
:param string_pattern: str, the string pattern to search in the latest release. Wildcards can be used.
|
|
199
|
+
:param exclude_string: str, the string to exclude from the search. No wildcards can be used.
|
|
200
|
+
The 'excluded_string' will be filtered before the 'string_pattern' entries.
|
|
201
|
+
:param kwargs: dict, the print arguments for the 'print_api' function.
|
|
202
|
+
:return:
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
# Get the latest release url.
|
|
206
|
+
found_url = self.get_latest_release_url(string_pattern=string_pattern, exclude_string=exclude_string, **kwargs)
|
|
207
|
+
|
|
208
|
+
downloaded_file_path = web.download(file_url=found_url, target_directory=target_directory, **kwargs)
|
|
209
|
+
return downloaded_file_path
|
|
210
|
+
|
|
211
|
+
def download_and_extract_latest_release(
|
|
212
|
+
self,
|
|
213
|
+
target_directory: str,
|
|
214
|
+
string_pattern: str,
|
|
215
|
+
exclude_string: str = None,
|
|
216
|
+
archive_remove_first_directory: bool = False,
|
|
217
|
+
**kwargs):
|
|
218
|
+
"""
|
|
219
|
+
This function will download the latest release from the GitHub repository, extract the file and remove the file,
|
|
220
|
+
leaving only the extracted folder.
|
|
221
|
+
:param target_directory: str, the target directory to download and extract the file.
|
|
222
|
+
:param string_pattern: str, the string pattern to search in the latest release. Wildcards can be used.
|
|
223
|
+
:param exclude_string: str, the string to exclude from the search. No wildcards can be used.
|
|
224
|
+
:param archive_remove_first_directory: bool, sets if archive extract function will extract the archive
|
|
225
|
+
without first directory in the archive. Check reference in the
|
|
226
|
+
'archiver.zip.extract_archive_with_zipfile' function.
|
|
227
|
+
:param kwargs: dict, the print arguments for the 'print_api' function.
|
|
228
|
+
:return:
|
|
229
|
+
"""
|
|
230
|
+
|
|
231
|
+
# Get the latest release url.
|
|
232
|
+
found_url = self.get_latest_release_url(string_pattern=string_pattern, exclude_string=exclude_string, **kwargs)
|
|
233
|
+
|
|
185
234
|
web.download_and_extract_file(
|
|
186
|
-
file_url=
|
|
235
|
+
file_url=found_url,
|
|
187
236
|
target_directory=target_directory,
|
|
188
237
|
archive_remove_first_directory=archive_remove_first_directory,
|
|
189
238
|
**kwargs)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
|
|
3
|
+
from ..print_api import print_api
|
|
4
|
+
from .. import permissions
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
ERROR_CODES = {
|
|
8
|
+
'1603': 'The App is already installed or Insufficient permissions',
|
|
9
|
+
'1619': 'This installation package could not be opened. Verify that the package exists and that you can '
|
|
10
|
+
'install it manually, also check the installation command line switches'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def install_msi(
|
|
15
|
+
msi_path,
|
|
16
|
+
silent_no_gui=True,
|
|
17
|
+
silent_progress_bar=False,
|
|
18
|
+
no_restart=True,
|
|
19
|
+
as_admin=False,
|
|
20
|
+
exit_on_error=False,
|
|
21
|
+
print_kwargs=None):
|
|
22
|
+
"""
|
|
23
|
+
Install an MSI file silently.
|
|
24
|
+
:param msi_path: str, path to the MSI file.
|
|
25
|
+
:param silent_no_gui: bool, whether to run the installation silently, without showing GUI.
|
|
26
|
+
:param silent_progress_bar: bool, whether to show a progress bar during silent installation.
|
|
27
|
+
:param no_restart: bool, whether to restart the computer after installation.
|
|
28
|
+
:param as_admin: bool, whether to run the installation as administrator.
|
|
29
|
+
:param exit_on_error: bool, whether to exit the script if the installation fails.
|
|
30
|
+
:param print_kwargs: dict, print_api kwargs.
|
|
31
|
+
:return:
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
if silent_progress_bar and silent_no_gui:
|
|
35
|
+
raise ValueError("silent_progress_bar and silent_no_gui cannot be both True.")
|
|
36
|
+
|
|
37
|
+
# Define the msiexec command
|
|
38
|
+
command = f'msiexec /i "{msi_path}"'
|
|
39
|
+
|
|
40
|
+
if silent_no_gui:
|
|
41
|
+
command = f"{command} /qn"
|
|
42
|
+
if silent_progress_bar:
|
|
43
|
+
command = f"{command} /qb"
|
|
44
|
+
if no_restart:
|
|
45
|
+
command = f"{command} /norestart"
|
|
46
|
+
|
|
47
|
+
if as_admin:
|
|
48
|
+
command = permissions.get_command_to_run_as_admin_windows(command)
|
|
49
|
+
|
|
50
|
+
# Run the command
|
|
51
|
+
result = subprocess.run(command, capture_output=True, shell=True, text=True)
|
|
52
|
+
|
|
53
|
+
# Check the result
|
|
54
|
+
if result.returncode == 0:
|
|
55
|
+
print_api("MSI Installation completed.", color="green", **(print_kwargs or {}))
|
|
56
|
+
else:
|
|
57
|
+
message = f"Installation failed. Return code: {result.returncode}\n{ERROR_CODES.get(str(result.returncode), '')}"
|
|
58
|
+
print_api(message, color="red", **(print_kwargs or {}))
|
|
59
|
+
if exit_on_error:
|
|
60
|
+
exit()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
atomicshop/__init__.py,sha256=
|
|
1
|
+
atomicshop/__init__.py,sha256=8ZKqx9-Se0JtEyqegyhmE18yPrampj8_boZTeK7vSMc,123
|
|
2
2
|
atomicshop/_basics_temp.py,sha256=6cu2dd6r2dLrd1BRNcVDKTHlsHs_26Gpw8QS6v32lQ0,3699
|
|
3
3
|
atomicshop/_create_pdf_demo.py,sha256=Yi-PGZuMg0RKvQmLqVeLIZYadqEZwUm-4A9JxBl_vYA,3713
|
|
4
4
|
atomicshop/_patch_import.py,sha256=ENp55sKVJ0e6-4lBvZnpz9PQCt3Otbur7F6aXDlyje4,6334
|
|
@@ -14,7 +14,7 @@ atomicshop/dns.py,sha256=bNZOo5jVPzq7OT2qCPukXoK3zb1oOsyaelUwQEyK1SA,2500
|
|
|
14
14
|
atomicshop/domains.py,sha256=Rxu6JhhMqFZRcoFs69IoEd1PtYca0lMCG6F1AomP7z4,3197
|
|
15
15
|
atomicshop/emails.py,sha256=I0KyODQpIMEsNRi9YWSOL8EUPBiWyon3HRdIuSj3AEU,1410
|
|
16
16
|
atomicshop/file_types.py,sha256=-0jzQMRlmU1AP9DARjk-HJm1tVE22E6ngP2mRblyEjY,763
|
|
17
|
-
atomicshop/filesystem.py,sha256=
|
|
17
|
+
atomicshop/filesystem.py,sha256=JVWoOSkm-lfh11nBMlrP0w_YnrTFnJ5noYLtoN5Nf5o,48809
|
|
18
18
|
atomicshop/functions.py,sha256=pK8hoCE9z61PtWCxQJsda7YAphrLH1wxU5x-1QJP-sY,499
|
|
19
19
|
atomicshop/hashing.py,sha256=Le8qGFyt3_wX-zGTeQShz7L2HL_b6nVv9PnawjglyHo,3474
|
|
20
20
|
atomicshop/http_parse.py,sha256=nrf2rZcprLqtW8HVrV7TCZ1iTBcWRRy-mXIlAOzcaJs,9703
|
|
@@ -22,7 +22,7 @@ atomicshop/inspect_wrapper.py,sha256=sGRVQhrJovNygHTydqJj0hxES-aB2Eg9KbIk3G31apw
|
|
|
22
22
|
atomicshop/ip_addresses.py,sha256=Hvi4TumEFoTEpKWaq5WNF-YzcRzt24IxmNgv-Mgax1s,1190
|
|
23
23
|
atomicshop/keyboard_press.py,sha256=1W5kRtOB75fulVx-uF2yarBhW0_IzdI1k73AnvXstk0,452
|
|
24
24
|
atomicshop/pbtkmultifile_argparse.py,sha256=aEk8nhvoQVu-xyfZosK3ma17CwIgOjzO1erXXdjwtS4,4574
|
|
25
|
-
atomicshop/permissions.py,sha256=
|
|
25
|
+
atomicshop/permissions.py,sha256=pGynX57FqFdCW2Y6dE1T0oqL7ujagMAABw7nPHxi2IQ,4094
|
|
26
26
|
atomicshop/print_api.py,sha256=DhbCQd0MWZZ5GYEk4oTu1opRFC-b31g1VWZgTGewG2Y,11568
|
|
27
27
|
atomicshop/process.py,sha256=kOLrpUb5T5QN9ZvpGOjXyo7Kivrc14A9gcw9lvNMidI,15670
|
|
28
28
|
atomicshop/process_name_cmd.py,sha256=TNAK6kQZm5JKWzEW6QLqVHEG98ZLNDQiSS4YwDk8V8c,3830
|
|
@@ -44,7 +44,7 @@ atomicshop/timer.py,sha256=KxBBgVM8po6pUJDW8TgY1UXj0iiDmRmL5XDCq0VHAfU,1670
|
|
|
44
44
|
atomicshop/urls.py,sha256=CQl1j1kjEVDlAuYJqYD9XxPF1SUSgrmG8PjlcXNEKsQ,597
|
|
45
45
|
atomicshop/uuids.py,sha256=JSQdm3ZTJiwPQ1gYe6kU0TKS_7suwVrHc8JZDGYlydM,2214
|
|
46
46
|
atomicshop/virtualization.py,sha256=LPP4vjE0Vr10R6DA4lqhfX_WaNdDGRAZUW0Am6VeGco,494
|
|
47
|
-
atomicshop/web.py,sha256=
|
|
47
|
+
atomicshop/web.py,sha256=Ks_4F02MUqGvFRC-gs2H_NHk3jf1XIzrf_Q_NFb3re4,11116
|
|
48
48
|
atomicshop/addons/PlayWrightCodegen.cmd,sha256=Z5cnllsyXD4F1W2h-WLEnyFkg5nZy0-hTGHRWXVOuW4,173
|
|
49
49
|
atomicshop/addons/ScriptExecution.cmd,sha256=8iC-uHs9MX9qUD_C2M7n9Xw4MZvwOfxT8H5v3hluVps,93
|
|
50
50
|
atomicshop/addons/a_setup_scripts/install_psycopg2_ubuntu.sh,sha256=lM7LkXQ2AxfFzDGyzSOfIS_zpg9bAD1k3JJ-qu5CdH8,81
|
|
@@ -52,11 +52,13 @@ atomicshop/addons/a_setup_scripts/install_pywintrace_0.3.cmd,sha256=lEP_o6rWcBFU
|
|
|
52
52
|
atomicshop/addons/mains/install_docker_rootless_ubuntu.py,sha256=9IPNtGZYjfy1_n6ZRt7gWz9KZgR6XCgevjqq02xk-o0,281
|
|
53
53
|
atomicshop/addons/mains/install_docker_ubuntu_main_sudo.py,sha256=JzayxeyKDtiuT4Icp2L2LyFRbx4wvpyN_bHLfZ-yX5E,281
|
|
54
54
|
atomicshop/addons/mains/install_elastic_search_and_kibana_ubuntu.py,sha256=yRB-l1zBxdiN6av-FwNkhcBlaeu4zrDPjQ0uPGgpK2I,244
|
|
55
|
+
atomicshop/addons/mains/install_fibratus_windows.py,sha256=TU4e9gdZ_zI73C40uueJ59pD3qmN-UFGdX5GFoVf6cM,179
|
|
55
56
|
atomicshop/addons/mains/install_wsl_ubuntu_lts_admin.py,sha256=PrvZ4hMuadzj2GYKRZSwyNayJUuaSnCF9nV6ORqoPdo,123
|
|
56
57
|
atomicshop/addons/mains/msi_unpacker.py,sha256=XAJdEqs-3s9JqIgHpGRL-HxLKpFMXdrlXmq2Is2Pyfk,164
|
|
57
58
|
atomicshop/addons/mains/search_for_hyperlinks_in_docx.py,sha256=HkIdo_Sz9nPbbbJf1mwfwFkyI7vkvpH8qiIkuYopN4w,529
|
|
58
59
|
atomicshop/addons/mains/FACT/factw_fact_extractor_docker_image_main_sudo.py,sha256=DDKX3Wp2SmzMCEtCIEOUbEKMob2ZQ7VEQGLEf9uYXrs,320
|
|
59
60
|
atomicshop/addons/mains/FACT/update_extract.py,sha256=H3VsdhlA7xxK5lI_nyrWUdk8GNZXbEUVR_K9cJ4ECAw,506
|
|
61
|
+
atomicshop/addons/mains/__pycache__/install_fibratus_windows.cpython-312.pyc,sha256=u92dFjDrTbZBIti9B3ttna33Jg1ZSeMYhTiupdfklt4,549
|
|
60
62
|
atomicshop/addons/mains/inits/init_to_import_all_modules.py,sha256=piyFjkqtNbM9PT2p8aGcatI615517XEQHgU9kDFwseY,559
|
|
61
63
|
atomicshop/addons/package_setup/CreateWheel.cmd,sha256=hq9aWBSH6iffYlZyaCNrFlA0vxMh3j1k8DQE8IARQuA,189
|
|
62
64
|
atomicshop/addons/package_setup/Setup in Edit mode.cmd,sha256=299RsExjR8Mup6YyC6rW0qF8lnwa3uIzwk_gYg_R_Ss,176
|
|
@@ -147,7 +149,8 @@ atomicshop/wrappers/astw.py,sha256=VkYfkfyc_PJLIOxByT6L7B8uUmKY6-I8XGZl4t_z828,4
|
|
|
147
149
|
atomicshop/wrappers/configparserw.py,sha256=JwDTPjZoSrv44YKwIRcjyUnpN-FjgXVfMqMK_tJuSgU,22800
|
|
148
150
|
atomicshop/wrappers/cryptographyw.py,sha256=H5NaHHDkr97QYhUrHFO9vY218u8k3N3Zgh6bQRnicUE,13140
|
|
149
151
|
atomicshop/wrappers/ffmpegw.py,sha256=wcq0ZnAe0yajBOuTKZCCaKI7CDBjkq7FAgdW5IsKcVE,6031
|
|
150
|
-
atomicshop/wrappers/githubw.py,sha256=
|
|
152
|
+
atomicshop/wrappers/githubw.py,sha256=AQcFuT5mvDUNT_cI31MwkJ7srdhMtttF8FyXS8vs5cU,12270
|
|
153
|
+
atomicshop/wrappers/msiw.py,sha256=1kEs9T3eJYGzEpEBXaq8OZxlCnV4gnIR4zhmCsQiKvY,2201
|
|
151
154
|
atomicshop/wrappers/numpyw.py,sha256=sBV4gSKyr23kXTalqAb1oqttzE_2XxBooCui66jbAqc,1025
|
|
152
155
|
atomicshop/wrappers/olefilew.py,sha256=biD5m58rogifCYmYhJBrAFb9O_Bn_spLek_9HofLeYE,2051
|
|
153
156
|
atomicshop/wrappers/pipw.py,sha256=mu4jnHkSaYNfpBiLZKMZxEX_E2LqW5BVthMZkblPB_c,1317
|
|
@@ -204,6 +207,8 @@ atomicshop/wrappers/factw/rest/firmware.py,sha256=FezneouU1lUO9uZ6_8ZQNxr4MDlFIo
|
|
|
204
207
|
atomicshop/wrappers/factw/rest/router.py,sha256=fdGok5ESBxcZHIBgM93l4yTPRGoeooQNsrPWIETieGk,710
|
|
205
208
|
atomicshop/wrappers/factw/rest/statistics.py,sha256=vznwzKP1gEF7uXz3HsuV66BU9wrp73N_eFqpFpye9Qw,653
|
|
206
209
|
atomicshop/wrappers/factw/rest/status.py,sha256=4O3xS1poafwyUiLDkhyx4oMMe4PBwABuRPpOMnMKgIU,641
|
|
210
|
+
atomicshop/wrappers/fibratusw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
211
|
+
atomicshop/wrappers/fibratusw/install.py,sha256=PLVymDe0HuOvU0r2lje8BkQAgtiOWEeRO7n-1zKuL7A,3287
|
|
207
212
|
atomicshop/wrappers/loggingw/checks.py,sha256=AGFsTsLxHQd1yAraa5popqLaGO9VM0KpcPGuSLn5ptU,719
|
|
208
213
|
atomicshop/wrappers/loggingw/formatters.py,sha256=mUtcJJfmhLNrwUVYShXTmdu40dBaJu4TS8FiuTXI7ys,7189
|
|
209
214
|
atomicshop/wrappers/loggingw/handlers.py,sha256=qm5Fbu8eDmlstMduUe5nKUlJU5IazFkSnQizz8Qt2os,5479
|
|
@@ -244,8 +249,8 @@ atomicshop/wrappers/socketw/socket_server_tester.py,sha256=AhpurHJmP2kgzHaUbq5ey
|
|
|
244
249
|
atomicshop/wrappers/socketw/socket_wrapper.py,sha256=aXBwlEIJhFT0-c4i8iNlFx2It9VpCEpsv--5Oqcpxao,11624
|
|
245
250
|
atomicshop/wrappers/socketw/ssl_base.py,sha256=k4V3gwkbq10MvOH4btU4onLX2GNOsSfUAdcHmL1rpVE,2274
|
|
246
251
|
atomicshop/wrappers/socketw/statistics_csv.py,sha256=t3dtDEfN47CfYVi0CW6Kc2QHTEeZVyYhc57IYYh5nmA,826
|
|
247
|
-
atomicshop-2.
|
|
248
|
-
atomicshop-2.
|
|
249
|
-
atomicshop-2.
|
|
250
|
-
atomicshop-2.
|
|
251
|
-
atomicshop-2.
|
|
252
|
+
atomicshop-2.12.0.dist-info/LICENSE.txt,sha256=lLU7EYycfYcK2NR_1gfnhnRC8b8ccOTElACYplgZN88,1094
|
|
253
|
+
atomicshop-2.12.0.dist-info/METADATA,sha256=yur7wBqT9rw3Av358zCJ1dGraOU-lnOLyUXzoRDu_yc,10447
|
|
254
|
+
atomicshop-2.12.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
255
|
+
atomicshop-2.12.0.dist-info/top_level.txt,sha256=EgKJB-7xcrAPeqTRF2laD_Np2gNGYkJkd4OyXqpJphA,11
|
|
256
|
+
atomicshop-2.12.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|