summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py')
-rw-r--r--venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py
new file mode 100644
index 0000000..bd3a331
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py
@@ -0,0 +1,61 @@
+#
+# simple unpacker/deobfuscator for scripts messed up with
+# javascriptobfuscator.com
+#
+# written by Einar Lielmanis <einar@beautifier.io>
+# rewritten in Python by Stefano Sanfilippo <a.little.coder@gmail.com>
+#
+# Will always return valid javascript: if `detect()` is false, `code` is
+# returned, unmodified.
+#
+# usage:
+#
+# if javascriptobfuscator.detect(some_string):
+# some_string = javascriptobfuscator.unpack(some_string)
+#
+
+"""deobfuscator for scripts messed up with JavascriptObfuscator.com"""
+
+import re
+
+PRIORITY = 1
+
+
+def smartsplit(code):
+ """Split `code` at " symbol, only if it is not escaped."""
+ strings = []
+ pos = 0
+ while pos < len(code):
+ if code[pos] == '"':
+ word = "" # new word
+ pos += 1
+ while pos < len(code):
+ if code[pos] == '"':
+ break
+ if code[pos] == "\\":
+ word += "\\"
+ pos += 1
+ word += code[pos]
+ pos += 1
+ strings.append('"%s"' % word)
+ pos += 1
+ return strings
+
+
+def detect(code):
+ """Detects if `code` is JavascriptObfuscator.com packed."""
+ # prefer `is not` idiom, so that a true boolean is returned
+ return re.search(r"^var _0x[a-f0-9]+ ?\= ?\[", code) is not None
+
+
+def unpack(code):
+ """Unpacks JavascriptObfuscator.com packed code."""
+ if detect(code):
+ matches = re.search(r"var (_0x[a-f\d]+) ?\= ?\[(.*?)\];", code)
+ if matches:
+ variable = matches.group(1)
+ dictionary = smartsplit(matches.group(2))
+ code = code[len(matches.group(0)) :]
+ for key, value in enumerate(dictionary):
+ code = code.replace(r"%s[%s]" % (variable, key), value)
+ return code