Created
September 18, 2022 01:31
-
-
Save MinecraftFuns/44173a642b4886c86a2f4198f02c20a2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
/* | |
class lfsr(): | |
def __init__(self, seed, mask, length): | |
self.length_mask = 2 ** length - 1 | |
self.mask = mask & self.length_mask | |
self.state = seed & self.length_mask | |
print(self.state, self.mask) | |
def next(self): | |
next_state = (self.state << 1) & self.length_mask | |
output = count_one(self.state & self.mask & self.length_mask) | |
next_state ^= output # 最低位为 0,相当于 | | |
self.state = next_state | |
return output | |
def getrandbit(self, nbit): | |
output = 0 | |
for _ in range(nbit): | |
output = (output << 1) ^ self.next() | |
return output | |
*/ | |
void decrypt(const uint32_t &mask) | |
{ | |
vector<uint32_t> codes = {205, | |
197, | |
241, | |
3, | |
18, | |
128, | |
36, | |
253, | |
5, | |
200, | |
170, | |
131, | |
25, | |
71, | |
9, | |
196, | |
164, | |
161, | |
9, | |
0, | |
7, | |
123, | |
149, | |
121, | |
32, | |
122, | |
149, | |
131, | |
170, | |
252, | |
189, | |
68, | |
162, | |
164, | |
153, | |
67}; | |
uint32_t state = (249u << 24) | (16u << 16) | (69u << 8) | (218u); | |
for (const auto &code : codes) | |
{ | |
// cout << code; | |
uint32_t num = 0u; | |
for (int j = 0; j < 8; ++j) | |
{ | |
uint32_t next_state = state << 1, output = popcount(state & mask) & 1; | |
next_state ^= output; | |
state = next_state; | |
num <<= 1; | |
num ^= output; | |
} | |
auto c = code ^ num; | |
if (isalnum(c) || c == '{' || c == '}') | |
{ | |
// cout << c << endl; | |
cout << (char)(c); | |
} | |
} | |
cout << endl; | |
} | |
int main() | |
{ | |
uint32_t array[3] = {153u, 131u, 138u}; | |
for (uint32_t mask = 0; mask < numeric_limits<uint32_t>::max(); ++mask) | |
{ | |
uint32_t state = (249u << 24) | (16u << 16) | (69u << 8) | (218u); | |
bool flag = true; | |
uint32_t num; | |
for (int i = 0; i < 3 && flag; ++i) | |
{ | |
num = 0u; | |
for (int j = 0; j < 8; ++j) | |
{ | |
uint32_t next_state = state << 1, output = popcount(state & mask) & 1; | |
next_state ^= output; | |
state = next_state; | |
num <<= 1; | |
num ^= output; | |
} | |
if (num != array[i]) | |
{ | |
flag = false; | |
} | |
} | |
if (flag) | |
{ | |
for (int i = 3; i < 36; ++i) | |
{ | |
num = 0u; | |
for (int j = 0; j < 8; ++j) | |
{ | |
uint32_t next_state = state << 1, output = popcount(state & mask) & 1; | |
next_state ^= output; | |
state = next_state; | |
num <<= 1; | |
num ^= output; | |
} | |
} | |
if (num == 62u) | |
{ | |
cout << mask << endl; | |
} | |
} | |
} | |
vector<uint32_t> masks = {2226048585}; | |
for (const auto &mask : masks) | |
{ | |
decrypt(mask); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment