#include #include int encrypt(char a, int r1, int r2){ int t; r1 = r1 & 0xff; r2 = r2 & 7; printf("encrypt(%x, %x, %x)\n",a,r1,r2); t = a ^ r1; printf("t: %x\n",t); return ((t << r2)|(t >> (8-r2))); } int decrypt(int a, int r1, int r2){ int t; r1 = r1 & 0xff; r2 = r2 & 7; a = a&0xff; // printf("decrypt(%x, %x, %x)\n",a,r1,r2); t = ((a << (8-r2))|(a >>r2)) & 0xff; // printf("t: %x\n",t); return t ^ r1; } int main(void) { uint seed; int r1,r2, enc, dec; FILE *enc_file; size_t size; // seed = 0x63d17786; // srand(seed); // r1 = rand(); // r2 = rand(); // //printf("%x", r); enc_file = fopen("flag.enc.bak","rb"); fseek(enc_file,0L,SEEK_END); size = ftell(enc_file)-4; char buffer[size+1]; printf("size: %x\n", size); fseek(enc_file,0L,SEEK_SET); fread(&seed, 4, 1, enc_file); srand(seed); printf("seed: %x\n", seed); // buffer = malloc(2); // fseek(enc_file, 0, SEEK_END); // size = ftell(enc_file); // fseek(enc_file, sizeof(seed), SEEK_SET); // fread(buffer, 1, 1, enc_file); fread(&buffer, size, 1, enc_file); fclose(enc_file); printf("buffer: "); for (int i = 0; i < size; i++){ printf("%2x",buffer[i]&0xff); } printf("\n"); for (int i = 0; i < size; i++){ r1 = rand(); r2 = rand(); // // enc = encrypt('A',r1,r2); // // printf("enc: %x\n", enc); dec = decrypt(buffer[i],r1,r2); printf("%c", dec); } return 0; }