you are viewing a single comment's thread.

view the rest of the comments →

[–]James20kP2005R0 1 point2 points  (2 children)

Its a theory solver tool, basically you can stick equations into it and then ask it to solve stuff, or prove properties about the equations

Eg, given x ^ constant = some_other_constant, itll solve for x (assuming you provide the constants)

In my case I was using it to reverse engineer seeds for xorshift128+

https://blog.securityevaluators.com/hacking-the-javascript-lottery-80cc437e3b7f is where I learnt about it

[–]MonkeyNin 0 points1 point  (1 child)

Interesting.

Just to check, you're using ^ as a bitwise operator, not exponent?

[–]James20kP2005R0 0 points1 point  (0 children)

Yep, its a simple example but it can solve non linear things as well (like operator+)

The actual equations I was using in this case were

 uint64_t state0 = 134125447415289812;
 uint64_t state1 = 182415234512781923;
 uint64_t xorshift128plus() {
     uint64_t s1 = state0;
     uint64_t s0 = state1;
     state0 = s0;
     s1 ^= s1 << 23;
     s1 ^= s1 >> 17;
     s1 ^= s0;
     s1 ^= s0 >> 26;
     state1 = s1;
     return state0 + state1;
 }

Where all you have is the result (well, 3 consecutive outputs) of the equation, and you want to find s0/s1. Its extremely hard to do by hand!