/* decode_stub.c - Don Yang (uguu.org) 08/09/12 */ #include static void Decode(char *data, int *total_size) { char *r, *w; unsigned int buffer, buffer_size; buffer = buffer_size = 0; *total_size = 0; for(r = w = data; *r > '%'; r++) { buffer = buffer * 85 + (83 + *r) % 89; buffer_size++; if( buffer_size == 5 ) { /* XOR with ISAAC here */ while( --buffer_size > 0 ) { *w++ = buffer & 0xff; buffer >>= 8; } *total_size += 4; } } *total_size -= *r % 5; } int main(void) { char data[] = "oHbR&qdEE6~VdPj_iTJ6$"; int total_size; Decode(data, &total_size); fwrite(data, total_size, 1, stdout); return 0; }