Created
April 24, 2013 04:26
-
-
Save iagox86/5449611 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
// 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