python-obfuscation-framework 1.4.1__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.
- pof/__init__.py +21 -0
- pof/__main__.py +22 -0
- pof/cli.py +187 -0
- pof/errors.py +2 -0
- pof/evasion/__init__.py +57 -0
- pof/evasion/argv.py +44 -0
- pof/evasion/base.py +48 -0
- pof/evasion/cpu/__init__.py +0 -0
- pof/evasion/cpu/cpu_count.py +27 -0
- pof/evasion/fs/__init__.py +0 -0
- pof/evasion/fs/directory_exist.py +29 -0
- pof/evasion/fs/directory_list_exist.py +46 -0
- pof/evasion/fs/directory_list_missing.py +45 -0
- pof/evasion/fs/directory_missing.py +28 -0
- pof/evasion/fs/exec_method.py +51 -0
- pof/evasion/fs/executable_path.py +66 -0
- pof/evasion/fs/file_exist.py +29 -0
- pof/evasion/fs/file_list_exist.py +46 -0
- pof/evasion/fs/file_list_missing.py +45 -0
- pof/evasion/fs/file_missing.py +31 -0
- pof/evasion/fs/tmp.py +112 -0
- pof/evasion/hardware/__init__.py +0 -0
- pof/evasion/hardware/ram_count.py +50 -0
- pof/evasion/hooks/__init__.py +0 -0
- pof/evasion/hooks/debugger.py +36 -0
- pof/evasion/hooks/tracemalloc.py +23 -0
- pof/evasion/human/__init__.py +0 -0
- pof/evasion/human/p.py +45 -0
- pof/evasion/human/prompt.py +69 -0
- pof/evasion/integrity.py +129 -0
- pof/evasion/multi.py +41 -0
- pof/evasion/os/__init__.py +0 -0
- pof/evasion/os/domain.py +27 -0
- pof/evasion/os/hostname.py +27 -0
- pof/evasion/os/uid.py +28 -0
- pof/evasion/os/username.py +27 -0
- pof/evasion/processes/__init__.py +0 -0
- pof/evasion/processes/proc_count.py +47 -0
- pof/evasion/time/__init__.py +0 -0
- pof/evasion/time/expire.py +75 -0
- pof/evasion/time/uptime.py +48 -0
- pof/evasion/time/utc.py +26 -0
- pof/evasion/utils.py +198 -0
- pof/main.py +369 -0
- pof/obfuscator/__init__.py +86 -0
- pof/obfuscator/builtins.py +482 -0
- pof/obfuscator/cipher/__init__.py +0 -0
- pof/obfuscator/cipher/deep_encryption.py +194 -0
- pof/obfuscator/cipher/rc4.py +22 -0
- pof/obfuscator/cipher/shift.py +19 -0
- pof/obfuscator/cipher/xor.py +121 -0
- pof/obfuscator/compression/__init__.py +0 -0
- pof/obfuscator/compression/bz2.py +22 -0
- pof/obfuscator/compression/gzip.py +22 -0
- pof/obfuscator/compression/lzma.py +22 -0
- pof/obfuscator/compression/zlib.py +22 -0
- pof/obfuscator/constants.py +294 -0
- pof/obfuscator/definitions.py +341 -0
- pof/obfuscator/encoding/__init__.py +0 -0
- pof/obfuscator/encoding/a85.py +21 -0
- pof/obfuscator/encoding/b16.py +21 -0
- pof/obfuscator/encoding/b32.py +21 -0
- pof/obfuscator/encoding/b32hex.py +21 -0
- pof/obfuscator/encoding/b64.py +21 -0
- pof/obfuscator/encoding/b85.py +25 -0
- pof/obfuscator/encoding/binascii.py +22 -0
- pof/obfuscator/encoding/snt.py +23 -0
- pof/obfuscator/esoteric/__init__.py +0 -0
- pof/obfuscator/esoteric/call.py +49 -0
- pof/obfuscator/esoteric/doc.py +237 -0
- pof/obfuscator/esoteric/globals.py +62 -0
- pof/obfuscator/esoteric/imports.py +55 -0
- pof/obfuscator/extract_variables.py +297 -0
- pof/obfuscator/junk/__init__.py +0 -0
- pof/obfuscator/junk/add_comments.py +102 -0
- pof/obfuscator/junk/add_newlines.py +36 -0
- pof/obfuscator/names.py +474 -0
- pof/obfuscator/names_rope.py +375 -0
- pof/obfuscator/numbers.py +271 -0
- pof/obfuscator/other/__init__.py +0 -0
- pof/obfuscator/other/tokens.py +47 -0
- pof/obfuscator/remove/__init__.py +0 -0
- pof/obfuscator/remove/comments.py +36 -0
- pof/obfuscator/remove/exceptions.py +75 -0
- pof/obfuscator/remove/indents.py +28 -0
- pof/obfuscator/remove/loggings.py +120 -0
- pof/obfuscator/remove/loggings_old.py +45 -0
- pof/obfuscator/remove/newline.py +27 -0
- pof/obfuscator/remove/print.py +40 -0
- pof/obfuscator/restructure.py +15 -0
- pof/obfuscator/stegano/__init__.py +0 -0
- pof/obfuscator/stegano/docstrings.py +111 -0
- pof/obfuscator/stegano/ipv6encoding.py +21 -0
- pof/obfuscator/stegano/macencoding.py +21 -0
- pof/obfuscator/stegano/uuidencoding.py +21 -0
- pof/obfuscator/strings.py +359 -0
- pof/stager/__init__.py +17 -0
- pof/stager/cipher/__init__.py +0 -0
- pof/stager/cipher/rc4.py +36 -0
- pof/stager/download.py +80 -0
- pof/stager/image.py +374 -0
- pof/stager/lots/__init__.py +1 -0
- pof/stager/lots/cl1pnet.py +51 -0
- pof/stager/lots/pastebin.py +35 -0
- pof/stager/lots/pasters.py +30 -0
- pof/stager/quine.py +135 -0
- pof/utils/__init__.py +0 -0
- pof/utils/cipher/__init__.py +7 -0
- pof/utils/cipher/rc4.py +407 -0
- pof/utils/cipher/shift.py +41 -0
- pof/utils/compression/__init__.py +11 -0
- pof/utils/compression/bz2.py +38 -0
- pof/utils/compression/gzip.py +38 -0
- pof/utils/compression/lzma.py +38 -0
- pof/utils/compression/zlib.py +38 -0
- pof/utils/encoding/__init__.py +19 -0
- pof/utils/encoding/a85.py +35 -0
- pof/utils/encoding/b16.py +30 -0
- pof/utils/encoding/b3.py +93 -0
- pof/utils/encoding/b32.py +30 -0
- pof/utils/encoding/b32hex.py +30 -0
- pof/utils/encoding/b64.py +30 -0
- pof/utils/encoding/b85.py +35 -0
- pof/utils/encoding/binascii.py +38 -0
- pof/utils/encoding/snt.py +97 -0
- pof/utils/entropy.py +24 -0
- pof/utils/extract_names.py +204 -0
- pof/utils/generator/__init__.py +17 -0
- pof/utils/generator/advanced.py +53 -0
- pof/utils/generator/base.py +178 -0
- pof/utils/generator/basic.py +107 -0
- pof/utils/generator/names.txt +37241 -0
- pof/utils/generator/unicode.py +171 -0
- pof/utils/se/__init__.py +3 -0
- pof/utils/se/homoglyphs.py +99 -0
- pof/utils/se/homoglyphs.txt +96 -0
- pof/utils/stegano/__init__.py +5 -0
- pof/utils/stegano/ipv6encoding.py +97 -0
- pof/utils/stegano/macencoding.py +96 -0
- pof/utils/stegano/uuidencoding.py +102 -0
- pof/utils/tokens.py +68 -0
- python_obfuscation_framework-1.4.1.dist-info/LICENSE +674 -0
- python_obfuscation_framework-1.4.1.dist-info/METADATA +851 -0
- python_obfuscation_framework-1.4.1.dist-info/RECORD +147 -0
- python_obfuscation_framework-1.4.1.dist-info/WHEEL +5 -0
- python_obfuscation_framework-1.4.1.dist-info/entry_points.txt +2 -0
- python_obfuscation_framework-1.4.1.dist-info/top_level.txt +1 -0
pof/evasion/os/domain.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from tokenize import LPAR, NAME, OP, RPAR, STRING
|
|
2
|
+
|
|
3
|
+
from pof.evasion.base import BaseEvasion
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DomainEvasion(BaseEvasion):
|
|
7
|
+
def __init__(self, domain) -> None:
|
|
8
|
+
self.domain = domain
|
|
9
|
+
|
|
10
|
+
@staticmethod
|
|
11
|
+
def import_tokens():
|
|
12
|
+
return [
|
|
13
|
+
(NAME, "import"),
|
|
14
|
+
(NAME, "socket"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
def check_tokens(self):
|
|
18
|
+
"""`socket.getfqdn()!='debian'`."""
|
|
19
|
+
return [
|
|
20
|
+
(NAME, "socket"),
|
|
21
|
+
(OP, "."),
|
|
22
|
+
(NAME, "getfqdn"),
|
|
23
|
+
(LPAR, "("),
|
|
24
|
+
(RPAR, ")"),
|
|
25
|
+
(OP, "!="),
|
|
26
|
+
(STRING, repr(self.domain)),
|
|
27
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from tokenize import LPAR, NAME, OP, RPAR, STRING
|
|
2
|
+
|
|
3
|
+
from pof.evasion.base import BaseEvasion
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class HostnameEvasion(BaseEvasion):
|
|
7
|
+
def __init__(self, hostname) -> None:
|
|
8
|
+
self.hostname = hostname
|
|
9
|
+
|
|
10
|
+
@staticmethod
|
|
11
|
+
def import_tokens():
|
|
12
|
+
return [
|
|
13
|
+
(NAME, "import"),
|
|
14
|
+
(NAME, "socket"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
def check_tokens(self):
|
|
18
|
+
"""`socket.gethostname()!='debian'`."""
|
|
19
|
+
return [
|
|
20
|
+
(NAME, "socket"),
|
|
21
|
+
(OP, "."),
|
|
22
|
+
(NAME, "gethostname"),
|
|
23
|
+
(LPAR, "("),
|
|
24
|
+
(RPAR, ")"),
|
|
25
|
+
(OP, "!="),
|
|
26
|
+
(STRING, repr(self.hostname)),
|
|
27
|
+
]
|
pof/evasion/os/uid.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# TODO (deoktr): add compat with windows: `ctypes.windll.shell32.IsUserAnAdmin()`
|
|
2
|
+
from tokenize import LPAR, NAME, NUMBER, OP, RPAR
|
|
3
|
+
|
|
4
|
+
from pof.evasion.base import BaseEvasion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class LinuxUIDEvasion(BaseEvasion):
|
|
8
|
+
def __init__(self, uid) -> None:
|
|
9
|
+
self.uid = uid
|
|
10
|
+
|
|
11
|
+
@staticmethod
|
|
12
|
+
def import_tokens():
|
|
13
|
+
return [
|
|
14
|
+
(NAME, "import"),
|
|
15
|
+
(NAME, "os"),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
def check_tokens(self):
|
|
19
|
+
"""`os.getuid()!=1000`."""
|
|
20
|
+
return [
|
|
21
|
+
(NAME, "os"),
|
|
22
|
+
(OP, "."),
|
|
23
|
+
(NAME, "getuid"),
|
|
24
|
+
(LPAR, "("),
|
|
25
|
+
(RPAR, ")"),
|
|
26
|
+
(OP, "!="),
|
|
27
|
+
(NUMBER, str(self.uid)),
|
|
28
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from tokenize import LPAR, NAME, OP, RPAR, STRING
|
|
2
|
+
|
|
3
|
+
from pof.evasion.base import BaseEvasion
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class UsernameEvasion(BaseEvasion):
|
|
7
|
+
def __init__(self, username) -> None:
|
|
8
|
+
self.username = username
|
|
9
|
+
|
|
10
|
+
@staticmethod
|
|
11
|
+
def import_tokens():
|
|
12
|
+
return [
|
|
13
|
+
(NAME, "import"),
|
|
14
|
+
(NAME, "getpass"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
def check_tokens(self):
|
|
18
|
+
"""`getpass.getuser()!='username'`."""
|
|
19
|
+
return [
|
|
20
|
+
(NAME, "getpass"),
|
|
21
|
+
(OP, "."),
|
|
22
|
+
(NAME, "getuser"),
|
|
23
|
+
(LPAR, "("),
|
|
24
|
+
(RPAR, ")"),
|
|
25
|
+
(OP, "!="),
|
|
26
|
+
(STRING, repr(self.username)),
|
|
27
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# TODO (deoktr): make a version for windows
|
|
2
|
+
from tokenize import LPAR, NAME, NUMBER, OP, RPAR, STRING
|
|
3
|
+
|
|
4
|
+
from pof.evasion.base import BaseEvasion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class LinuxProcCountEvasion(BaseEvasion):
|
|
8
|
+
def __init__(self, proc_count=100) -> None:
|
|
9
|
+
self.proc_count = proc_count
|
|
10
|
+
|
|
11
|
+
@staticmethod
|
|
12
|
+
def import_tokens():
|
|
13
|
+
return [
|
|
14
|
+
(NAME, "import"),
|
|
15
|
+
(NAME, "os"),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
def check_tokens(self):
|
|
19
|
+
"""`len(list(filter(lambda d: d.isdigit(), os.listdir("/proc")))) < 100`."""
|
|
20
|
+
return [
|
|
21
|
+
(NAME, "len"),
|
|
22
|
+
(LPAR, "("),
|
|
23
|
+
(NAME, "list"),
|
|
24
|
+
(LPAR, "("),
|
|
25
|
+
(NAME, "filter"),
|
|
26
|
+
(LPAR, "("),
|
|
27
|
+
(NAME, "lambda"),
|
|
28
|
+
(NAME, "d"),
|
|
29
|
+
(OP, ":"),
|
|
30
|
+
(NAME, "d"),
|
|
31
|
+
(OP, "."),
|
|
32
|
+
(NAME, "isdigit"),
|
|
33
|
+
(LPAR, "("),
|
|
34
|
+
(RPAR, ")"),
|
|
35
|
+
(OP, ","),
|
|
36
|
+
(NAME, "os"),
|
|
37
|
+
(OP, "."),
|
|
38
|
+
(NAME, "listdir"),
|
|
39
|
+
(LPAR, "("),
|
|
40
|
+
(STRING, repr("/proc")),
|
|
41
|
+
(RPAR, ")"),
|
|
42
|
+
(RPAR, ")"),
|
|
43
|
+
(RPAR, ")"),
|
|
44
|
+
(RPAR, ")"),
|
|
45
|
+
(OP, "<"),
|
|
46
|
+
(NUMBER, str(self.proc_count)),
|
|
47
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
from datetime import UTC, datetime, timedelta
|
|
2
|
+
from tokenize import LPAR, NAME, NUMBER, OP, RPAR
|
|
3
|
+
|
|
4
|
+
from pof.evasion.base import BaseEvasion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ExpireEvasion(BaseEvasion):
|
|
8
|
+
def __init__(self, under_datetime=None, over_datetime=None) -> None:
|
|
9
|
+
"""Expire after a certain time (default 15 minutes)."""
|
|
10
|
+
if under_datetime is None:
|
|
11
|
+
under_datetime = datetime.now(tz=UTC) + timedelta(minutes=15)
|
|
12
|
+
self.under_datetime = under_datetime
|
|
13
|
+
|
|
14
|
+
# TODO (deoktr): remove random timedelta to now, as to not give the date/time of
|
|
15
|
+
# payload creation
|
|
16
|
+
if over_datetime is None:
|
|
17
|
+
over_datetime = datetime.now(tz=UTC)
|
|
18
|
+
self.over_datetime = over_datetime
|
|
19
|
+
|
|
20
|
+
@staticmethod
|
|
21
|
+
def import_tokens():
|
|
22
|
+
return [
|
|
23
|
+
(NAME, "from"),
|
|
24
|
+
(NAME, "datetime"),
|
|
25
|
+
(NAME, "import"),
|
|
26
|
+
(NAME, "datetime"),
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
def check_tokens(self):
|
|
30
|
+
"""Time expiry check tokens.
|
|
31
|
+
|
|
32
|
+
`datetime(2023,1,1,1,1)>datetime.utcnow()
|
|
33
|
+
or datetime.utcnow()>datetime(2023,1,2,1,1,1)`
|
|
34
|
+
"""
|
|
35
|
+
return [
|
|
36
|
+
(NAME, "datetime"),
|
|
37
|
+
(LPAR, "("),
|
|
38
|
+
(NUMBER, str(self.over_datetime.year)),
|
|
39
|
+
(OP, ","),
|
|
40
|
+
(NUMBER, str(self.over_datetime.month)),
|
|
41
|
+
(OP, ","),
|
|
42
|
+
(NUMBER, str(self.over_datetime.day)),
|
|
43
|
+
(OP, ","),
|
|
44
|
+
(NUMBER, str(self.over_datetime.hour)),
|
|
45
|
+
(OP, ","),
|
|
46
|
+
(NUMBER, str(self.over_datetime.minute)),
|
|
47
|
+
(RPAR, ")"),
|
|
48
|
+
(OP, ">"),
|
|
49
|
+
(NAME, "datetime"),
|
|
50
|
+
(OP, "."),
|
|
51
|
+
(NAME, "utcnow"),
|
|
52
|
+
(LPAR, "("),
|
|
53
|
+
(RPAR, ")"),
|
|
54
|
+
(NAME, "or"),
|
|
55
|
+
(NAME, "datetime"),
|
|
56
|
+
(OP, "."),
|
|
57
|
+
(NAME, "utcnow"),
|
|
58
|
+
(LPAR, "("),
|
|
59
|
+
(RPAR, ")"),
|
|
60
|
+
(OP, ">"),
|
|
61
|
+
(NAME, "datetime"),
|
|
62
|
+
(LPAR, "("),
|
|
63
|
+
(NUMBER, str(self.under_datetime.year)),
|
|
64
|
+
(OP, ","),
|
|
65
|
+
(NUMBER, str(self.under_datetime.month)),
|
|
66
|
+
(OP, ","),
|
|
67
|
+
(NUMBER, str(self.under_datetime.day)),
|
|
68
|
+
(OP, ","),
|
|
69
|
+
(NUMBER, str(self.under_datetime.hour)),
|
|
70
|
+
(OP, ","),
|
|
71
|
+
(NUMBER, str(self.under_datetime.minute)),
|
|
72
|
+
(OP, ","),
|
|
73
|
+
(NUMBER, str(self.under_datetime.second)),
|
|
74
|
+
(RPAR, ")"),
|
|
75
|
+
]
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# TODO (deoktr): windows version: https://www.geeksforgeeks.org/getting-the-time-since-os-startup-using-python/
|
|
2
|
+
from tokenize import LPAR, NAME, NUMBER, OP, RPAR, STRING
|
|
3
|
+
|
|
4
|
+
from pof.evasion.base import BaseEvasion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class LinuxUptimeEvasion(BaseEvasion):
|
|
8
|
+
def __init__(self, uptime=12 * 60) -> None:
|
|
9
|
+
# uptime is in seconds
|
|
10
|
+
# default: 12 minutes
|
|
11
|
+
self.uptime = uptime
|
|
12
|
+
|
|
13
|
+
@staticmethod
|
|
14
|
+
def import_tokens():
|
|
15
|
+
return [
|
|
16
|
+
(NAME, "from"),
|
|
17
|
+
(NAME, "pathlib"),
|
|
18
|
+
(NAME, "import"),
|
|
19
|
+
(NAME, "Path"),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
def check_tokens(self):
|
|
23
|
+
"""Validates system does not use UTC timezone.
|
|
24
|
+
|
|
25
|
+
`float(Path("/proc/uptime").read_text().split()[0]) < 12**60`
|
|
26
|
+
"""
|
|
27
|
+
return [
|
|
28
|
+
(NAME, "float"),
|
|
29
|
+
(LPAR, "("),
|
|
30
|
+
(NAME, "Path"),
|
|
31
|
+
(LPAR, "("),
|
|
32
|
+
(STRING, repr("/proc/uptime")),
|
|
33
|
+
(RPAR, ")"),
|
|
34
|
+
(OP, "."),
|
|
35
|
+
(NAME, "read_text"),
|
|
36
|
+
(LPAR, "("),
|
|
37
|
+
(RPAR, ")"),
|
|
38
|
+
(OP, "."),
|
|
39
|
+
(NAME, "split"),
|
|
40
|
+
(LPAR, "("),
|
|
41
|
+
(RPAR, ")"),
|
|
42
|
+
(OP, "["),
|
|
43
|
+
(NUMBER, "0"),
|
|
44
|
+
(OP, "]"),
|
|
45
|
+
(RPAR, ")"),
|
|
46
|
+
(OP, "<"),
|
|
47
|
+
(NUMBER, str(self.uptime)),
|
|
48
|
+
]
|
pof/evasion/time/utc.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from tokenize import NAME, OP, STRING
|
|
2
|
+
|
|
3
|
+
from pof.evasion.base import BaseEvasion
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class UTCEvasion(BaseEvasion):
|
|
7
|
+
@staticmethod
|
|
8
|
+
def import_tokens():
|
|
9
|
+
return [
|
|
10
|
+
(NAME, "import"),
|
|
11
|
+
(NAME, "time"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def check_tokens():
|
|
16
|
+
"""Validates system does not use UTC timezone.
|
|
17
|
+
|
|
18
|
+
`"UTC" in time.tzname`
|
|
19
|
+
"""
|
|
20
|
+
return [
|
|
21
|
+
(STRING, '"UTC"'),
|
|
22
|
+
(NAME, "in"),
|
|
23
|
+
(NAME, "time"),
|
|
24
|
+
(OP, "."),
|
|
25
|
+
(NAME, "tzname"),
|
|
26
|
+
]
|
pof/evasion/utils.py
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"""Utils.
|
|
2
|
+
|
|
3
|
+
Todo:
|
|
4
|
+
- add process list
|
|
5
|
+
- add list of directory
|
|
6
|
+
- add reverse engineering tools
|
|
7
|
+
- add Ansible directory
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
WIN_FILE_SYSTEM_PARALLELS = [
|
|
11
|
+
r"c:\windows\system32\drivers\prleth.sys",
|
|
12
|
+
r"c:\windows\system32\drivers\prlfs.sys",
|
|
13
|
+
r"c:\windows\system32\drivers\prlmouse.sys",
|
|
14
|
+
r"c:\windows\system32\drivers\prlvideo.sys",
|
|
15
|
+
r"c:\windows\system32\drivers\prltime.sys",
|
|
16
|
+
r"c:\windows\system32\drivers\prl_pv32.sys",
|
|
17
|
+
r"c:\windows\system32\drivers\prl_paravirt_32.sys",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
WIN_FILE_SYSTEM_VIRTUALBOX = [
|
|
21
|
+
r"c:\windows\system32\drivers\VBoxMouse.sys",
|
|
22
|
+
r"c:\windows\system32\drivers\VBoxGuest.sys",
|
|
23
|
+
r"c:\windows\system32\drivers\VBoxSF.sys",
|
|
24
|
+
r"c:\windows\system32\drivers\VBoxVideo.sys",
|
|
25
|
+
r"c:\windows\system32\vboxdisp.dll",
|
|
26
|
+
r"c:\windows\system32\vboxhook.dll",
|
|
27
|
+
r"c:\windows\system32\vboxmrxnp.dll",
|
|
28
|
+
r"c:\windows\system32\vboxogl.dll",
|
|
29
|
+
r"c:\windows\system32\vboxoglarrayspu.dll",
|
|
30
|
+
r"c:\windows\system32\vboxoglcrutil.dll",
|
|
31
|
+
r"c:\windows\system32\vboxoglerrorspu.dll",
|
|
32
|
+
r"c:\windows\system32\vboxoglfeedbackspu.dll",
|
|
33
|
+
r"c:\windows\system32\vboxoglpackspu.dll",
|
|
34
|
+
r"c:\windows\system32\vboxoglpassthroughspu.dll",
|
|
35
|
+
r"c:\windows\system32\vboxservice.exe",
|
|
36
|
+
r"c:\windows\system32\vboxtray.exe",
|
|
37
|
+
r"c:\windows\system32\VBoxControl.exe",
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
WIN_FILE_SYSTEM_VIRTUALPC = [
|
|
41
|
+
r"c:\windows\system32\drivers\vmsrvc.sys",
|
|
42
|
+
r"c:\windows\system32\drivers\vpc-s3.sys",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
WIN_FILE_SYSTEM_VMWARE = [
|
|
46
|
+
r"c:\windows\system32\drivers\vmmouse.sys",
|
|
47
|
+
r"c:\windows\system32\drivers\vmnet.sys",
|
|
48
|
+
r"c:\windows\system32\drivers\vmxnet.sys",
|
|
49
|
+
r"c:\windows\system32\drivers\vmhgfs.sys",
|
|
50
|
+
r"c:\windows\system32\drivers\vmx86.sys",
|
|
51
|
+
r"c:\windows\system32\drivers\hgfs.sys",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
WIN_FILE_SYSTEM = (
|
|
55
|
+
WIN_FILE_SYSTEM_PARALLELS
|
|
56
|
+
+ WIN_FILE_SYSTEM_VIRTUALBOX
|
|
57
|
+
+ WIN_FILE_SYSTEM_VIRTUALPC
|
|
58
|
+
+ WIN_FILE_SYSTEM_VMWARE
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
FILE_SYSTEM = WIN_FILE_SYSTEM
|
|
62
|
+
|
|
63
|
+
# source: https://evasions.checkpoint.com/techniques/generic-os-queries.html#check-if-username-is-specific
|
|
64
|
+
USERNAME = [
|
|
65
|
+
"admin",
|
|
66
|
+
"andy",
|
|
67
|
+
"honey",
|
|
68
|
+
"john",
|
|
69
|
+
"john doe",
|
|
70
|
+
"malnetvm",
|
|
71
|
+
"maltest",
|
|
72
|
+
"malware",
|
|
73
|
+
"roo",
|
|
74
|
+
"sandbox",
|
|
75
|
+
"snort",
|
|
76
|
+
"tequilaboomboom",
|
|
77
|
+
"test",
|
|
78
|
+
"virus",
|
|
79
|
+
"virusclone",
|
|
80
|
+
"wilbert",
|
|
81
|
+
"remnux",
|
|
82
|
+
"nepenthes", # Nepenthes
|
|
83
|
+
"currentuser", # Norman
|
|
84
|
+
"username", # ThreatExpert
|
|
85
|
+
"user", # Sandboxie
|
|
86
|
+
"vmware", # VMware
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
# source: https://evasions.checkpoint.com/techniques/generic-os-queries.html#check-if-computer-name-is-specific
|
|
90
|
+
HOSTNAME = [
|
|
91
|
+
"klone_x64-pc",
|
|
92
|
+
"tequilaboomboom",
|
|
93
|
+
"TU-4NH09SMCG1HC", # Anubis
|
|
94
|
+
"InsideTm", # Anubis
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
# source: https://github.com/PwnDexter/SharpEDRChecker/blob/master/SharpEDRChecker/EDRData.cs
|
|
98
|
+
EDR_LIST = [
|
|
99
|
+
"activeconsole",
|
|
100
|
+
"amsi.dll",
|
|
101
|
+
"anti malware",
|
|
102
|
+
"anti-malware",
|
|
103
|
+
"antimalware",
|
|
104
|
+
"anti virus",
|
|
105
|
+
"anti-virus",
|
|
106
|
+
"antivirus",
|
|
107
|
+
"appsense",
|
|
108
|
+
"authtap",
|
|
109
|
+
"avast",
|
|
110
|
+
"avecto",
|
|
111
|
+
"canary",
|
|
112
|
+
"carbonblack",
|
|
113
|
+
"carbon black",
|
|
114
|
+
"cb.exe",
|
|
115
|
+
"ciscoamp",
|
|
116
|
+
"cisco amp",
|
|
117
|
+
"countercept",
|
|
118
|
+
"countertack",
|
|
119
|
+
"cramtray",
|
|
120
|
+
"crssvc",
|
|
121
|
+
"crowdstrike",
|
|
122
|
+
"csagent",
|
|
123
|
+
"csfalcon",
|
|
124
|
+
"csshell",
|
|
125
|
+
"cybereason",
|
|
126
|
+
"cyclorama",
|
|
127
|
+
"cylance",
|
|
128
|
+
"cyoptics",
|
|
129
|
+
"cyupdate",
|
|
130
|
+
"cyvera",
|
|
131
|
+
"cyserver",
|
|
132
|
+
"cytray",
|
|
133
|
+
"darktrace",
|
|
134
|
+
"defendpoint",
|
|
135
|
+
"defender",
|
|
136
|
+
"eectrl",
|
|
137
|
+
"elastic",
|
|
138
|
+
"endgame",
|
|
139
|
+
"f-secure",
|
|
140
|
+
"forcepoint",
|
|
141
|
+
"fireeye",
|
|
142
|
+
"groundling",
|
|
143
|
+
"GRRservic",
|
|
144
|
+
"inspector",
|
|
145
|
+
"ivanti",
|
|
146
|
+
"kaspersky",
|
|
147
|
+
"lacuna",
|
|
148
|
+
"logrhythm",
|
|
149
|
+
"malware",
|
|
150
|
+
"mandiant",
|
|
151
|
+
"mcafee",
|
|
152
|
+
"morphisec",
|
|
153
|
+
"msascuil",
|
|
154
|
+
"msmpeng",
|
|
155
|
+
"nissrv",
|
|
156
|
+
"omni",
|
|
157
|
+
"omniagent",
|
|
158
|
+
"osquery",
|
|
159
|
+
"Palo Alto Networks",
|
|
160
|
+
"pgeposervice",
|
|
161
|
+
"pgsystemtray",
|
|
162
|
+
"privilegeguard",
|
|
163
|
+
"procwall",
|
|
164
|
+
"protectorservic",
|
|
165
|
+
"qradar",
|
|
166
|
+
"redcloak",
|
|
167
|
+
"secureworks",
|
|
168
|
+
"securityhealthservice",
|
|
169
|
+
"semlaunchsv",
|
|
170
|
+
"sentinel",
|
|
171
|
+
"sepliveupdat",
|
|
172
|
+
"sisidsservice",
|
|
173
|
+
"sisipsservice",
|
|
174
|
+
"sisipsutil",
|
|
175
|
+
"smc.exe",
|
|
176
|
+
"smcgui",
|
|
177
|
+
"snac64",
|
|
178
|
+
"sophos",
|
|
179
|
+
"splunk",
|
|
180
|
+
"srtsp",
|
|
181
|
+
"symantec",
|
|
182
|
+
"symcorpu",
|
|
183
|
+
"symefasi",
|
|
184
|
+
"sysinternal",
|
|
185
|
+
"sysmon",
|
|
186
|
+
"tanium",
|
|
187
|
+
"tda.exe",
|
|
188
|
+
"tdawork",
|
|
189
|
+
"tpython",
|
|
190
|
+
"vectra",
|
|
191
|
+
"wincollect",
|
|
192
|
+
"windowssensor",
|
|
193
|
+
"wireshark",
|
|
194
|
+
"threat",
|
|
195
|
+
"xagt.exe",
|
|
196
|
+
"xagtnotif.exe",
|
|
197
|
+
"hurukai",
|
|
198
|
+
]
|