4 ms·
JSNice[0] often does a good job deobfuscating js, the statistical renaming isn't foolproof but often useful. With it I get https://ghostbin.me/62d52999cc217 ht
by kekebo 4y ago
JSNice[0] often does a good job deobfuscating js, the statistical renaming isn't foolproof but often useful.
With it I get https://ghostbin.me/62d52999cc217 https://ghostbin.me/62d52999cc217 , from there it's decoding UTF-16 and at least one more decoding step (parts of decoded UTF-16 are mangled) to get the string j and the function o and resolving the original function with it.
[0] http://jsnice.org/ http://jsnice.org/
- vitus 4y agoEven easier: open up Chrome DevTools, add a breakpoint at the eval, step into function. Repeat a couple of times. Comment at the top also points to https://freeslots.com/libs/mersenne-twister.js https://freeslots.com/libs/mersenne-twister.js Using those two together to decode the RNG function, and searching around for some more local pointers (with some judicious renaming of functions for legibility, and some comments): // polyfill for IE?? function trunc(a) { return a < 0 ? Math.ceil(a) : Math.floor(a) } var genrand_res53 = function() { var a = new MersenneTwister((new Date).getTime() + Math.floor(Math.random() * Math.pow(2, 32))); return function() { // Generate a random float by varying the 53-bit mantissa. var b = genrand_int32(a) >>> 5, c = genrand_int32(a) >>> 6; // (b << 26 | c) / 2 ** 53 return (b * 67108864 + c) * 1.1102230246251565E-16 } }(); function rand_int(a, b) { var c = genrand_res53(); if (a === undefined) return c; if (b === undefined) return trunc(c * a); if (b > a) return a + trunc(c * (b - a)); return a; } function Kma() { // credits is `Lma`; if you want to cheat, you can edit that variable directly credits < 500 && (Ika = Ika - Ika % 1E6 + rand_int(890001) + 1E5) } So, we're generating a random integer from 0 to 890,000 (inclusive, with negligible chance of generating 890001) with each spin, and using that to update the state (seeded with current time; the top 1e6 of the value is determined via mixing of Date.now() and Math.random() and is fixed for a given session). There's then more to determine whether your state is a winner (based on the game mode), but I didn't feel like looking into that specifically.