#include typedef unsigned int uint; typedef unsigned char byte; void decode(uint *buffer,int len,uint *buffer2) { int iVar1; uint *puVar2; uint local_10c [64]; int i; iVar1 = 0x42; puVar2 = local_10c; while (iVar1 != 0) { iVar1 = iVar1 + -1; *puVar2 = 0xcccccccc; puVar2 = puVar2 + 1; } i = 0; local_10c[58] = *buffer; local_10c[55] = *buffer; local_10c[52] = *buffer; local_10c[49] = *buffer; do { local_10c[58] = local_10c[58] + 0xeeeeeeef + (local_10c[58] >> 3); local_10c[55] = local_10c[55] + 0xddddddde + (local_10c[55] >> 5); local_10c[52] = local_10c[52] * -0x7f + 0x33333333; local_10c[49] = local_10c[49] * -0x1ff + 0x44444444; *(byte *)((int)buffer2 + i) = *(byte *)((int)buffer + i) ^ (char)local_10c[58] + (char)local_10c[55] + (char)local_10c[52] + (char)local_10c[49]; i = i + 1; } while (i < len); return; } int main(int argc, char *argv[]) { int len = atoi(argv[1]); unsigned char* buffer = malloc(len); unsigned char* buffer2 = malloc(len); read(0,buffer,len); decode(buffer,len,buffer2); write(1,buffer2,len); return 0; }