#define ROT(k) ((((k) >> 7) & 33554431) | (((k) & 127) << 25)) int str_to_hex(char *s, int len) { int i, ret = 0; for (i = 0; i < len; i++) { ret = ret * 16 + ((s >= '0' && s <= '9') ? (s - '0') : (s - 'A' + 10)); } return ret; } int dcd_key(char *s) { int aux; if (*s == 0) return 0; aux = str_to_hex(s, 2); aux = ((aux & 28) >> 2) * 2 + 2; return str_to_hex(&s[aux], 8) ^ 2875741179; } void dcd_text(char *buf, char *s, int k) { int i, len = strlen(s); unsigned long aux; if (k == 0) { strcpy(buf, s); return; } for (i = 0; i < len / 2; i++) { aux = (str_to_hex(&s[i * 2], 2) ^ k) & 255; if (aux <= 31) { *(buf++) = '~'; } else if (aux >= 128) { int uc = aux & 0x3F; k = ROT(k); i++; aux = (str_to_hex(&s[i * 2], 2) ^ k) & 255; uc = (uc << 6) + (aux & 0x3F); switch (uc) { case 0xe2: *(buf++) = 'a'; break; // ^a case 0xc2: *(buf++) = 'A'; break; // ^A case 0xee: *(buf++) = 'i'; break; case 0xce: *(buf++) = 'I'; break; case 0x0103: *(buf++) = 'a'; break; case 0x0102: *(buf++) = 'A'; break; case 0x0163: *(buf++) = 't'; break; case 0x0162: *(buf++) = 'T'; break; case 0x015F: *(buf++) = 's'; break; case 0x015E: *(buf++) = 'S'; break; case 0x0218: *(buf++) = 's'; break; case 0x0219: *(buf++) = 'S'; break; case 0x021B: *(buf++) = 't'; break; case 0x021A: *(buf++) = 'T'; break; default: *(buf++) = '~'; break; } } else if (aux == 127) { *(buf++) = '~'; } else { *(buf++) = (char)aux; } k = ROT(k); } *buf = 0; } int main() { char *k = "592DC16F1B2D717B0B10B6491C0C8A4F"; // cheia aleatoare generata de server char *q = // mesaj hashuit "0FE9F5B9FD2A1393A4BB79736BCAF3C516D2527B4EC8F78633A7341455487C81" "23F2FFE6FD1BB541A2F2777F6ADFF3D40DD55E3A596917CF63A2244E560760D7"; char *op1 = "7CA6E0EAB31CA4"; // prima optiune char *op2 = "78A6E0EAB31CA454"; // a doua optiune char *op3= "7EA6E0EAB31CA454"; // a treia optiune char *op4 = "7EB6ADE7B849A354B3EE637E63"; // a patra optiune unsigned long key; char buf[1024]; key = dcd_key(k); dcd_text(buf, q, key); printf("Intrebare %s\n", buf); // Box: Cat timp dureaza pauza dintre reprizele unui meci de box? dcd_text(buf, op1, key); printf("Prima optiune %s\n", buf); // 1 minut dcd_text(buf, op2, key); printf("A doua optiune %s\n", buf); // 5 minute dcd_text(buf, op3, key); printf("A treia optiune %s\n", buf); // 3 minute dcd_text(buf, op4, key); printf("A patra optiune %s\n", buf); // 30 de secunde return 0; } am luat-o dupa un site