forked from K0lb3/UnityPy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImportHelper.py
More file actions
95 lines (78 loc) · 2.61 KB
/
ImportHelper.py
File metadata and controls
95 lines (78 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import os
from .CompressionHelper import BROTLI_MAGIC, GZIP_MAGIC
from ..EndianBinaryReader import EndianBinaryReader
from ..enums import FileType
def file_name_without_extension(file_name: str):
return os.path.splitext(os.path.basename(file_name))[0]
def list_all_files(directory: str):
return [
val for sublist in [
[
os.path.join(dir_path, filename)
for filename in filenames
]
for (dir_path, dirn_ames, filenames) in os.walk(directory)
if '.git' not in dir_path
]
for val in sublist
]
def find_all_files(directory : str, search_str : str):
return [
val for sublist in [
[
os.path.join(dir_path, filename)
for filename in filenames
if search_str in filename
]
for (dir_path, dirn_ames, filenames) in os.walk(directory)
if '.git' not in dir_path
]
for val in sublist
]
def merge_split_assets(path: str, all_directories = False):
if all_directories:
split_files = [fp for fp in list_all_files(path) if fp[-7:] == ".split0"]
else:
split_files = [os.path.join(path, fp) for fp in os.listdir(path) if fp[-7:] == ".split0"]
for split_file in split_files:
dest_file = file_name_without_extension(split_file)
dest_path = os.path.dirname(split_file)
dest_full = os.path.join(dest_file, dest_path)
if not os.path.exists(dest_full):
with open(dest_full, 'wb') as f:
i = 0
while True:
split_part = ''.join([dest_full, '.split', str(i)])
if not os.path.isfile(split_part):
break
f.write(open(split_part, 'rb').read())
def processing_split_files(select_file: list) -> list:
split_files = [fp for fp in select_file if '.split' in fp]
select_file = [f for f in select_file if f not in split_files]
split_files = set([file_name_without_extension(fp) for fp in split_files])
for splitFile in split_files:
if os.path.isfile:
select_file.append(splitFile)
return select_file
def check_file_type(input_):
if type(input_) == str and os.path.isfile(input_):
reader = EndianBinaryReader(open(input_, 'rb'))
else:
reader = EndianBinaryReader(input_)
signature = reader.read_string_to_null(20)
reader.Position = 0
if signature in ["UnityWeb", "UnityRaw", "\xFA\xFA\xFA\xFA\xFA\xFA\xFA\xFA", "UnityFS"]:
return FileType.BundleFile, reader
elif signature == "UnityWebData1.0":
return FileType.WebFile, reader
else:
magic = reader.read_bytes(2)
reader.Position = 0
if GZIP_MAGIC == magic:
return FileType.WebFile, reader
reader.Position = 0x20
magic = reader.read_bytes(6)
reader.Position = 0
if BROTLI_MAGIC == magic:
return FileType.WebFile, reader
return FileType.AssetsFile, reader