diff options
author | cyfraeviolae <cyfraeviolae> | 2024-04-03 03:17:55 -0400 |
---|---|---|
committer | cyfraeviolae <cyfraeviolae> | 2024-04-03 03:17:55 -0400 |
commit | 12cf076118570eebbff08c6b3090e0d4798447a1 (patch) | |
tree | 3ba25e17e3c3a5e82316558ba3864b955919ff72 /venv/lib/python3.11/site-packages/jsbeautifier/unpackers | |
parent | c45662ff3923b34614ddcc8feb9195541166dcc5 (diff) |
no venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/jsbeautifier/unpackers')
22 files changed, 0 insertions, 693 deletions
diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__init__.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__init__.py deleted file mode 100644 index 01c254f..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -# -# General code for JSBeautifier unpackers infrastructure. See README.specs -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# - -"""General code for JSBeautifier unpackers infrastructure.""" - -import pkgutil -import re -from jsbeautifier.unpackers import evalbased - -# NOTE: AT THE MOMENT, IT IS DEACTIVATED FOR YOUR SECURITY: it runs js! -BLACKLIST = ["jsbeautifier.unpackers.evalbased"] - - -class UnpackingError(Exception): - """Badly packed source or general error. Argument is a - meaningful description.""" - - pass - - -def getunpackers(): - """Scans the unpackers dir, finds unpackers and add them to UNPACKERS list. - An unpacker will be loaded only if it is a valid python module (name must - adhere to naming conventions) and it is not blacklisted (i.e. inserted - into BLACKLIST.""" - path = __path__ - prefix = __name__ + "." - unpackers = [] - interface = ["unpack", "detect", "PRIORITY"] - for _importer, modname, _ispkg in pkgutil.iter_modules(path, prefix): - if "tests" not in modname and modname not in BLACKLIST: - try: - module = __import__(modname, fromlist=interface) - except ImportError: - raise UnpackingError("Bad unpacker: %s" % modname) - else: - unpackers.append(module) - - return sorted(unpackers, key=lambda mod: mod.PRIORITY) - - -UNPACKERS = getunpackers() - - -def run(source, evalcode=False): - """Runs the applicable unpackers and return unpacked source as a string.""" - for unpacker in [mod for mod in UNPACKERS if mod.detect(source)]: - source = unpacker.unpack(source) - if evalcode and evalbased.detect(source): - source = evalbased.unpack(source) - return source - - -def filtercomments(source): - """NOT USED: strips trailing comments and put them at the top.""" - trailing_comments = [] - comment = True - - while comment: - if re.search(r"^\s*\/\*", source): - comment = source[0, source.index("*/") + 2] - elif re.search(r"^\s*\/\/", source): - comment = re.search(r"^\s*\/\/", source).group(0) - else: - comment = None - - if comment: - source = re.sub(r"^\s+", "", source[len(comment) :]) - trailing_comments.append(comment) - - return "\n".join(trailing_comments) + source diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/__init__.cpython-311.pyc Binary files differdeleted file mode 100644 index 824dc1c..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/__init__.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/evalbased.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/evalbased.cpython-311.pyc Binary files differdeleted file mode 100644 index 38644e1..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/evalbased.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/javascriptobfuscator.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/javascriptobfuscator.cpython-311.pyc Binary files differdeleted file mode 100644 index 8ee047d..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/javascriptobfuscator.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/myobfuscate.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/myobfuscate.cpython-311.pyc Binary files differdeleted file mode 100644 index cf2948e..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/myobfuscate.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/packer.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/packer.cpython-311.pyc Binary files differdeleted file mode 100644 index c0abc98..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/packer.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/urlencode.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/urlencode.cpython-311.pyc Binary files differdeleted file mode 100644 index ba90614..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/__pycache__/urlencode.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/evalbased.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/evalbased.py deleted file mode 100644 index 74f1f0f..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/evalbased.py +++ /dev/null @@ -1,44 +0,0 @@ -# -# Unpacker for eval() based packers, a part of javascript beautifier -# by Einar Lielmanis <einar@beautifier.io> -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# -# usage: -# -# if detect(some_string): -# unpacked = unpack(some_string) -# - -"""Unpacker for eval() based packers: runs JS code and returns result. -Works only if a JS interpreter (e.g. Mozilla's Rhino) is installed and -properly set up on host.""" - -from subprocess import PIPE, Popen - -PRIORITY = 3 - - -def detect(source): - """Detects if source is likely to be eval() packed.""" - return source.strip().lower().startswith("eval(function(") - - -def unpack(source): - """Runs source and return resulting code.""" - return jseval("print %s;" % source[4:]) if detect(source) else source - - -# In case of failure, we'll just return the original, without crashing on user. - - -def jseval(script): - """Run code in the JS interpreter and return output.""" - try: - interpreter = Popen(["js"], stdin=PIPE, stdout=PIPE) - except OSError: - return script - result, errors = interpreter.communicate(script) - if interpreter.poll() or errors: - return script - return result diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py deleted file mode 100644 index bd3a331..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/javascriptobfuscator.py +++ /dev/null @@ -1,61 +0,0 @@ -# -# 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 diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/myobfuscate.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/myobfuscate.py deleted file mode 100644 index 0cbc7f8..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/myobfuscate.py +++ /dev/null @@ -1,90 +0,0 @@ -# -# deobfuscator for scripts messed up with myobfuscate.com -# by Einar Lielmanis <einar@beautifier.io> -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# -# usage: -# -# if detect(some_string): -# unpacked = unpack(some_string) -# - -# CAVEAT by Einar Lielmanis - -# -# You really don't want to obfuscate your scripts there: they're tracking -# your unpackings, your script gets turned into something like this, -# as of 2011-08-26: -# -# var _escape = 'your_script_escaped'; -# var _111 = document.createElement('script'); -# _111.src = 'http://api.www.myobfuscate.com/?getsrc=ok' + -# '&ref=' + encodeURIComponent(document.referrer) + -# '&url=' + encodeURIComponent(document.URL); -# var 000 = document.getElementsByTagName('head')[0]; -# 000.appendChild(_111); -# document.write(unescape(_escape)); -# - -"""Deobfuscator for scripts messed up with MyObfuscate.com""" - -import re -import base64 - -# Python 2 retrocompatibility -# pylint: disable=F0401 -# pylint: disable=E0611 -try: - from urllib import unquote -except ImportError: - from urllib.parse import unquote - -from jsbeautifier.unpackers import UnpackingError - -PRIORITY = 1 - -CAVEAT = """// -// Unpacker warning: be careful when using myobfuscate.com for your projects: -// scripts obfuscated by the free online version call back home. -// - -""" - -SIGNATURE = ( - r'["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F' - r"\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65" - r"\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75" - r"\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B" - r'\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78' - r'\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","' - r'\x6C\x65\x6E\x67\x74\x68"]' -) - - -def detect(source): - """Detects MyObfuscate.com packer.""" - return SIGNATURE in source - - -def unpack(source): - """Unpacks js code packed with MyObfuscate.com""" - if not detect(source): - return source - payload = unquote(_filter(source)) - match = re.search(r"^var _escape\='<script>(.*)<\/script>'", payload, re.DOTALL) - polished = match.group(1) if match else source - return CAVEAT + polished - - -def _filter(source): - """Extracts and decode payload (original file) from `source`""" - try: - varname = re.search(r"eval\(\w+\(\w+\((\w+)\)\)\);", source).group(1) - reverse = re.search(r"var +%s *\= *'(.*)';" % varname, source).group(1) - except AttributeError: - raise UnpackingError("Malformed MyObfuscate data.") - try: - return base64.b64decode(reverse[::-1].encode("utf8")).decode("utf8") - except TypeError: - raise UnpackingError("MyObfuscate payload is not base64-encoded.") diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/packer.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/packer.py deleted file mode 100644 index 117ff58..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/packer.py +++ /dev/null @@ -1,161 +0,0 @@ -# -# Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier -# by Einar Lielmanis <einar@beautifier.io> -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# -# usage: -# -# if detect(some_string): -# unpacked = unpack(some_string) -# - -"""Unpacker for Dean Edward's p.a.c.k.e.r""" - -import re -import string -import sys -from jsbeautifier.unpackers import UnpackingError - -PRIORITY = 1 - - -def detect(source): - global beginstr - global endstr - beginstr = "" - endstr = "" - begin_offset = -1 - """Detects whether `source` is P.A.C.K.E.R. coded.""" - mystr = re.search( - r"eval[ ]*\([ ]*function[ ]*\([ ]*p[ ]*,[ ]*a[ ]*,[ ]*c[" - " ]*,[ ]*k[ ]*,[ ]*e[ ]*,[ ]*", - source, - ) - if mystr: - begin_offset = mystr.start() - beginstr = source[:begin_offset] - if begin_offset != -1: - """Find endstr""" - source_end = source[begin_offset:] - if source_end.split("')))", 1)[0] == source_end: - try: - endstr = source_end.split("}))", 1)[1] - except IndexError: - endstr = "" - else: - endstr = source_end.split("')))", 1)[1] - return mystr is not None - - -def unpack(source): - """Unpacks P.A.C.K.E.R. packed js code.""" - payload, symtab, radix, count = _filterargs(source) - - if count != len(symtab): - raise UnpackingError("Malformed p.a.c.k.e.r. symtab.") - - try: - unbase = Unbaser(radix) - except TypeError: - raise UnpackingError("Unknown p.a.c.k.e.r. encoding.") - - def lookup(match): - """Look up symbols in the synthetic symtab.""" - word = match.group(0) - return symtab[unbase(word)] or word - - payload = payload.replace("\\\\", "\\").replace("\\'", "'") - if sys.version_info.major == 2: - source = re.sub(r"\b\w+\b", lookup, payload) - else: - source = re.sub(r"\b\w+\b", lookup, payload, flags=re.ASCII) - return _replacestrings(source) - - -def _filterargs(source): - """Juice from a source file the four args needed by decoder.""" - juicers = [ - (r"}\('(.*)', *(\d+|\[\]), *(\d+), *'(.*)'\.split\('\|'\), *(\d+), *(.*)\)\)"), - (r"}\('(.*)', *(\d+|\[\]), *(\d+), *'(.*)'\.split\('\|'\)"), - ] - for juicer in juicers: - args = re.search(juicer, source, re.DOTALL) - if args: - a = args.groups() - if a[1] == "[]": - a = list(a) - a[1] = 62 - a = tuple(a) - try: - return a[0], a[3].split("|"), int(a[1]), int(a[2]) - except ValueError: - raise UnpackingError("Corrupted p.a.c.k.e.r. data.") - - # could not find a satisfying regex - raise UnpackingError( - "Could not make sense of p.a.c.k.e.r data (unexpected code structure)" - ) - - -def _replacestrings(source): - global beginstr - global endstr - """Strip string lookup table (list) and replace values in source.""" - match = re.search(r'var *(_\w+)\=\["(.*?)"\];', source, re.DOTALL) - - if match: - varname, strings = match.groups() - startpoint = len(match.group(0)) - lookup = strings.split('","') - variable = "%s[%%d]" % varname - for index, value in enumerate(lookup): - source = source.replace(variable % index, '"%s"' % value) - return source[startpoint:] - return beginstr + source + endstr - - -class Unbaser(object): - """Functor for a given base. Will efficiently convert - strings to natural numbers.""" - - ALPHABET = { - 62: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", - 95: ( - " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" - ), - } - - def __init__(self, base): - self.base = base - - # fill elements 37...61, if necessary - if 36 < base < 62: - if not hasattr(self.ALPHABET, self.ALPHABET[62][:base]): - self.ALPHABET[base] = self.ALPHABET[62][:base] - # attrs = self.ALPHABET - # print ', '.join("%s: %s" % item for item in attrs.items()) - # If base can be handled by int() builtin, let it do it for us - if 2 <= base <= 36: - self.unbase = lambda string: int(string, base) - else: - # Build conversion dictionary cache - try: - self.dictionary = dict( - (cipher, index) for index, cipher in enumerate(self.ALPHABET[base]) - ) - except KeyError: - raise TypeError("Unsupported base encoding.") - - self.unbase = self._dictunbaser - - def __call__(self, string): - return self.unbase(string) - - def _dictunbaser(self, string): - """Decodes a value to an integer.""" - ret = 0 - for index, cipher in enumerate(string[::-1]): - ret += (self.base**index) * self.dictionary[cipher] - return ret diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__init__.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__init__.py deleted file mode 100644 index dfe67ba..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# Empty file :) -# pylint: disable=C0111 diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/__init__.cpython-311.pyc Binary files differdeleted file mode 100644 index 612fa57..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/__init__.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testjavascriptobfuscator.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testjavascriptobfuscator.cpython-311.pyc Binary files differdeleted file mode 100644 index 6c1abb8..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testjavascriptobfuscator.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testmyobfuscate.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testmyobfuscate.cpython-311.pyc Binary files differdeleted file mode 100644 index c62db76..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testmyobfuscate.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testpacker.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testpacker.cpython-311.pyc Binary files differdeleted file mode 100644 index 86d19bf..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testpacker.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testurlencode.cpython-311.pyc b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testurlencode.cpython-311.pyc Binary files differdeleted file mode 100644 index 93bd7db..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/__pycache__/testurlencode.cpython-311.pyc +++ /dev/null diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py deleted file mode 100644 index d40db2d..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# - -"""Tests for JavaScriptObfuscator unpacker.""" - -import unittest -from jsbeautifier.unpackers.javascriptobfuscator import unpack, detect, smartsplit - -# pylint: disable=R0904 - - -class TestJavascriptObfuscator(unittest.TestCase): - """JavascriptObfuscator.com test case.""" - - def test_smartsplit(self): - """Test smartsplit() function.""" - split = smartsplit - - def equals(data, result): - return self.assertEqual(split(data), result) - - equals("", []) - equals('"a", "b"', ['"a"', '"b"']) - equals('"aaa","bbbb"', ['"aaa"', '"bbbb"']) - equals('"a", "b\\""', ['"a"', '"b\\""']) - - def test_detect(self): - """Test detect() function.""" - - def positive(source): - return self.assertTrue(detect(source)) - - def negative(source): - return self.assertFalse(detect(source)) - - negative("") - negative("abcd") - negative("var _0xaaaa") - positive('var _0xaaaa = ["a", "b"]') - positive('var _0xaaaa=["a", "b"]') - positive('var _0x1234=["a","b"]') - - def test_unpack(self): - """Test unpack() function.""" - - def decodeto(ob, original): - return self.assertEqual(unpack(ob), original) - - decodeto("var _0x8df3=[];var a=10;", "var a=10;") - decodeto( - 'var _0xb2a7=["\x74\x27\x65\x73\x74"];var i;for(i=0;i<10;++i)' - "{alert(_0xb2a7[0]);} ;", - "var i;for(i=0;i<10;++i){alert" '("t\'est");} ;', - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testmyobfuscate.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testmyobfuscate.py deleted file mode 100644 index d69df82..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testmyobfuscate.py +++ /dev/null @@ -1,48 +0,0 @@ -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# - -"""Tests for MyObfuscate unpacker.""" - -import unittest -import os -from jsbeautifier.unpackers.myobfuscate import detect, unpack -from jsbeautifier.unpackers.tests import __path__ as path - -INPUT = os.path.join(path[0], "test-myobfuscate-input.js") -OUTPUT = os.path.join(path[0], "test-myobfuscate-output.js") - -# pylint: disable=R0904 - - -class TestMyObfuscate(unittest.TestCase): - # pylint: disable=C0103 - """MyObfuscate obfuscator testcase.""" - - @classmethod - def setUpClass(cls): - """Load source files (encoded and decoded version) for tests.""" - with open(INPUT, "r") as data: - cls.input = data.read() - with open(OUTPUT, "r") as data: - cls.output = data.read() - - def test_detect(self): - """Test detect() function.""" - - def detected(source): - return self.assertTrue(detect(source)) - - detected(self.input) - - def test_unpack(self): - """Test unpack() function.""" - - def check(inp, out): - return self.assertEqual(unpack(inp), out) - - check(self.input, self.output) - - -if __name__ == "__main__": - unittest.main() diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testpacker.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testpacker.py deleted file mode 100644 index 1de9934..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testpacker.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# - -"""Tests for P.A.C.K.E.R. unpacker.""" - -import unittest -from jsbeautifier.unpackers.packer import detect, unpack - -# pylint: disable=R0904 - - -class TestPacker(unittest.TestCase): - """P.A.C.K.E.R. testcase.""" - - def test_detect(self): - """Test detect() function.""" - - def positive(source): - return self.assertTrue(detect(source)) - - def negative(source): - return self.assertFalse(detect(source)) - - negative("") - negative("var a = b") - positive("eval(function(p,a,c,k,e,r") - positive("eval ( function(p, a, c, k, e, r") - - def test_unpack(self): - """Test unpack() function.""" - - def check(inp, out): - return detect(inp) and self.assertEqual(unpack(inp), out) - - check( - "eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)" - "){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=" - "function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(" - "new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1'," - "62,3,'var||a'.split('|'),0,{}))", - "var a=1", - ) - - check( - "function test (){alert ('This is a test!')}; " - "eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String))" - "{while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function" - "(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp(" - "'\\b'+e(c)+'\\b','g'),k[c]);return p}('0 2=\\'{Íâ–+›ï;ã†Ù¥#\\'',3,3," - "'var||a'.split('|'),0,{}))", - "function test (){alert ('This is a test!')}; var a='{Íâ–+›ï;ã†Ù¥#'", - ) - - check( - "eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('2 0=\"4 3!\";2 1=0.5(/b/6);a.9(\"8\").7=1;',12,12,'str|n|var|W3Schools|Visit|search|i|innerHTML|demo|getElementById|document|w3Schools'.split('|'),0,{}))", - 'var str="Visit W3Schools!";var n=str.search(/w3Schools/i);document.getElementById("demo").innerHTML=n;', - ) - - check( - "a=b;\r\nwhile(1){\ng=h;{return'\\w+'};break;eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('$(5).4(3(){$('.1').0(2);$('.6').0(d);$('.7').0(b);$('.a').0(8);$('.9').0(c)});',14,14,'html|r5e57|8080|function|ready|document|r1655|rc15b|8888|r39b0|r6ae9|3128|65309|80'.split('|'),0,{}))c=abx;", - "a=b;\r\nwhile(1){\ng=h;{return'\\w+'};break;$(document).ready(function(){$('.r5e57').html(8080);$('.r1655').html(80);$('.rc15b').html(3128);$('.r6ae9').html(8888);$('.r39b0').html(65309)});c=abx;", - ) - - check( - "eval(function(p,a,c,k,e,r){e=function(c){return c.toString(36)};if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'[0-9ab]'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(5).a(6(){ $('.8').0(1); $('.b').0(4); $('.9').0(2); $('.7').0(3)})',[],12,'html|52136|555|65103|8088|document|function|r542c|r8ce6|rb0de|ready|rfab0'.split('|'),0,{}))", - "$(document).ready(function(){ $('.r8ce6').html(52136); $('.rfab0').html(8088); $('.rb0de').html(555); $('.r542c').html(65103)})", - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testurlencode.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testurlencode.py deleted file mode 100644 index 10e236d..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/tests/testurlencode.py +++ /dev/null @@ -1,46 +0,0 @@ -# -# written by Stefano Sanfilippo <a.little.coder@gmail.com> -# - -"""Tests for urlencoded unpacker.""" - -import unittest - -from jsbeautifier.unpackers.urlencode import detect, unpack - -# pylint: disable=R0904 - - -class TestUrlencode(unittest.TestCase): - """urlencode test case.""" - - def test_detect(self): - """Test detect() function.""" - - def encoded(source): - return self.assertTrue(detect(source)) - - def unencoded(source): - return self.assertFalse(detect(source)) - - unencoded("") - unencoded("var a = b") - encoded("var%20a+=+b") - encoded("var%20a=b") - encoded("var%20%21%22") - - def test_unpack(self): - """Test unpack function.""" - - def equals(source, result): - return self.assertEqual(unpack(source), result) - - equals("", "") - equals("abcd", "abcd") - equals("var a = b", "var a = b") - equals("var%20a=b", "var a=b") - equals("var%20a+=+b", "var a = b") - - -if __name__ == "__main__": - unittest.main() diff --git a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/urlencode.py b/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/urlencode.py deleted file mode 100644 index d0d492a..0000000 --- a/venv/lib/python3.11/site-packages/jsbeautifier/unpackers/urlencode.py +++ /dev/null @@ -1,36 +0,0 @@ -# -# Trivial bookmarklet/escaped script detector for the javascript beautifier -# 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: -# -# some_string = urlencode.unpack(some_string) -# - -"""Bookmarklet/escaped script unpacker.""" - -# Python 2 retrocompatibility -# pylint: disable=F0401 -# pylint: disable=E0611 -try: - from urllib import unquote_plus -except ImportError: - from urllib.parse import unquote_plus - -PRIORITY = 0 - - -def detect(code): - """Detects if a scriptlet is urlencoded.""" - # the fact that script doesn't contain any space, but has %20 instead - # should be sufficient check for now. - return " " not in code and ("%20" in code or code.count("%") > 3) - - -def unpack(code): - """URL decode `code` source string.""" - return unquote_plus(code) if detect(code) else code |