/* anri0.c - Don Yang (uguu.org) 07/14/10 */ #include #include #define XOR_KEY 24 #define F_NEWLINE ((int)'!') #define F_TOGGLE_EYE_CODE ((int)'*') #define F_TOGGLE_EYE_OUTPUT (F_TOGGLE_EYE_CODE + 1) #define F_EYE_MIN (F_NEWLINE + 2) #define F_EYE_MAX (F_TOGGLE_EYE_CODE - 1) #define F_SPACE_MIN (F_EYE_MAX + 3) #define F_SPACE_MAX ((int)'\\' - 1) #define F_CHAR_MIN (F_SPACE_MAX + 2) #define F_CHAR_MAX ((int)'~') static char *f, /* Pointer to format */ *e, /* End of format string */ *i, /* Pointer to input */ *o, /* Pointer to output */ data[0x10000] = #include"data.txt" , format[0x10000] = #include"template.txt" , input[0x10000], output[0x10000]; static int x, toggle_eye, toggle_quote, leading_non_whitepaces; /* Remove whitespace, apply XOR, and append to buffer */ static void Append(char *p, int xor) { for(; *p != '\0'; p++) { if( (int)*p == F_TOGGLE_EYE_OUTPUT ) { for(p++; (int)*p != F_TOGGLE_EYE_OUTPUT; p++); } else { if( (int)*p > (int)' ' ) { *i++ = (char)((int)(*p) ^ xor); } } } } int main() { /* Prepare output code */ i = input; Append("#include" "#include" "char*f,*e,*i,*o,data[0x10000]=\"", 0); Append(data, 0); Append("\",format[0x10000]=\"", 0); f = i; Append(format, 0); e = i; Append(data, XOR_KEY); /* First 2 characters of output buffer = random printable bytes. These will become the "eyes". */ x = time(NULL) & 0x3ff; o = output; *o++ = (char)(((x & 0x1f) + 61) ^ 1); *o++ = (char)(((x >> 5) + 61) ^ 1); /* Iterate until format template has been exhausted */ i = input; toggle_eye = toggle_quote = leading_non_whitepaces = 0; for(; f != e; f++) { x = (int)*f; if( x >= F_CHAR_MIN ) { /* Data */ for(x -= F_CHAR_MIN; x >= 0; x--) { if( toggle_quote != 0 && ((x == 0 && f[1] == F_NEWLINE) || (x == ((int)*f) - F_CHAR_MIN && leading_non_whitepaces)) ) { *o++ = '\"'; } else { if( *i == '\"' ) toggle_quote ^= 1; *o++ = *i++; } } leading_non_whitepaces = 0; } else if( x >= F_SPACE_MIN ) { /* Whitespace */ for(x -= F_SPACE_MIN; x >= 0; x--) *o++ = ' '; } else if( x == F_TOGGLE_EYE_CODE ) { /* Toggle eye */ *o++ = F_TOGGLE_EYE_OUTPUT; } else if( x >= F_EYE_MIN ) { /* Eye */ for(x -= F_EYE_MIN; x >= 0; x--) *o++ = output[(toggle_eye++ & 1)]; } else { /* Newline */ *o++ = '\n'; leading_non_whitepaces = 1; } } *o = '\0'; return puts(output + 2); }