js-beautify 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitmodules +4 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +27 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +13 -0
- data/Rakefile +29 -0
- data/VERSION +1 -0
- data/bin/js-beautify +5 -0
- data/init.sh +3 -0
- data/js-beautify-copy/.gitmodules +3 -0
- data/js-beautify-copy/Makefile +71 -0
- data/js-beautify-copy/README.md +39 -0
- data/js-beautify-copy/attic/beautify-cl/beautify-cl.js +142 -0
- data/js-beautify-copy/attic/bin/beautify_js +80 -0
- data/js-beautify-copy/attic/opera-userscript/beautifier.js +1087 -0
- data/js-beautify-copy/attic/opera-userscript/make_opera_userscript.sh +42 -0
- data/js-beautify-copy/attic/qtscript/jsbeautify.cpp +121 -0
- data/js-beautify-copy/attic/qtscript/jsbeautify.pro +5 -0
- data/js-beautify-copy/attic/qtscript/jsbeautify.qrc +6 -0
- data/js-beautify-copy/attic/qtscript/readme.txt +28 -0
- data/js-beautify-copy/attic/readme.txt +2 -0
- data/js-beautify-copy/attic/unmaintained/bbedit/jsBeautify_BBED.scpt +522 -0
- data/js-beautify-copy/attic/unmaintained/c-sharp/JSBeautify.cs +801 -0
- data/js-beautify-copy/attic/v8/README.txt +40 -0
- data/js-beautify-copy/attic/v8/beautify.h +2390 -0
- data/js-beautify-copy/attic/v8/jsbeautify.cpp +215 -0
- data/js-beautify-copy/beautify-css.js +198 -0
- data/js-beautify-copy/beautify-html.js +514 -0
- data/js-beautify-copy/beautify.js +1293 -0
- data/js-beautify-copy/favicon.png +0 -0
- data/js-beautify-copy/index.html +401 -0
- data/js-beautify-copy/jquery/jquery.cookie.js +96 -0
- data/js-beautify-copy/jquery/jquery.js +167 -0
- data/js-beautify-copy/license.txt +24 -0
- data/js-beautify-copy/php/jsbeautifier.php +1599 -0
- data/js-beautify-copy/php/test.php +476 -0
- data/js-beautify-copy/python/MANIFEST.in +2 -0
- data/js-beautify-copy/python/js-beautify +7 -0
- data/js-beautify-copy/python/js-beautify-profile +16 -0
- data/js-beautify-copy/python/js-beautify-test +10 -0
- data/js-beautify-copy/python/jsbeautifier/__init__.py +1166 -0
- data/js-beautify-copy/python/jsbeautifier/tests/__init__.py +1 -0
- data/js-beautify-copy/python/jsbeautifier/tests/testindentation.py +43 -0
- data/js-beautify-copy/python/jsbeautifier/tests/testjsbeautifier.py +464 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/README.specs.mkd +25 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/__init__.py +67 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/evalbased.py +39 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/javascriptobfuscator.py +58 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/myobfuscate.py +86 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/packer.py +104 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/__init__.py +2 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-input.js +1 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-myobfuscate-output.js +65 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-62-input.js +1 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/test-packer-non62-input.js +1 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testjavascriptobfuscator.py +46 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testmyobfuscate.py +40 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testpacker.py +34 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/tests/testurlencode.py +36 -0
- data/js-beautify-copy/python/jsbeautifier/unpackers/urlencode.py +34 -0
- data/js-beautify-copy/python/setup.py +17 -0
- data/js-beautify-copy/tests/beautify-tests.js +489 -0
- data/js-beautify-copy/tests/run-tests +17 -0
- data/js-beautify-copy/tests/sanitytest.js +128 -0
- data/js-beautify-copy/unpackers/javascriptobfuscator_unpacker.js +103 -0
- data/js-beautify-copy/unpackers/myobfuscate_unpacker.js +81 -0
- data/js-beautify-copy/unpackers/p_a_c_k_e_r_unpacker.js +61 -0
- data/js-beautify-copy/unpackers/urlencode_unpacker.js +51 -0
- data/lib/js-beautify.rb +0 -0
- data/test/helper.rb +18 -0
- data/test/test_js-beautify.rb +7 -0
- data/update.sh +23 -0
- metadata +173 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
# UNPACKERS SPECIFICATIONS
|
2
|
+
|
3
|
+
Nothing very difficult: an unpacker is a submodule placed in the directory
|
4
|
+
where this file was found. Each unpacker must define three symbols:
|
5
|
+
|
6
|
+
* `PRIORITY` : integer number expressing the priority in applying this
|
7
|
+
unpacker. Lower number means higher priority.
|
8
|
+
Makes sense only if a source file has been packed with
|
9
|
+
more than one packer.
|
10
|
+
* `detect(source)` : returns `True` if source is packed, otherwise, `False`.
|
11
|
+
* `unpack(source)` : takes a `source` string and unpacks it. Must always return
|
12
|
+
valid JavaScript. That is to say, your code should look
|
13
|
+
like:
|
14
|
+
|
15
|
+
```
|
16
|
+
if detect(source):
|
17
|
+
return do_your_fancy_things_with(source)
|
18
|
+
else:
|
19
|
+
return source
|
20
|
+
```
|
21
|
+
|
22
|
+
*You can safely define any other symbol in your module, as it will be ignored.*
|
23
|
+
|
24
|
+
`__init__` code will automatically load new unpackers, without any further step
|
25
|
+
to be accomplished. Simply drop it in this directory.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# General code for JSBeautifier unpackers infrastructure. See README.specs
|
3
|
+
# written by Stefano Sanfilippo <a.little.coder@gmail.com>
|
4
|
+
#
|
5
|
+
|
6
|
+
"""General code for JSBeautifier unpackers infrastructure."""
|
7
|
+
|
8
|
+
import pkgutil
|
9
|
+
import re
|
10
|
+
from jsbeautifier.unpackers import evalbased
|
11
|
+
|
12
|
+
# NOTE: AT THE MOMENT, IT IS DEACTIVATED FOR YOUR SECURITY: it runs js!
|
13
|
+
BLACKLIST = ['jsbeautifier.unpackers.evalbased']
|
14
|
+
|
15
|
+
class UnpackingError(Exception):
|
16
|
+
"""Badly packed source or general error. Argument is a
|
17
|
+
meaningful description."""
|
18
|
+
pass
|
19
|
+
|
20
|
+
def getunpackers():
|
21
|
+
"""Scans the unpackers dir, finds unpackers and add them to UNPACKERS list.
|
22
|
+
An unpacker will be loaded only if it is a valid python module (name must
|
23
|
+
adhere to naming conventions) and it is not blacklisted (i.e. inserted
|
24
|
+
into BLACKLIST."""
|
25
|
+
path = __path__
|
26
|
+
prefix = __name__ + '.'
|
27
|
+
unpackers = []
|
28
|
+
interface = ['unpack', 'detect', 'PRIORITY']
|
29
|
+
for _importer, modname, _ispkg in pkgutil.iter_modules(path, prefix):
|
30
|
+
if 'tests' not in modname and modname not in BLACKLIST:
|
31
|
+
try:
|
32
|
+
module = __import__(modname, fromlist=interface)
|
33
|
+
except ImportError:
|
34
|
+
raise UnpackingError('Bad unpacker: %s' % modname)
|
35
|
+
else:
|
36
|
+
unpackers.append(module)
|
37
|
+
|
38
|
+
return sorted(unpackers, key = lambda mod: mod.PRIORITY)
|
39
|
+
|
40
|
+
UNPACKERS = getunpackers()
|
41
|
+
|
42
|
+
def run(source, evalcode=False):
|
43
|
+
"""Runs the applicable unpackers and return unpacked source as a string."""
|
44
|
+
for unpacker in [mod for mod in UNPACKERS if mod.detect(source)]:
|
45
|
+
source = unpacker.unpack(source)
|
46
|
+
if evalcode and evalbased.detect(source):
|
47
|
+
source = evalbased.unpack(source)
|
48
|
+
return source
|
49
|
+
|
50
|
+
def filtercomments(source):
|
51
|
+
"""NOT USED: strips trailing comments and put them at the top."""
|
52
|
+
trailing_comments = []
|
53
|
+
comment = True
|
54
|
+
|
55
|
+
while comment:
|
56
|
+
if re.search(r'^\s*\/\*', source):
|
57
|
+
comment = source[0, source.index('*/') + 2]
|
58
|
+
elif re.search(r'^\s*\/\/', source):
|
59
|
+
comment = re.search(r'^\s*\/\/', source).group(0)
|
60
|
+
else:
|
61
|
+
comment = None
|
62
|
+
|
63
|
+
if comment:
|
64
|
+
source = re.sub(r'^\s+', '', source[len(comment):])
|
65
|
+
trailing_comments.append(comment)
|
66
|
+
|
67
|
+
return '\n'.join(trailing_comments) + source
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# Unpacker for eval() based packers, a part of javascript beautifier
|
3
|
+
# by Einar Lielmanis <einar@jsbeautifier.org>
|
4
|
+
#
|
5
|
+
# written by Stefano Sanfilippo <a.little.coder@gmail.com>
|
6
|
+
#
|
7
|
+
# usage:
|
8
|
+
#
|
9
|
+
# if detect(some_string):
|
10
|
+
# unpacked = unpack(some_string)
|
11
|
+
#
|
12
|
+
|
13
|
+
"""Unpacker for eval() based packers: runs JS code and returns result.
|
14
|
+
Works only if a JS interpreter (e.g. Mozilla's Rhino) is installed and
|
15
|
+
properly set up on host."""
|
16
|
+
|
17
|
+
from subprocess import PIPE, Popen
|
18
|
+
|
19
|
+
PRIORITY = 3
|
20
|
+
|
21
|
+
def detect(source):
|
22
|
+
"""Detects if source is likely to be eval() packed."""
|
23
|
+
return source.strip().lower().startswith('eval(function(')
|
24
|
+
|
25
|
+
def unpack(source):
|
26
|
+
"""Runs source and return resulting code."""
|
27
|
+
return jseval('print %s;' % source[4:]) if detect(source) else source
|
28
|
+
|
29
|
+
# In case of failure, we'll just return the original, without crashing on user.
|
30
|
+
def jseval(script):
|
31
|
+
"""Run code in the JS interpreter and return output."""
|
32
|
+
try:
|
33
|
+
interpreter = Popen(['js'], stdin=PIPE, stdout=PIPE)
|
34
|
+
except OSError:
|
35
|
+
return script
|
36
|
+
result, errors = interpreter.communicate(script)
|
37
|
+
if interpreter.poll() or errors:
|
38
|
+
return script
|
39
|
+
return result
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#
|
2
|
+
# simple unpacker/deobfuscator for scripts messed up with
|
3
|
+
# javascriptobfuscator.com
|
4
|
+
#
|
5
|
+
# written by Einar Lielmanis <einar@jsbeautifier.org>
|
6
|
+
# rewritten in Python by Stefano Sanfilippo <a.little.coder@gmail.com>
|
7
|
+
#
|
8
|
+
# Will always return valid javascript: if `detect()` is false, `code` is
|
9
|
+
# returned, unmodified.
|
10
|
+
#
|
11
|
+
# usage:
|
12
|
+
#
|
13
|
+
# if javascriptobfuscator.detect(some_string):
|
14
|
+
# some_string = javascriptobfuscator.unpack(some_string)
|
15
|
+
#
|
16
|
+
|
17
|
+
"""deobfuscator for scripts messed up with JavascriptObfuscator.com"""
|
18
|
+
|
19
|
+
import re
|
20
|
+
|
21
|
+
PRIORITY = 1
|
22
|
+
|
23
|
+
def smartsplit(code):
|
24
|
+
"""Split `code` at " symbol, only if it is not escaped."""
|
25
|
+
strings = []
|
26
|
+
pos = 0
|
27
|
+
while pos < len(code):
|
28
|
+
if code[pos] == '"':
|
29
|
+
word = '' # new word
|
30
|
+
pos += 1
|
31
|
+
while pos < len(code):
|
32
|
+
if code[pos] == '"':
|
33
|
+
break
|
34
|
+
if code[pos] == '\\':
|
35
|
+
word += '\\'
|
36
|
+
pos += 1
|
37
|
+
word += code[pos]
|
38
|
+
pos += 1
|
39
|
+
strings.append('"%s"' % word)
|
40
|
+
pos += 1
|
41
|
+
return strings
|
42
|
+
|
43
|
+
def detect(code):
|
44
|
+
"""Detects if `code` is JavascriptObfuscator.com packed."""
|
45
|
+
# prefer `is not` idiom, so that a true boolean is returned
|
46
|
+
return (re.search(r'^var _0x[a-f0-9]+ ?\= ?\[', code) is not None)
|
47
|
+
|
48
|
+
def unpack(code):
|
49
|
+
"""Unpacks JavascriptObfuscator.com packed code."""
|
50
|
+
if detect(code):
|
51
|
+
matches = re.search(r'var (_0x[a-f\d]+) ?\= ?\[(.*?)\];', code)
|
52
|
+
if matches:
|
53
|
+
variable = matches.group(1)
|
54
|
+
dictionary = smartsplit(matches.group(2))
|
55
|
+
code = code[len(matches.group(0)):]
|
56
|
+
for key, value in enumerate(dictionary):
|
57
|
+
code = code.replace(r'%s[%s]' % (variable, key), value)
|
58
|
+
return code
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#
|
2
|
+
# deobfuscator for scripts messed up with myobfuscate.com
|
3
|
+
# by Einar Lielmanis <einar@jsbeautifier.org>
|
4
|
+
#
|
5
|
+
# written by Stefano Sanfilippo <a.little.coder@gmail.com>
|
6
|
+
#
|
7
|
+
# usage:
|
8
|
+
#
|
9
|
+
# if detect(some_string):
|
10
|
+
# unpacked = unpack(some_string)
|
11
|
+
#
|
12
|
+
|
13
|
+
# CAVEAT by Einar Lielmanis
|
14
|
+
|
15
|
+
#
|
16
|
+
# You really don't want to obfuscate your scripts there: they're tracking
|
17
|
+
# your unpackings, your script gets turned into something like this,
|
18
|
+
# as of 2011-08-26:
|
19
|
+
#
|
20
|
+
# var _escape = 'your_script_escaped';
|
21
|
+
# var _111 = document.createElement('script');
|
22
|
+
# _111.src = 'http://api.www.myobfuscate.com/?getsrc=ok' +
|
23
|
+
# '&ref=' + encodeURIComponent(document.referrer) +
|
24
|
+
# '&url=' + encodeURIComponent(document.URL);
|
25
|
+
# var 000 = document.getElementsByTagName('head')[0];
|
26
|
+
# 000.appendChild(_111);
|
27
|
+
# document.write(unescape(_escape));
|
28
|
+
#
|
29
|
+
|
30
|
+
"""Deobfuscator for scripts messed up with MyObfuscate.com"""
|
31
|
+
|
32
|
+
import re
|
33
|
+
import base64
|
34
|
+
|
35
|
+
# Python 2 retrocompatibility
|
36
|
+
# pylint: disable=F0401
|
37
|
+
# pylint: disable=E0611
|
38
|
+
try:
|
39
|
+
from urllib import unquote
|
40
|
+
except ImportError:
|
41
|
+
from urllib.parse import unquote
|
42
|
+
|
43
|
+
from jsbeautifier.unpackers import UnpackingError
|
44
|
+
|
45
|
+
PRIORITY = 1
|
46
|
+
|
47
|
+
CAVEAT = """//
|
48
|
+
// Unpacker warning: be careful when using myobfuscate.com for your projects:
|
49
|
+
// scripts obfuscated by the free online version call back home.
|
50
|
+
//
|
51
|
+
|
52
|
+
"""
|
53
|
+
|
54
|
+
SIGNATURE = (r'["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F'
|
55
|
+
r'\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65'
|
56
|
+
r'\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75'
|
57
|
+
r'\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B'
|
58
|
+
r'\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78'
|
59
|
+
r'\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","'
|
60
|
+
r'\x6C\x65\x6E\x67\x74\x68"]')
|
61
|
+
|
62
|
+
def detect(source):
|
63
|
+
"""Detects MyObfuscate.com packer."""
|
64
|
+
return SIGNATURE in source
|
65
|
+
|
66
|
+
def unpack(source):
|
67
|
+
"""Unpacks js code packed with MyObfuscate.com"""
|
68
|
+
if not detect(source):
|
69
|
+
return source
|
70
|
+
payload = unquote(_filter(source))
|
71
|
+
match = re.search(r"^var _escape\='<script>(.*)<\/script>'",
|
72
|
+
payload, re.DOTALL)
|
73
|
+
polished = match.group(1) if match else source
|
74
|
+
return CAVEAT + polished
|
75
|
+
|
76
|
+
def _filter(source):
|
77
|
+
"""Extracts and decode payload (original file) from `source`"""
|
78
|
+
try:
|
79
|
+
varname = re.search(r'eval\(\w+\(\w+\((\w+)\)\)\);', source).group(1)
|
80
|
+
reverse = re.search(r"var +%s *\= *'(.*)';" % varname, source).group(1)
|
81
|
+
except AttributeError:
|
82
|
+
raise UnpackingError('Malformed MyObfuscate data.')
|
83
|
+
try:
|
84
|
+
return base64.b64decode(reverse[::-1].encode('utf8')).decode('utf8')
|
85
|
+
except TypeError:
|
86
|
+
raise UnpackingError('MyObfuscate payload is not base64-encoded.')
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#
|
2
|
+
# Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
|
3
|
+
# by Einar Lielmanis <einar@jsbeautifier.org>
|
4
|
+
#
|
5
|
+
# written by Stefano Sanfilippo <a.little.coder@gmail.com>
|
6
|
+
#
|
7
|
+
# usage:
|
8
|
+
#
|
9
|
+
# if detect(some_string):
|
10
|
+
# unpacked = unpack(some_string)
|
11
|
+
#
|
12
|
+
|
13
|
+
"""Unpacker for Dean Edward's p.a.c.k.e.r"""
|
14
|
+
|
15
|
+
import re
|
16
|
+
import string
|
17
|
+
from jsbeautifier.unpackers import UnpackingError
|
18
|
+
|
19
|
+
PRIORITY = 1
|
20
|
+
|
21
|
+
def detect(source):
|
22
|
+
"""Detects whether `source` is P.A.C.K.E.R. coded."""
|
23
|
+
return source.replace(' ', '').startswith('eval(function(p,a,c,k,e,r')
|
24
|
+
|
25
|
+
def unpack(source):
|
26
|
+
"""Unpacks P.A.C.K.E.R. packed js code."""
|
27
|
+
payload, symtab, radix, count = _filterargs(source)
|
28
|
+
|
29
|
+
if count != len(symtab):
|
30
|
+
raise UnpackingError('Malformed p.a.c.k.e.r. symtab.')
|
31
|
+
|
32
|
+
try:
|
33
|
+
unbase = Unbaser(radix)
|
34
|
+
except TypeError:
|
35
|
+
raise UnpackingError('Unknown p.a.c.k.e.r. encoding.')
|
36
|
+
|
37
|
+
def lookup(match):
|
38
|
+
"""Look up symbols in the synthetic symtab."""
|
39
|
+
word = match.group(0)
|
40
|
+
return symtab[unbase(word)] or word
|
41
|
+
|
42
|
+
source = re.sub(r'\b\w+\b', lookup, payload)
|
43
|
+
return _replacestrings(source)
|
44
|
+
|
45
|
+
def _filterargs(source):
|
46
|
+
"""Juice from a source file the four args needed by decoder."""
|
47
|
+
argsregex = (r"}\('(.*)', *(\d+), *(\d+), *'(.*)'\."
|
48
|
+
r"split\('\|'\), *(\d+), *(.*)\)\)")
|
49
|
+
args = re.search(argsregex, source, re.DOTALL).groups()
|
50
|
+
|
51
|
+
try:
|
52
|
+
return args[0], args[3].split('|'), int(args[1]), int(args[2])
|
53
|
+
except ValueError:
|
54
|
+
raise UnpackingError('Corrupted p.a.c.k.e.r. data.')
|
55
|
+
|
56
|
+
def _replacestrings(source):
|
57
|
+
"""Strip string lookup table (list) and replace values in source."""
|
58
|
+
match = re.search(r'var *(_\w+)\=\["(.*?)"\];', source, re.DOTALL)
|
59
|
+
|
60
|
+
if match:
|
61
|
+
varname, strings = match.groups()
|
62
|
+
startpoint = len(match.group(0))
|
63
|
+
lookup = strings.split('","')
|
64
|
+
variable = '%s[%%d]' % varname
|
65
|
+
for index, value in enumerate(lookup):
|
66
|
+
source = source.replace(variable % index, '"%s"' % value)
|
67
|
+
return source[startpoint:]
|
68
|
+
return source
|
69
|
+
|
70
|
+
|
71
|
+
class Unbaser(object):
|
72
|
+
"""Functor for a given base. Will efficiently convert
|
73
|
+
strings to natural numbers."""
|
74
|
+
ALPHABET = {
|
75
|
+
62 : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
76
|
+
95 : (' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
77
|
+
'[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')
|
78
|
+
}
|
79
|
+
|
80
|
+
def __init__(self, base):
|
81
|
+
self.base = base
|
82
|
+
|
83
|
+
# If base can be handled by int() builtin, let it do it for us
|
84
|
+
if 2 <= base <= 36:
|
85
|
+
self.unbase = lambda string: int(string, base)
|
86
|
+
else:
|
87
|
+
# Build conversion dictionary cache
|
88
|
+
try:
|
89
|
+
self.dictionary = dict((cipher, index) for
|
90
|
+
index, cipher in enumerate(self.ALPHABET[base]))
|
91
|
+
except KeyError:
|
92
|
+
raise TypeError('Unsupported base encoding.')
|
93
|
+
|
94
|
+
self.unbase = self._dictunbaser
|
95
|
+
|
96
|
+
def __call__(self, string):
|
97
|
+
return self.unbase(string)
|
98
|
+
|
99
|
+
def _dictunbaser(self, string):
|
100
|
+
"""Decodes a value to an integer."""
|
101
|
+
ret = 0
|
102
|
+
for index, cipher in enumerate(string[::-1]):
|
103
|
+
ret += (self.base ** index) * self.dictionary[cipher]
|
104
|
+
return ret
|
@@ -0,0 +1 @@
|
|
1
|
+
var OO0=["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F\x3D","","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x6C\x65\x6E\x67\x74\x68"];function _1OO(_0IO){var _011=OO0[0];var lOO,O10,_0ll,OlO,_01O,IOO,I01,_001,_11O=0,Ol0=OO0[1];do{OlO=_011[OO0[3]](_0IO[OO0[2]](_11O++));_01O=_011[OO0[3]](_0IO[OO0[2]](_11O++));IOO=_011[OO0[3]](_0IO[OO0[2]](_11O++));I01=_011[OO0[3]](_0IO[OO0[2]](_11O++));_001=OlO<<18|_01O<<12|IOO<<6|I01;lOO=_001>>16&0xff;O10=_001>>8&0xff;_0ll=_001&0xff;if(IOO==64){Ol0+=String[OO0[4]](lOO);}else{if(I01==64){Ol0+=String[OO0[4]](lOO,O10);}else{Ol0+=String[OO0[4]](lOO,O10,_0ll);};};} while(_11O<_0IO[OO0[5]]);return Ol0;};function O0I(O11){var OO1=OO0[1],_11O=0;for(_11O=O11[OO0[5]]-1;_11O>=0;_11O--){OO1+=O11[OO0[2]](_11O);};return OO1;};var _0OO='=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';eval(_1OO(O0I(_0OO)));
|
@@ -0,0 +1,65 @@
|
|
1
|
+
//
|
2
|
+
// Unpacker warning: be careful when using myobfuscate.com for your projects:
|
3
|
+
// scripts obfuscated by the free online version call back home.
|
4
|
+
//
|
5
|
+
|
6
|
+
//
|
7
|
+
// Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier
|
8
|
+
// written by Einar Lielmanis <einar@jsbeautifier.org>
|
9
|
+
//
|
10
|
+
// Coincidentally, it can defeat a couple of other eval-based compressors.
|
11
|
+
//
|
12
|
+
// usage:
|
13
|
+
//
|
14
|
+
// if (P_A_C_K_E_R.detect(some_string)) {
|
15
|
+
// var unpacked = P_A_C_K_E_R.unpack(some_string);
|
16
|
+
// }
|
17
|
+
//
|
18
|
+
//
|
19
|
+
|
20
|
+
var P_A_C_K_E_R = {
|
21
|
+
detect: function (str) {
|
22
|
+
return P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval(function(') ||
|
23
|
+
P_A_C_K_E_R._starts_with(str.toLowerCase().replace(/ +/g, ''), 'eval((function(') ;
|
24
|
+
},
|
25
|
+
|
26
|
+
unpack: function (str) {
|
27
|
+
var unpacked_source = '';
|
28
|
+
if (P_A_C_K_E_R.detect(str)) {
|
29
|
+
try {
|
30
|
+
eval('unpacked_source = ' + str.substring(4) + ';')
|
31
|
+
if (typeof unpacked_source == 'string' && unpacked_source) {
|
32
|
+
str = unpacked_source;
|
33
|
+
}
|
34
|
+
} catch (error) {
|
35
|
+
// well, it failed. we'll just return the original, instead of crashing on user.
|
36
|
+
}
|
37
|
+
}
|
38
|
+
return str;
|
39
|
+
},
|
40
|
+
|
41
|
+
_starts_with: function (str, what) {
|
42
|
+
return str.substr(0, what.length) === what;
|
43
|
+
},
|
44
|
+
|
45
|
+
run_tests: function (sanity_test) {
|
46
|
+
var t = sanity_test || new SanityTest();
|
47
|
+
t.test_function(P_A_C_K_E_R.detect, "P_A_C_K_E_R.detect");
|
48
|
+
t.expect('', false);
|
49
|
+
t.expect('var a = b', false);
|
50
|
+
t.expect('eval(function(p,a,c,k,e,r', true);
|
51
|
+
t.expect('eval ( function(p, a, c, k, e, r', true);
|
52
|
+
|
53
|
+
t.test_function(P_A_C_K_E_R.unpack, 'P_A_C_K_E_R.unpack');
|
54
|
+
t.expect("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',3,3,'var||a'.split('|'),0,{}))",
|
55
|
+
'var a=1');
|
56
|
+
|
57
|
+
var starts_with_a = function(what) { return P_A_C_K_E_R._starts_with(what, 'a'); }
|
58
|
+
t.test_function(starts_with_a, "P_A_C_K_E_R._starts_with(?, a)");
|
59
|
+
t.expect('abc', true);
|
60
|
+
t.expect('bcd', false);
|
61
|
+
t.expect('a', true);
|
62
|
+
t.expect('', false);
|
63
|
+
return t;
|
64
|
+
}
|
65
|
+
}
|