├── .DS_Store ├── LICENSE ├── README.md ├── crypto.js ├── device.v2.js ├── lab └── test.js ├── main.js ├── reversing └── main.js ├── stuff ├── deobfuscated.js ├── fp.js └── freer.js └── v1 ├── freer.har ├── freer.js ├── main.py └── old ├── captcha.png ├── main.py └── utils ├── __pycache__ └── pycryptojs.cpython-311.pyc └── pycryptojs.py /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xtekky/Freer-Bot/b925169ecc0d2713f2f0eb3fd45e4a6612c3bfb0/.DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 xtekky 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | adding account gen soon 2 | 3 | `freer.js` - deobfuscated main functions + example 4 | 5 | feel free to pull 6 | -------------------------------------------------------------------------------- /crypto.js: -------------------------------------------------------------------------------- 1 | var CryptoJS = 2 | CryptoJS || 3 | (function (u, p) { 4 | var d = {}, 5 | l = (d.lib = {}), 6 | s = function () { }, 7 | t = (l.Base = { 8 | extend: function (a) { 9 | s.prototype = this; 10 | var c = new s(); 11 | a && c.mixIn(a); 12 | c.hasOwnProperty("init") || 13 | (c.init = function () { 14 | c.$super.init.apply(this, arguments); 15 | }); 16 | c.init.prototype = c; 17 | c.$super = this; 18 | return c; 19 | }, 20 | create: function () { 21 | var a = this.extend(); 22 | a.init.apply(a, arguments); 23 | return a; 24 | }, 25 | init: function () { }, 26 | mixIn: function (a) { 27 | for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); 28 | a.hasOwnProperty("toString") && (this.toString = a.toString); 29 | }, 30 | clone: function () { 31 | return this.init.prototype.extend(this); 32 | }, 33 | }), 34 | r = (l.WordArray = t.extend({ 35 | init: function (a, c) { 36 | a = this.words = a || []; 37 | this.sigBytes = c != p ? c : 4 * a.length; 38 | }, 39 | toString: function (a) { 40 | return (a || v).stringify(this); 41 | }, 42 | concat: function (a) { 43 | var c = this.words, 44 | e = a.words, 45 | j = this.sigBytes; 46 | a = a.sigBytes; 47 | this.clamp(); 48 | if (j % 4) 49 | for (var k = 0; k < a; k++) 50 | c[(j + k) >>> 2] |= 51 | ((e[k >>> 2] >>> (24 - 8 * (k % 4))) & 255) << 52 | (24 - 8 * ((j + k) % 4)); 53 | else if (65535 < e.length) 54 | for (k = 0; k < a; k += 4) c[(j + k) >>> 2] = e[k >>> 2]; 55 | else c.push.apply(c, e); 56 | this.sigBytes += a; 57 | return this; 58 | }, 59 | clamp: function () { 60 | var a = this.words, 61 | c = this.sigBytes; 62 | a[c >>> 2] &= 4294967295 << (32 - 8 * (c % 4)); 63 | a.length = u.ceil(c / 4); 64 | }, 65 | clone: function () { 66 | var a = t.clone.call(this); 67 | a.words = this.words.slice(0); 68 | return a; 69 | }, 70 | random: function (a) { 71 | for (var c = [], e = 0; e < a; e += 4) 72 | c.push((4294967296 * u.random()) | 0); 73 | return new r.init(c, a); 74 | }, 75 | })), 76 | w = (d.enc = {}), 77 | v = (w.Hex = { 78 | stringify: function (a) { 79 | var c = a.words; 80 | a = a.sigBytes; 81 | for (var e = [], j = 0; j < a; j++) { 82 | var k = (c[j >>> 2] >>> (24 - 8 * (j % 4))) & 255; 83 | e.push((k >>> 4).toString(16)); 84 | e.push((k & 15).toString(16)); 85 | } 86 | return e.join(""); 87 | }, 88 | parse: function (a) { 89 | for (var c = a.length, e = [], j = 0; j < c; j += 2) 90 | e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << (24 - 4 * (j % 8)); 91 | return new r.init(e, c / 2); 92 | }, 93 | }), 94 | b = (w.Latin1 = { 95 | stringify: function (a) { 96 | var c = a.words; 97 | a = a.sigBytes; 98 | for (var e = [], j = 0; j < a; j++) 99 | e.push( 100 | String.fromCharCode((c[j >>> 2] >>> (24 - 8 * (j % 4))) & 255) 101 | ); 102 | return e.join(""); 103 | }, 104 | parse: function (a) { 105 | for (var c = a.length, e = [], j = 0; j < c; j++) 106 | e[j >>> 2] |= (a.charCodeAt(j) & 255) << (24 - 8 * (j % 4)); 107 | return new r.init(e, c); 108 | }, 109 | }), 110 | x = (w.Utf8 = { 111 | stringify: function (a) { 112 | try { 113 | return decodeURIComponent(escape(b.stringify(a))); 114 | } catch (c) { 115 | throw Error("Malformed UTF-8 data"); 116 | } 117 | }, 118 | parse: function (a) { 119 | return b.parse(unescape(encodeURIComponent(a))); 120 | }, 121 | }), 122 | q = (l.BufferedBlockAlgorithm = t.extend({ 123 | reset: function () { 124 | this._data = new r.init(); 125 | this._nDataBytes = 0; 126 | }, 127 | _append: function (a) { 128 | "string" == typeof a && (a = x.parse(a)); 129 | this._data.concat(a); 130 | this._nDataBytes += a.sigBytes; 131 | }, 132 | _process: function (a) { 133 | var c = this._data, 134 | e = c.words, 135 | j = c.sigBytes, 136 | k = this.blockSize, 137 | b = j / (4 * k), 138 | b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0); 139 | a = b * k; 140 | j = u.min(4 * a, j); 141 | if (a) { 142 | for (var q = 0; q < a; q += k) this._doProcessBlock(e, q); 143 | q = e.splice(0, a); 144 | c.sigBytes -= j; 145 | } 146 | return new r.init(q, j); 147 | }, 148 | clone: function () { 149 | var a = t.clone.call(this); 150 | a._data = this._data.clone(); 151 | return a; 152 | }, 153 | _minBufferSize: 0, 154 | })); 155 | l.Hasher = q.extend({ 156 | cfg: t.extend(), 157 | init: function (a) { 158 | this.cfg = this.cfg.extend(a); 159 | this.reset(); 160 | }, 161 | reset: function () { 162 | q.reset.call(this); 163 | this._doReset(); 164 | }, 165 | update: function (a) { 166 | this._append(a); 167 | this._process(); 168 | return this; 169 | }, 170 | finalize: function (a) { 171 | a && this._append(a); 172 | return this._doFinalize(); 173 | }, 174 | blockSize: 16, 175 | _createHelper: function (a) { 176 | return function (b, e) { 177 | return new a.init(e).finalize(b); 178 | }; 179 | }, 180 | _createHmacHelper: function (a) { 181 | return function (b, e) { 182 | return new n.HMAC.init(a, e).finalize(b); 183 | }; 184 | }, 185 | }); 186 | var n = (d.algo = {}); 187 | return d; 188 | })(Math); 189 | (function () { 190 | var u = CryptoJS, 191 | p = u.lib.WordArray; 192 | u.enc.Base64 = { 193 | stringify: function (d) { 194 | var l = d.words, 195 | p = d.sigBytes, 196 | t = this._map; 197 | d.clamp(); 198 | d = []; 199 | for (var r = 0; r < p; r += 3) 200 | for ( 201 | var w = 202 | (((l[r >>> 2] >>> (24 - 8 * (r % 4))) & 255) << 16) | 203 | (((l[(r + 1) >>> 2] >>> (24 - 8 * ((r + 1) % 4))) & 255) << 8) | 204 | ((l[(r + 2) >>> 2] >>> (24 - 8 * ((r + 2) % 4))) & 255), 205 | v = 0; 206 | 4 > v && r + 0.75 * v < p; 207 | v++ 208 | ) 209 | d.push(t.charAt((w >>> (6 * (3 - v))) & 63)); 210 | if ((l = t.charAt(64))) for (; d.length % 4;) d.push(l); 211 | return d.join(""); 212 | }, 213 | parse: function (d) { 214 | var l = d.length, 215 | s = this._map, 216 | t = s.charAt(64); 217 | t && ((t = d.indexOf(t)), -1 != t && (l = t)); 218 | for (var t = [], r = 0, w = 0; w < l; w++) 219 | if (w % 4) { 220 | var v = s.indexOf(d.charAt(w - 1)) << (2 * (w % 4)), 221 | b = s.indexOf(d.charAt(w)) >>> (6 - 2 * (w % 4)); 222 | t[r >>> 2] |= (v | b) << (24 - 8 * (r % 4)); 223 | r++; 224 | } 225 | return p.create(t, r); 226 | }, 227 | _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", 228 | }; 229 | })(); 230 | (function (u) { 231 | function p(b, n, a, c, e, j, k) { 232 | b = b + ((n & a) | (~n & c)) + e + k; 233 | return ((b << j) | (b >>> (32 - j))) + n; 234 | } 235 | function d(b, n, a, c, e, j, k) { 236 | b = b + ((n & c) | (a & ~c)) + e + k; 237 | return ((b << j) | (b >>> (32 - j))) + n; 238 | } 239 | function l(b, n, a, c, e, j, k) { 240 | b = b + (n ^ a ^ c) + e + k; 241 | return ((b << j) | (b >>> (32 - j))) + n; 242 | } 243 | function s(b, n, a, c, e, j, k) { 244 | b = b + (a ^ (n | ~c)) + e + k; 245 | return ((b << j) | (b >>> (32 - j))) + n; 246 | } 247 | for ( 248 | var t = CryptoJS, 249 | r = t.lib, 250 | w = r.WordArray, 251 | v = r.Hasher, 252 | r = t.algo, 253 | b = [], 254 | x = 0; 255 | 64 > x; 256 | x++ 257 | ) 258 | b[x] = (4294967296 * u.abs(u.sin(x + 1))) | 0; 259 | r = r.MD5 = v.extend({ 260 | _doReset: function () { 261 | this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]); 262 | }, 263 | _doProcessBlock: function (q, n) { 264 | for (var a = 0; 16 > a; a++) { 265 | var c = n + a, 266 | e = q[c]; 267 | q[c] = 268 | (((e << 8) | (e >>> 24)) & 16711935) | 269 | (((e << 24) | (e >>> 8)) & 4278255360); 270 | } 271 | var a = this._hash.words, 272 | c = q[n + 0], 273 | e = q[n + 1], 274 | j = q[n + 2], 275 | k = q[n + 3], 276 | z = q[n + 4], 277 | r = q[n + 5], 278 | t = q[n + 6], 279 | w = q[n + 7], 280 | v = q[n + 8], 281 | A = q[n + 9], 282 | B = q[n + 10], 283 | C = q[n + 11], 284 | u = q[n + 12], 285 | D = q[n + 13], 286 | E = q[n + 14], 287 | x = q[n + 15], 288 | f = a[0], 289 | m = a[1], 290 | g = a[2], 291 | h = a[3], 292 | f = p(f, m, g, h, c, 7, b[0]), 293 | h = p(h, f, m, g, e, 12, b[1]), 294 | g = p(g, h, f, m, j, 17, b[2]), 295 | m = p(m, g, h, f, k, 22, b[3]), 296 | f = p(f, m, g, h, z, 7, b[4]), 297 | h = p(h, f, m, g, r, 12, b[5]), 298 | g = p(g, h, f, m, t, 17, b[6]), 299 | m = p(m, g, h, f, w, 22, b[7]), 300 | f = p(f, m, g, h, v, 7, b[8]), 301 | h = p(h, f, m, g, A, 12, b[9]), 302 | g = p(g, h, f, m, B, 17, b[10]), 303 | m = p(m, g, h, f, C, 22, b[11]), 304 | f = p(f, m, g, h, u, 7, b[12]), 305 | h = p(h, f, m, g, D, 12, b[13]), 306 | g = p(g, h, f, m, E, 17, b[14]), 307 | m = p(m, g, h, f, x, 22, b[15]), 308 | f = d(f, m, g, h, e, 5, b[16]), 309 | h = d(h, f, m, g, t, 9, b[17]), 310 | g = d(g, h, f, m, C, 14, b[18]), 311 | m = d(m, g, h, f, c, 20, b[19]), 312 | f = d(f, m, g, h, r, 5, b[20]), 313 | h = d(h, f, m, g, B, 9, b[21]), 314 | g = d(g, h, f, m, x, 14, b[22]), 315 | m = d(m, g, h, f, z, 20, b[23]), 316 | f = d(f, m, g, h, A, 5, b[24]), 317 | h = d(h, f, m, g, E, 9, b[25]), 318 | g = d(g, h, f, m, k, 14, b[26]), 319 | m = d(m, g, h, f, v, 20, b[27]), 320 | f = d(f, m, g, h, D, 5, b[28]), 321 | h = d(h, f, m, g, j, 9, b[29]), 322 | g = d(g, h, f, m, w, 14, b[30]), 323 | m = d(m, g, h, f, u, 20, b[31]), 324 | f = l(f, m, g, h, r, 4, b[32]), 325 | h = l(h, f, m, g, v, 11, b[33]), 326 | g = l(g, h, f, m, C, 16, b[34]), 327 | m = l(m, g, h, f, E, 23, b[35]), 328 | f = l(f, m, g, h, e, 4, b[36]), 329 | h = l(h, f, m, g, z, 11, b[37]), 330 | g = l(g, h, f, m, w, 16, b[38]), 331 | m = l(m, g, h, f, B, 23, b[39]), 332 | f = l(f, m, g, h, D, 4, b[40]), 333 | h = l(h, f, m, g, c, 11, b[41]), 334 | g = l(g, h, f, m, k, 16, b[42]), 335 | m = l(m, g, h, f, t, 23, b[43]), 336 | f = l(f, m, g, h, A, 4, b[44]), 337 | h = l(h, f, m, g, u, 11, b[45]), 338 | g = l(g, h, f, m, x, 16, b[46]), 339 | m = l(m, g, h, f, j, 23, b[47]), 340 | f = s(f, m, g, h, c, 6, b[48]), 341 | h = s(h, f, m, g, w, 10, b[49]), 342 | g = s(g, h, f, m, E, 15, b[50]), 343 | m = s(m, g, h, f, r, 21, b[51]), 344 | f = s(f, m, g, h, u, 6, b[52]), 345 | h = s(h, f, m, g, k, 10, b[53]), 346 | g = s(g, h, f, m, B, 15, b[54]), 347 | m = s(m, g, h, f, e, 21, b[55]), 348 | f = s(f, m, g, h, v, 6, b[56]), 349 | h = s(h, f, m, g, x, 10, b[57]), 350 | g = s(g, h, f, m, t, 15, b[58]), 351 | m = s(m, g, h, f, D, 21, b[59]), 352 | f = s(f, m, g, h, z, 6, b[60]), 353 | h = s(h, f, m, g, C, 10, b[61]), 354 | g = s(g, h, f, m, j, 15, b[62]), 355 | m = s(m, g, h, f, A, 21, b[63]); 356 | a[0] = (a[0] + f) | 0; 357 | a[1] = (a[1] + m) | 0; 358 | a[2] = (a[2] + g) | 0; 359 | a[3] = (a[3] + h) | 0; 360 | }, 361 | _doFinalize: function () { 362 | var b = this._data, 363 | n = b.words, 364 | a = 8 * this._nDataBytes, 365 | c = 8 * b.sigBytes; 366 | n[c >>> 5] |= 128 << (24 - (c % 32)); 367 | var e = u.floor(a / 4294967296); 368 | n[(((c + 64) >>> 9) << 4) + 15] = 369 | (((e << 8) | (e >>> 24)) & 16711935) | 370 | (((e << 24) | (e >>> 8)) & 4278255360); 371 | n[(((c + 64) >>> 9) << 4) + 14] = 372 | (((a << 8) | (a >>> 24)) & 16711935) | 373 | (((a << 24) | (a >>> 8)) & 4278255360); 374 | b.sigBytes = 4 * (n.length + 1); 375 | this._process(); 376 | b = this._hash; 377 | n = b.words; 378 | for (a = 0; 4 > a; a++) 379 | (c = n[a]), 380 | (n[a] = 381 | (((c << 8) | (c >>> 24)) & 16711935) | 382 | (((c << 24) | (c >>> 8)) & 4278255360)); 383 | return b; 384 | }, 385 | clone: function () { 386 | var b = v.clone.call(this); 387 | b._hash = this._hash.clone(); 388 | return b; 389 | }, 390 | }); 391 | t.MD5 = v._createHelper(r); 392 | t.HmacMD5 = v._createHmacHelper(r); 393 | })(Math); 394 | (function () { 395 | var u = CryptoJS, 396 | p = u.lib, 397 | d = p.Base, 398 | l = p.WordArray, 399 | p = u.algo, 400 | s = (p.EvpKDF = d.extend({ 401 | cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), 402 | init: function (d) { 403 | this.cfg = this.cfg.extend(d); 404 | }, 405 | compute: function (d, r) { 406 | for ( 407 | var p = this.cfg, 408 | s = p.hasher.create(), 409 | b = l.create(), 410 | u = b.words, 411 | q = p.keySize, 412 | p = p.iterations; 413 | u.length < q; 414 | 415 | ) { 416 | n && s.update(n); 417 | var n = s.update(d).finalize(r); 418 | s.reset(); 419 | for (var a = 1; a < p; a++) (n = s.finalize(n)), s.reset(); 420 | b.concat(n); 421 | } 422 | b.sigBytes = 4 * q; 423 | return b; 424 | }, 425 | })); 426 | u.EvpKDF = function (d, l, p) { 427 | return s.create(p).compute(d, l); 428 | }; 429 | })(); 430 | CryptoJS.lib.Cipher || 431 | (function (u) { 432 | var p = CryptoJS, 433 | d = p.lib, 434 | l = d.Base, 435 | s = d.WordArray, 436 | t = d.BufferedBlockAlgorithm, 437 | r = p.enc.Base64, 438 | w = p.algo.EvpKDF, 439 | v = (d.Cipher = t.extend({ 440 | cfg: l.extend(), 441 | createEncryptor: function (e, a) { 442 | return this.create(this._ENC_XFORM_MODE, e, a); 443 | }, 444 | createDecryptor: function (e, a) { 445 | return this.create(this._DEC_XFORM_MODE, e, a); 446 | }, 447 | init: function (e, a, b) { 448 | this.cfg = this.cfg.extend(b); 449 | this._xformMode = e; 450 | this._key = a; 451 | this.reset(); 452 | }, 453 | reset: function () { 454 | t.reset.call(this); 455 | this._doReset(); 456 | }, 457 | process: function (e) { 458 | this._append(e); 459 | return this._process(); 460 | }, 461 | finalize: function (e) { 462 | e && this._append(e); 463 | return this._doFinalize(); 464 | }, 465 | keySize: 4, 466 | ivSize: 4, 467 | _ENC_XFORM_MODE: 1, 468 | _DEC_XFORM_MODE: 2, 469 | _createHelper: function (e) { 470 | return { 471 | encrypt: function (b, k, d) { 472 | return ("string" == typeof k ? c : a).encrypt(e, b, k, d); 473 | }, 474 | decrypt: function (b, k, d) { 475 | return ("string" == typeof k ? c : a).decrypt(e, b, k, d); 476 | }, 477 | }; 478 | }, 479 | })); 480 | d.StreamCipher = v.extend({ 481 | _doFinalize: function () { 482 | return this._process(!0); 483 | }, 484 | blockSize: 1, 485 | }); 486 | var b = (p.mode = {}), 487 | x = function (e, a, b) { 488 | var c = this._iv; 489 | c ? (this._iv = u) : (c = this._prevBlock); 490 | for (var d = 0; d < b; d++) e[a + d] ^= c[d]; 491 | }, 492 | q = (d.BlockCipherMode = l.extend({ 493 | createEncryptor: function (e, a) { 494 | return this.Encryptor.create(e, a); 495 | }, 496 | createDecryptor: function (e, a) { 497 | return this.Decryptor.create(e, a); 498 | }, 499 | init: function (e, a) { 500 | this._cipher = e; 501 | this._iv = a; 502 | }, 503 | })).extend(); 504 | q.Encryptor = q.extend({ 505 | processBlock: function (e, a) { 506 | var b = this._cipher, 507 | c = b.blockSize; 508 | x.call(this, e, a, c); 509 | b.encryptBlock(e, a); 510 | this._prevBlock = e.slice(a, a + c); 511 | }, 512 | }); 513 | q.Decryptor = q.extend({ 514 | processBlock: function (e, a) { 515 | var b = this._cipher, 516 | c = b.blockSize, 517 | d = e.slice(a, a + c); 518 | b.decryptBlock(e, a); 519 | x.call(this, e, a, c); 520 | this._prevBlock = d; 521 | }, 522 | }); 523 | b = b.CBC = q; 524 | q = (p.pad = {}).Pkcs7 = { 525 | pad: function (a, b) { 526 | for ( 527 | var c = 4 * b, 528 | c = c - (a.sigBytes % c), 529 | d = (c << 24) | (c << 16) | (c << 8) | c, 530 | l = [], 531 | n = 0; 532 | n < c; 533 | n += 4 534 | ) 535 | l.push(d); 536 | c = s.create(l, c); 537 | a.concat(c); 538 | }, 539 | unpad: function (a) { 540 | a.sigBytes -= a.words[(a.sigBytes - 1) >>> 2] & 255; 541 | }, 542 | }; 543 | d.BlockCipher = v.extend({ 544 | cfg: v.cfg.extend({ mode: b, padding: q }), 545 | reset: function () { 546 | v.reset.call(this); 547 | var a = this.cfg, 548 | b = a.iv, 549 | a = a.mode; 550 | if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; 551 | else (c = a.createDecryptor), (this._minBufferSize = 1); 552 | this._mode = c.call(a, this, b && b.words); 553 | }, 554 | _doProcessBlock: function (a, b) { 555 | this._mode.processBlock(a, b); 556 | }, 557 | _doFinalize: function () { 558 | var a = this.cfg.padding; 559 | if (this._xformMode == this._ENC_XFORM_MODE) { 560 | a.pad(this._data, this.blockSize); 561 | var b = this._process(!0); 562 | } else (b = this._process(!0)), a.unpad(b); 563 | return b; 564 | }, 565 | blockSize: 4, 566 | }); 567 | var n = (d.CipherParams = l.extend({ 568 | init: function (a) { 569 | this.mixIn(a); 570 | }, 571 | toString: function (a) { 572 | return (a || this.formatter).stringify(this); 573 | }, 574 | })), 575 | b = ((p.format = {}).OpenSSL = { 576 | stringify: function (a) { 577 | var b = a.ciphertext; 578 | a = a.salt; 579 | return ( 580 | a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b 581 | ).toString(r); 582 | }, 583 | parse: function (a) { 584 | a = r.parse(a); 585 | var b = a.words; 586 | if (1398893684 == b[0] && 1701076831 == b[1]) { 587 | var c = s.create(b.slice(2, 4)); 588 | b.splice(0, 4); 589 | a.sigBytes -= 16; 590 | } 591 | return n.create({ ciphertext: a, salt: c }); 592 | }, 593 | }), 594 | a = (d.SerializableCipher = l.extend({ 595 | cfg: l.extend({ format: b }), 596 | encrypt: function (a, b, c, d) { 597 | d = this.cfg.extend(d); 598 | var l = a.createEncryptor(c, d); 599 | b = l.finalize(b); 600 | l = l.cfg; 601 | return n.create({ 602 | ciphertext: b, 603 | key: c, 604 | iv: l.iv, 605 | algorithm: a, 606 | mode: l.mode, 607 | padding: l.padding, 608 | blockSize: a.blockSize, 609 | formatter: d.format, 610 | }); 611 | }, 612 | decrypt: function (a, b, c, d) { 613 | d = this.cfg.extend(d); 614 | b = this._parse(b, d.format); 615 | return a.createDecryptor(c, d).finalize(b.ciphertext); 616 | }, 617 | _parse: function (a, b) { 618 | return "string" == typeof a ? b.parse(a, this) : a; 619 | }, 620 | })), 621 | p = ((p.kdf = {}).OpenSSL = { 622 | execute: function (a, b, c, d) { 623 | d || (d = s.random(8)); 624 | a = w.create({ keySize: b + c }).compute(a, d); 625 | c = s.create(a.words.slice(b), 4 * c); 626 | a.sigBytes = 4 * b; 627 | return n.create({ key: a, iv: c, salt: d }); 628 | }, 629 | }), 630 | c = (d.PasswordBasedCipher = a.extend({ 631 | cfg: a.cfg.extend({ kdf: p }), 632 | encrypt: function (b, c, d, l) { 633 | l = this.cfg.extend(l); 634 | d = l.kdf.execute(d, b.keySize, b.ivSize); 635 | l.iv = d.iv; 636 | b = a.encrypt.call(this, b, c, d.key, l); 637 | b.mixIn(d); 638 | return b; 639 | }, 640 | decrypt: function (b, c, d, l) { 641 | l = this.cfg.extend(l); 642 | c = this._parse(c, l.format); 643 | d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt); 644 | l.iv = d.iv; 645 | return a.decrypt.call(this, b, c, d.key, l); 646 | }, 647 | })); 648 | })(); 649 | (function () { 650 | for ( 651 | var u = CryptoJS, 652 | p = u.lib.BlockCipher, 653 | d = u.algo, 654 | l = [], 655 | s = [], 656 | t = [], 657 | r = [], 658 | w = [], 659 | v = [], 660 | b = [], 661 | x = [], 662 | q = [], 663 | n = [], 664 | a = [], 665 | c = 0; 666 | 256 > c; 667 | c++ 668 | ) 669 | a[c] = 128 > c ? c << 1 : (c << 1) ^ 283; 670 | for (var e = 0, j = 0, c = 0; 256 > c; c++) { 671 | var k = j ^ (j << 1) ^ (j << 2) ^ (j << 3) ^ (j << 4), 672 | k = (k >>> 8) ^ (k & 255) ^ 99; 673 | l[e] = k; 674 | s[k] = e; 675 | var z = a[e], 676 | F = a[z], 677 | G = a[F], 678 | y = (257 * a[k]) ^ (16843008 * k); 679 | t[e] = (y << 24) | (y >>> 8); 680 | r[e] = (y << 16) | (y >>> 16); 681 | w[e] = (y << 8) | (y >>> 24); 682 | v[e] = y; 683 | y = (16843009 * G) ^ (65537 * F) ^ (257 * z) ^ (16843008 * e); 684 | b[k] = (y << 24) | (y >>> 8); 685 | x[k] = (y << 16) | (y >>> 16); 686 | q[k] = (y << 8) | (y >>> 24); 687 | n[k] = y; 688 | e ? ((e = z ^ a[a[a[G ^ z]]]), (j ^= a[a[j]])) : (e = j = 1); 689 | } 690 | var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], 691 | d = (d.AES = p.extend({ 692 | _doReset: function () { 693 | for ( 694 | var a = this._key, 695 | c = a.words, 696 | d = a.sigBytes / 4, 697 | a = 4 * ((this._nRounds = d + 6) + 1), 698 | e = (this._keySchedule = []), 699 | j = 0; 700 | j < a; 701 | j++ 702 | ) 703 | if (j < d) e[j] = c[j]; 704 | else { 705 | var k = e[j - 1]; 706 | j % d 707 | ? 6 < d && 708 | 4 == j % d && 709 | (k = 710 | (l[k >>> 24] << 24) | 711 | (l[(k >>> 16) & 255] << 16) | 712 | (l[(k >>> 8) & 255] << 8) | 713 | l[k & 255]) 714 | : ((k = (k << 8) | (k >>> 24)), 715 | (k = 716 | (l[k >>> 24] << 24) | 717 | (l[(k >>> 16) & 255] << 16) | 718 | (l[(k >>> 8) & 255] << 8) | 719 | l[k & 255]), 720 | (k ^= H[(j / d) | 0] << 24)); 721 | e[j] = e[j - d] ^ k; 722 | } 723 | c = this._invKeySchedule = []; 724 | for (d = 0; d < a; d++) 725 | (j = a - d), 726 | (k = d % 4 ? e[j] : e[j - 4]), 727 | (c[d] = 728 | 4 > d || 4 >= j 729 | ? k 730 | : b[l[k >>> 24]] ^ 731 | x[l[(k >>> 16) & 255]] ^ 732 | q[l[(k >>> 8) & 255]] ^ 733 | n[l[k & 255]]); 734 | }, 735 | encryptBlock: function (a, b) { 736 | this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l); 737 | }, 738 | decryptBlock: function (a, c) { 739 | var d = a[c + 1]; 740 | a[c + 1] = a[c + 3]; 741 | a[c + 3] = d; 742 | this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s); 743 | d = a[c + 1]; 744 | a[c + 1] = a[c + 3]; 745 | a[c + 3] = d; 746 | }, 747 | _doCryptBlock: function (a, b, c, d, e, j, l, f) { 748 | for ( 749 | var m = this._nRounds, 750 | g = a[b] ^ c[0], 751 | h = a[b + 1] ^ c[1], 752 | k = a[b + 2] ^ c[2], 753 | n = a[b + 3] ^ c[3], 754 | p = 4, 755 | r = 1; 756 | r < m; 757 | r++ 758 | ) 759 | var q = 760 | d[g >>> 24] ^ 761 | e[(h >>> 16) & 255] ^ 762 | j[(k >>> 8) & 255] ^ 763 | l[n & 255] ^ 764 | c[p++], 765 | s = 766 | d[h >>> 24] ^ 767 | e[(k >>> 16) & 255] ^ 768 | j[(n >>> 8) & 255] ^ 769 | l[g & 255] ^ 770 | c[p++], 771 | t = 772 | d[k >>> 24] ^ 773 | e[(n >>> 16) & 255] ^ 774 | j[(g >>> 8) & 255] ^ 775 | l[h & 255] ^ 776 | c[p++], 777 | n = 778 | d[n >>> 24] ^ 779 | e[(g >>> 16) & 255] ^ 780 | j[(h >>> 8) & 255] ^ 781 | l[k & 255] ^ 782 | c[p++], 783 | g = q, 784 | h = s, 785 | k = t; 786 | q = 787 | ((f[g >>> 24] << 24) | 788 | (f[(h >>> 16) & 255] << 16) | 789 | (f[(k >>> 8) & 255] << 8) | 790 | f[n & 255]) ^ 791 | c[p++]; 792 | s = 793 | ((f[h >>> 24] << 24) | 794 | (f[(k >>> 16) & 255] << 16) | 795 | (f[(n >>> 8) & 255] << 8) | 796 | f[g & 255]) ^ 797 | c[p++]; 798 | t = 799 | ((f[k >>> 24] << 24) | 800 | (f[(n >>> 16) & 255] << 16) | 801 | (f[(g >>> 8) & 255] << 8) | 802 | f[h & 255]) ^ 803 | c[p++]; 804 | n = 805 | ((f[n >>> 24] << 24) | 806 | (f[(g >>> 16) & 255] << 16) | 807 | (f[(h >>> 8) & 255] << 8) | 808 | f[k & 255]) ^ 809 | c[p++]; 810 | a[b] = q; 811 | a[b + 1] = s; 812 | a[b + 2] = t; 813 | a[b + 3] = n; 814 | }, 815 | keySize: 8, 816 | })); 817 | u.AES = p._createHelper(d); 818 | })(); 819 | var CryptoJSAesJson = { 820 | stringify: function (r) { 821 | var t = { ct: r.ciphertext.toString(CryptoJS.enc.Base64) }; 822 | return ( 823 | r.iv && (t.iv = r.iv.toString()), 824 | r.salt && (t.s = r.salt.toString()), 825 | JSON.stringify(t) 826 | ); 827 | }, 828 | parse: function (r) { 829 | var t = JSON.parse(r), 830 | e = CryptoJS.lib.CipherParams.create({ 831 | ciphertext: CryptoJS.enc.Base64.parse(t.ct), 832 | }); 833 | return ( 834 | t.iv && (e.iv = CryptoJS.enc.Hex.parse(t.iv)), 835 | t.s && (e.salt = CryptoJS.enc.Hex.parse(t.s)), 836 | e 837 | ); 838 | }, 839 | }; 840 | 841 | module.exports = { CryptoJS, CryptoJSAesJson }; -------------------------------------------------------------------------------- /device.v2.js: -------------------------------------------------------------------------------- 1 | const Device = class { 2 | static getDevice() { 3 | return { 4 | 0: "Europe/Dublin", 5 | 1: 0, 6 | 2: { 0: true, 1: true, 2: true, 3: true, 4: true }, 7 | 3: [this.randint(154243263, 354243263), this.randint(100, 300)], 8 | 4: { 0: 25, 1: 1, 2: 19 }, 9 | 5: this.randint(50, 100), 10 | 6: false, 11 | 7: 2, 12 | 8: false, 13 | 10: "MacIntel", 14 | 11: 8, 15 | 12: 8, 16 | 13: { 17 | render: "ANGLE (Apple, Apple M2, OpenGL 4.1)", 18 | vendor: "Google Inc. (Apple)", 19 | p: this.randint(1000, 6000), 20 | id: this.randhex(16), 21 | }, 22 | 15: { 0: true, 1: true }, 23 | 16: [this.randint(11715, 16715), this.randint(107064317542, 147064317542)], 24 | 17: "denied", 25 | 19: { isc: false, lvl: 40, ct: null, dct: 8400 }, 26 | 20: [], 27 | 21: "freer.es", 28 | 22: { 0: `${this.uuid()}.local` }, 29 | 23: "", 30 | 24: { 0: [{}] }, 31 | 25: { 0: "en", 1: ["en", "fr-FR", "es-ES", "es", "fr", "en-US", "am", "de"] }, 32 | 26: { 33 | 0: 2, 34 | 1: 956, 35 | 2: 1470, 36 | 3: 845, 37 | 4: 1470, 38 | 5: "landscape-primary", 39 | 6: false, 40 | 7: 192, 41 | 8: 385, 42 | 9: 766, 43 | }, 44 | 27: { 0: ["Baskerville"], 1: 1 }, 45 | 28: 1, 46 | 29: [false, false, false, false], 47 | 35: false, 48 | 36: [ 49 | "queryLocalFonts", 50 | "define", 51 | "returnCommentSymbol", 52 | "savedChPos", 53 | "returnedSuggestion", 54 | "suggestionsStatus", 55 | "docLang", 56 | "suggestionDisplayed", 57 | "isReturningSuggestion", 58 | "acceptTab", 59 | "acceptSuggestion", 60 | "displayGrey", 61 | "updateSuggestionStatus", 62 | "formatCode", 63 | "insert", 64 | ], 65 | 40: this.randint(4110500686, 4310500686), 66 | 998: 4, 67 | 999: Math.floor(Date.now() / 1000), 68 | } 69 | } 70 | 71 | static randhex = size => [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('') 72 | static randint = (min, max) => Math.floor(Math.random() * (Math.floor(max) - Math.ceil(min) + 1)) + Math.ceil(min); 73 | static uuid = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 74 | var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 75 | return v.toString(16); 76 | }); 77 | }; 78 | 79 | // console.log(Device.getDevice()); -------------------------------------------------------------------------------- /lab/test.js: -------------------------------------------------------------------------------- 1 | askkkdsanxc( 2 | '


' 3 | ); 4 | $("#form1").submit(function (event) { 5 | event.preventDefault(); 6 | zxndnnndje( 7 | "7c2ad1c7=s&5d120245=tok_free&" + $("form[id='form1']").serialize() 8 | ); 9 | }); 10 | var id = "7211979658492005674"; 11 | function btnactionn() { 12 | var type = $(this).data("type"); 13 | if (typeof type === "undefined") { 14 | } else if (type === "com_op") { 15 | $.showModal({ 16 | title: "What you need?", 17 | body: '
 
', 18 | }); 19 | } else { 20 | zxndnnndje("5d120245=tok_free&7c2ad1c7=" + type + "&316bff84=" + id); 21 | } 22 | } 23 | $("button").click(btnactionn); 24 | try { 25 | throw new Error(); 26 | } catch (r) { 27 | -1 === r.stack.indexOf("freer.js") && client_log(["js_unk_source", r.stack]); 28 | } 29 | function check_res() { 30 | for (var e = new Date().getTime(), r = 0; r < 100; r++) 31 | (function () { }.constructor("debugger")()); 32 | return e - new Date().getTime(); 33 | } 34 | var rrr = check_res(); 35 | rrr < -1 && 36 | setTimeout(function () { 37 | var e = check_res(); 38 | e < -1 && 39 | (client_log("console " + e), 40 | askkkdsanxc("

Something went wrong.

Try again later.
")); 41 | }, 1e3); 42 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const { CryptoJS, CryptoJSAesJson } = require("./crypto.js"); 2 | const { getDevice } = require("./device.v2.js"); 3 | 4 | const navigator = { 5 | userAgent: `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36`, 6 | }; 7 | 8 | const localStorage = { 9 | i: CryptoJS.MD5(navigator.userAgent).toString().substr(5, 10), 10 | h: JSON.stringify({ v: "101" }), 11 | }; 12 | 13 | const format_s = (e) => { 14 | let t = parseInt(e.substr(-7, 1) + e.substr(6, 1)); 15 | e = e.substr(0, 6) + e.substr(7, e.length - 14) + e.substr(e.length - 6); 16 | 17 | var o = new RegExp("(.{" + e.length / t + "})", "g"); 18 | let a = e.replace(o, "$1|").split("|"); 19 | 20 | for (a.pop(); a[0].split("").length > 1;) 21 | for (let x = 0; x < a.length; x++) 22 | (a[x] = a[x].split("").reverse().join("")), 23 | (a[x] = atob(a[x])), 24 | (a[x] = a[x].replace("=", "")); 25 | 26 | return a.join(""); 27 | } 28 | 29 | const decrypt_resp = (response) => { 30 | json_resp = response //JSON.parse(response); 31 | json_resp.s = format_s(json_resp.s); 32 | 33 | decoded = CryptoJS.AES.decrypt(JSON.stringify(json_resp), localStorage.i, { 34 | format: CryptoJSAesJson}).toString(CryptoJS.enc.Utf8) 35 | 36 | return atob(JSON.parse(decoded)[0]) 37 | } 38 | 39 | const get_token = (payload) => { 40 | if (payload === void 0) return `ZA` 41 | 42 | return btoa(String.fromCharCode(CryptoJS.MD5(JSON.stringify(payload)).toString() 43 | .match(/\d+/g) 44 | .join('') 45 | .split('') 46 | .reduce((x, e) => parseInt(x) + parseInt(e), 0).toString()), 1) 47 | .replace(/=+$/, '') 48 | } 49 | 50 | 51 | let options = { 52 | method: 'POST', 53 | headers: { 54 | ...JSON.parse(localStorage.h), 55 | host: 'freer.es', 56 | connection: 'keep-alive', 57 | accept: '*/*', 58 | 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 59 | 'x-requested-with': 'XMLHttpRequest', 60 | 'sec-ch-ua-mobile': '?0', 61 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 62 | 'sec-ch-ua-platform': '"macOS"', 63 | origin: 'https://freer.es', 64 | 'sec-fetch-site': 'same-origin', 65 | 'sec-fetch-mode': 'cors', 66 | 'sec-fetch-dest': 'empty', 67 | 'accept-encoding': 'gzip, deflate, br', 68 | 'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8', 69 | } 70 | } 71 | 72 | fetch(`https://freer.es/v4.php?s=${get_token()}`, options) 73 | .then(res => res.json()) 74 | .then(json => { 75 | console.log(decrypt_resp(json)) 76 | }) 77 | .catch(err => console.error('error:' + err)); -------------------------------------------------------------------------------- /reversing/main.js: -------------------------------------------------------------------------------- 1 | var _0x2c63 = ["message", "

ERROR

", "AES", "abs", "hide", "323768FlgZCN", "2ZXZNQn", "#msg", "ajax", "751123CfOVxJ", "257804eNFZkl", "replace", "/error", "userAgent", "split", "
", "getElementById", "length", "835409FGATlr", "onkeydown", "getTime", "MD5", "show", "reverse", "654399YcmVFw", "/v4.php", "enc", '

Please update your browser or try a different one.


', "dvl", "keyCode", "Malformed UTF-8 data", "join", "1FDizCT", "onload", "toString", "data=", "POST", "Utf8", "9142HyysAr", "parse", "substr", "decrypt", "1390613NQfTzu", "ctrlKey", "statusText", "#loading", "25sEeaTn", "
"]; 2 | var wbpo = "//freer.es"; 3 | var _0x335255 = _0x54c9; 4 | (function(_0x392d56, _0xf3c54b) { 5 | var _0x644cc4 = _0x54c9; 6 | while (true) { 7 | try { 8 | var _0x159dc9 = parseInt(_0x644cc4(340)) * parseInt(_0x644cc4(339)) + -parseInt(_0x644cc4(343)) * parseInt(_0x644cc4(318)) + parseInt(_0x644cc4(344)) + parseInt(_0x644cc4(310)) + parseInt(_0x644cc4(304)) + parseInt(_0x644cc4(324)) * parseInt(_0x644cc4(332)) + -parseInt(_0x644cc4(328)); 9 | if (_0x159dc9 === _0xf3c54b) break; 10 | else _0x392d56.push(_0x392d56.shift()); 11 | } catch (_0x23bf3a) { 12 | _0x392d56.push(_0x392d56.shift()); 13 | } 14 | } 15 | }(_0x2c63, 481962)); 16 | 17 | function _0x54c9(_0x42aa88, _0x1be0c1) { 18 | return _0x54c9 = function(_0x2c6360, _0x54c9e3) { 19 | _0x2c6360 = _0x2c6360 - 299; 20 | var _0x4ec6c0 = _0x2c63[_0x2c6360]; 21 | return _0x4ec6c0; 22 | }, _0x54c9(_0x42aa88, _0x1be0c1); 23 | } 24 | 25 | function closest(_0x2e27a6, _0x384f9c) { 26 | var _0x32e167 = _0x54c9; 27 | for (var _0x4710f6 = _0x384f9c[0], _0x2d06b0 = Math[_0x32e167(337)](_0x2e27a6 - _0x4710f6), _0x23f580 = 0; _0x23f580 < _0x384f9c[_0x32e167(303)]; _0x23f580++) { 28 | var _0x34c6db = Math[_0x32e167(337)](_0x2e27a6 - _0x384f9c[_0x23f580]); 29 | _0x34c6db < _0x2d06b0 && (_0x2d06b0 = _0x34c6db, _0x4710f6 = _0x384f9c[_0x23f580]); 30 | } 31 | return _0x4710f6; 32 | }; 33 | 34 | function hsipdxdcej() { 35 | var _0x3818dd = _0x54c9; 36 | $(_0x3818dd(331))[_0x3818dd(338)](), $(_0x3818dd(341))[_0x3818dd(338)](); 37 | } 38 | 39 | function askkkdsanxc(_0x5b9380) { 40 | var _0xf04372 = _0x54c9; 41 | document[_0xf04372(302)]("msg").innerHTML = _0x5b9380, $(_0xf04372(341))[_0xf04372(308)](); 42 | } 43 | 44 | function revSt(_0x37ab47) { 45 | var _0x3b4ef3 = _0x54c9; 46 | return _0x37ab47[_0x3b4ef3(300)]("")[_0x3b4ef3(309)]()[_0x3b4ef3(317)](""); 47 | } 48 | 49 | function zxndnnndje(_0x421295) { 50 | var _0x398446 = _0x54c9; 51 | hsipdxdcej(), $(_0x398446(331))[_0x398446(308)](), $[_0x398446(342)]({ 52 | type: "POST", 53 | url: "//freer.es/v4.php", 54 | data: _0x421295, 55 | success: function(_0x4be8a2) { 56 | var _0x3a1381 = _0x398446; 57 | hsipdxdcej(); 58 | try { 59 | var _0x218bef = JSON[_0x3a1381(325)](CryptoJS[_0x3a1381(336)][_0x3a1381(327)](revSt("}" + _0x4be8a2 + "{")[_0x3a1381(345)](/58290/g, ":")[_0x3a1381(345)](/90190/g, '"').replace(/56370/g, ","), CryptoJS[_0x3a1381(307)](navigator[_0x3a1381(299)]).toString()[_0x3a1381(326)](5, 10), { 60 | format: CryptoJSAesJson 61 | })[_0x3a1381(320)](CryptoJS[_0x3a1381(312)][_0x3a1381(323)])); 62 | _0x218bef && _0x218bef[0] && new Function(atob(_0x218bef[0]))(); 63 | } catch (_0x34ad79) { 64 | if (_0x34ad79[_0x3a1381(334)] == _0x3a1381(316)) askkkdsanxc(_0x3a1381(313)); 65 | else { 66 | var _0x1328f3 = JSON.stringify({ 67 | error: _0x34ad79[_0x3a1381(334)], 68 | post: _0x421295, 69 | response: _0x4be8a2 70 | }); 71 | askkkdsanxc('

Please try again later