Files
CTF/HTB/challenges/reversing/Simple Encryptor/rev_simpleencryptor/ape.c
Simon 82b0759f1e init htb
old htb folders
2023-08-29 21:53:22 +02:00

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;
}