This repository has been archived by the owner on Dec 10, 2017. It is now read-only.
/
unpacker_myobfuscate.js
64 lines (55 loc) · 1.99 KB
/
unpacker_myobfuscate.js
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
// ==UserScript==
// @include *.js*
// ==/UserScript==
//
// simple unpacker/deobfuscator for scripts messed up with myobfuscate.com
//
// written by Einar Lielmanis <einar@jsbeautifier.org>
//
// usage:
//
// if (MyObfuscate.detect(some_string)) {
// var unpacked = MyObfuscate.unpack(some_string);
// }
//
//
var MyObfuscate = {
detect: function (str) {
return /^var _?[0O1lI]{3}\=('|\[).*\)\)\);/.test(str);
},
unpack: function (str) {
if (MyObfuscate.detect(str)) {
var modified_source = str.replace(';eval(', ';unpacked_source = (');
var unpacked_source = '';
eval(modified_source);
if (unpacked_source) {
if (MyObfuscate.starts_with(unpacked_source, 'var _escape')) {
// fetch the urlencoded stuff from the script,
var matches = /'([^']*)'/.exec(unpacked_source);
var unescaped = unescape(matches[1]);
if (MyObfuscate.starts_with(unescaped, '<script>')) {
unescaped = unescaped.substr(8, unescaped.length - 8);
}
if (MyObfuscate.ends_with(unescaped, '</script>')) {
unescaped = unescaped.substr(0, unescaped.length - 9);
}
unpacked_source = unescaped;
}
}
return unpacked_source ? "// Unpacker warning: be careful when using myobfuscate.com for your projects:\n" +
"// scripts obfuscated by the free online version call back home.\n" +
"\n//\n" + unpacked_source : str;
}
return str;
},
starts_with: function (str, what) {
return str.substr(0, what.length) === what;
},
ends_with: function (str, what) {
return str.substr(str.length - what.length, what.length) === what;
},
run_tests: function (sanity_test) {
var t = sanity_test || new SanityTest();
return t;
}
}