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
// compile with: | |
// isildur cnot.c0 -l l4rt.h0 -o test.s --obfuscate --anti-debug --confuse | |
// gcc test.s obf.c -o cnot | |
// strip cnot | |
int t(int a) { | |
return (a >> 30) & 0x3; | |
} | |
int s(int a) { | |
return (a >> 25) & 0x1F; | |
} | |
int r(int a) { | |
return (a >> 20) & 0x1F; | |
} | |
int q(int a) { | |
return (a >> 15) & 0x1F; | |
} | |
int k(int a) { | |
return (a >> 10) & 0x1F; | |
} | |
int j(int a) { | |
return (a >> 5) & 0x1F; | |
} | |
int h(int a) { | |
return a & 0x1F; | |
} | |
int g(int f, int i) { | |
return (f >> i) & 1; | |
} | |
bool c1(int f, int a) { | |
int K = k(a); | |
int J = j(a); | |
int H = h(a); | |
return (g(f, K) & g(f, J) & g(f, H)) == 1; | |
} | |
bool c2(int f, int a) { | |
int Q = f >> ((a >> 15) & 0x1F); | |
int R = f >> ((a >> 20) & 0x1F); | |
int S = f >> ((a >> 25) & 0x1F); | |
int T = f >> ((a >> 30) & 0x3); | |
return (Q & R & S & T & 1) == 1; | |
} | |
int fib(int k) { | |
if (k == 0 || k == 1) return k; | |
int n = k / 2; | |
int f1 = fib(n); | |
int f2 = fib(n - 1); | |
if ((k & 1) == 0) { | |
return f1 * (f1 + 2 * f2); | |
} | |
else if ((k & 3) == 1) { | |
return (2 * f1 + f2) * (2 * f1 - f2) + 2; | |
} | |
return (2 * f1 + f2) * (2 * f1 - f2) - 2; | |
} | |
int add1(int f, int a) { | |
int K = k(a); | |
int J = j(a); | |
int H = h(a); | |
return f | (1 << K) | (1 << J) | (1 << H); | |
} | |
int add2(int f, int a) { | |
int Q = q(a); | |
int R = r(a); | |
int S = s(a); | |
int T = t(a); | |
return f | (1 << Q) | (1 << R) | (1 << S) | (1 << T); | |
} | |
int add3(int f, int a) { | |
int K = k(a); | |
int R = r(a); | |
int S = s(a); | |
int H = h(a); | |
return f | (1 << K) | (1 << R) | (1 << S) | (1 << H); | |
} | |
bool isLetter(int v) { | |
return ((65 <= v) && (v <= 90)) || ((97 <= v) && (v <= 122)); | |
} | |
bool isLowercase(int v) { | |
return ((97 <= v) && (v <= 122)); | |
} | |
bool isNumber(int v) { | |
return ((48 <= v) && (v <= 57)); | |
} | |
bool checkCharacterTypes(int[] arr) { | |
if (isLetter(arr[0]) && | |
isLetter(arr[1]) && | |
isLowercase(arr[2]) && | |
isLowercase(arr[3]) && | |
isLetter(arr[4]) && | |
!isLetter(arr[5]) && !isNumber(arr[5]) && | |
isLetter(arr[6]) && | |
!isLetter(arr[7]) && !isNumber(arr[7]) && | |
isNumber(arr[8]) && | |
isLowercase(arr[9]) && | |
arr[9] == arr[3] - 1 && | |
isLetter(arr[10]) && | |
isLetter(arr[11]) && | |
isLetter(arr[12]) && | |
isLetter(arr[13]) && !isLowercase(arr[13]) && | |
isLetter(arr[14]) && | |
isLetter(arr[15]) && | |
isLetter(arr[16]) && !isLowercase(arr[16]) && | |
isLetter(arr[17]) && | |
!isLetter(arr[18]) && !isNumber(arr[18]) && | |
isLetter(arr[19]) && | |
isLetter(arr[20]) && | |
!isLetter(arr[20]-1) && | |
isLetter(arr[21]) && | |
isLetter(arr[22]) && !isLowercase(arr[22]) && | |
!isLetter(arr[23]) && !isNumber(arr[23])) | |
return true; | |
return false; | |
} | |
bool checkOrder(int[] arr) { | |
if(arr[0] > arr[1]) | |
if(arr[1] > arr[2]) | |
if(arr[2] < arr[3]) | |
if(arr[3] > arr[4]) | |
if(arr[4] > arr[5]) | |
if(arr[5] < arr[6]) | |
if(arr[6] > arr[7]) | |
if(arr[7] < arr[8]) | |
if(arr[8] < arr[9]) | |
if(arr[9] < arr[10]) | |
if(arr[10] > arr[11]) | |
if(arr[11] < arr[12]) | |
if(arr[12] > arr[13]) | |
if(arr[13] < arr[14]) | |
if(arr[14] < arr[15]) | |
if(arr[15] > arr[16]) | |
if(arr[16] < arr[17]) | |
if(arr[17] > arr[18]) | |
if(arr[18] < arr[19]) | |
if(arr[19] > arr[20]) | |
if(arr[20] < arr[21]) | |
if(arr[21] > arr[22]) | |
if(arr[22] > arr[23]) | |
return true; | |
return false; | |
} | |
bool checkDuplicates(int[] arr) { | |
if(add3(0, arr[5]) == add3(0, arr[7])) | |
if(add1(0, arr[5]) == add1(0, arr[7])) | |
if(add3(0, arr[7]) == add3(0, arr[18])) | |
if(add1(0, arr[7]) == add1(0, arr[18])) | |
if(add1(0, arr[2]) == add1(0, arr[4]) && | |
add3(0, arr[2]) == add3(0, arr[4])) | |
if(add1(0, arr[11]) == add1(0, arr[2]) && | |
add3(0, arr[11]) == add3(0, arr[4])) | |
if(add1(0, arr[13]) == add1(0, arr[16]) && | |
add3(0, arr[13]) == add3(0, arr[16])) | |
if(add1(0, arr[15]) == add1(0, arr[17]) && | |
add3(0, arr[15]) == add3(0, arr[17])) | |
if(add1(0, arr[12]) == add1(0, arr[12]) && | |
add3(0, arr[19]) == add3(0, arr[19])) | |
if(add1(0, arr[6]) == add1(0, arr[10]) && add3(0, arr[6]) == add3(0, arr[10])) | |
return true; | |
return false; | |
} | |
// key: where u 3quenTisTs naoW? | |
int main() { | |
int[] arr = alloc_array(int, 80); | |
int[] arr2 = alloc_array(int, 80); | |
int[] arr3 = alloc_array(int, 80); | |
int q = 1; | |
int i = 0; | |
printchar(80); printchar(108); printchar(101); printchar(97); | |
printchar(115); printchar(101); printchar(32); printchar(101); | |
printchar(110); printchar(116); printchar(101); printchar(114); | |
printchar(32); printchar(121); printchar(111); printchar(117); | |
printchar(114); printchar(32); printchar(112); printchar(97); | |
printchar(115); printchar(115); printchar(119); printchar(111); | |
printchar(114); printchar(100); printchar(58); printchar(32); | |
while (q > 0 && !eof()) { | |
q = readchar(); | |
if (q == 10) break; | |
if (q < 32 || q > 127) break; | |
arr[i] = q; | |
i++; | |
if (i >= 80) | |
break; | |
} | |
for (i = 0; i < 80; i++) { | |
arr2[i] = arr[i]; | |
arr[i] = fib(arr[i]); | |
arr3[i] = fib(i+1) * arr2[i]; | |
} | |
int a1; int a2; int a3; int a4; a1 = 0; a2 = 0; a3 = 0; a4 = 0; | |
for (i = 0; i < 80; i++) { | |
if (arr[i] == 0) break; | |
a1 = add1(a1, arr[i]); a2 = add2(a2, arr[i]); | |
a3 = add1(a3, arr3[i]); a4 = add2(a4, arr3[i]); | |
} | |
bool r = false; | |
int l = 0; | |
for (i = 0; i < 80; i++) arr[i] = arr2[i]; | |
for (l = 0; l < 80 && arr[l] != 0; l++) { } | |
if (l == 24) { | |
if (checkCharacterTypes(arr)) { | |
if (a3 == -84412929 && a4 == 171971103) { | |
if (a1 == -8914954 && a2 == -39944353) { | |
if(checkOrder(arr)) | |
if(add1(0,arr[23]) == -2147483645 && add2(0,arr[23]) == 1) | |
if(checkDuplicates(arr)) | |
if(add1(arr[0],arr[0]) != add3(arr[0],arr[0]) && | |
add1(arr[0]+1,arr[0]+1) == add3(arr[0]+1,arr[0]+1) && | |
arr[0] > 104) | |
if(add1(arr[1],arr[1]) == add3(arr[1],arr[1]) && | |
add1(arr[1]-32,arr[1]-32) != add3(arr[1]-32,arr[1]-32) && | |
arr[1] < 105 && arr[1] > 100) | |
if(add1(arr[14],arr[14]) == add3(arr[14],arr[14]) && | |
add1(arr[14]-32,arr[14]-32) != add3(arr[14]-32,arr[14]-32) && | |
arr[14] < 110 && arr[14] > 100) | |
if(add1(arr[6],arr[6]) != add3(arr[6],arr[6]) && | |
add1(arr[6]-32,arr[6]-32) == add3(arr[6]-32,arr[6]-32) && | |
arr[6] > 116) | |
if(add1(arr[2]-32,arr[2]-32) == 101 && | |
add3(arr[2]-32,arr[2]-32) == 101) | |
if(add1(0,arr[19]) == 16393 && | |
add3(0,arr[19]) == 16385 && arr[12] == arr[19]) { | |
r = true; | |
} | |
} | |
} | |
} | |
} | |
if (!r) { | |
printchar(87); printchar(114); printchar(111); | |
printchar(110); printchar(103); printchar(33); printchar(10); | |
exit(0); | |
} | |
printchar(67); | |
printchar(111); printchar(114); printchar(114); printchar(101); | |
printchar(99); printchar(116); printchar(33); printchar(10); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment