68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
} |