in reversing/SOMBRERO_ROJO/ctf_main/main.c [207:301]
void __attribute__ ((constructor)) premain()
{
#ifdef DEBUG
char b64_flag_enc[] = "\xa9\x90\x83\xb9\xa9\xc8\x88\xc8\x9a\xbf\xaa\xc8\xa3\xca\x98\xcb\x98\xc9\xcf\xc8\xa3\xca\xb6\x8c\xa3\xcb\x9c\xcb\xae\x96\xa9\xc2";
int b64_flag_enc_size = 32;
char b64_flag_dec[] = "\x9d\x99\x80\xcc\x93\xcf\xcc\xa4\xac\xcf\x88\x95\xcc\xa4\xa8\xcb\xa4\xb3\xcf\xa9\x9f\x86";
int b64_flag_dec_size = 22;
pretty_print_bytes(b64_flag_enc, b64_flag_enc_size );
printf("%s\n",b64_flag_enc );
pretty_print_bytes(b64_flag_dec, b64_flag_dec_size );
printf("%s\n",b64_flag_dec );
#else
char b64_flag_enc[] = "\xa9\x90\x83\xb9\xa9\xc8\x88\xc8\x9a\xbf\xaa\xc8\xa3\xca\x98\xcb\x98\xc9\xcf\xc8\xa3\xca\xb6\x8c\xa3\xcb\x9c\xcb\xae\x96\xa9\xc2";
int b64_flag_enc_size = 32;
char b64_flag_dec[] = "\x9d\x99\x80\xcc\x93\xcf\xcc\xa4\xac\xcf\x88\x95\xcc\xa4\xa8\xcb\xa4\xb3\xcf\xa9\x9f\x86";
int b64_flag_dec_size = 22;
#endif
unsigned char *tkek;
char dec_buffer_ascii[256];
char *mypath;
// Checking for a debugger
if (ptrace(PTRACE_TRACEME, 0, 1, 0) != -1)
{
char file[] = "\xd4\x8f\x96\x8b\xd4\x90\x9e\x82\xd5\x99\x92\x95"; // XOR key is 0xfb - /tmp/key.bin
int counter = 0;
while (counter < strlen(file))
{
file[counter] = file[counter] ^ 0xfb;
counter++;
}
if( access( file, F_OK ) != -1 ) {
// Format of key file:
// 0x00: 0xFB - Facebook :)
// 0x01: Length of key
// 0x02: Decryption Key
FILE *fp;
char buff[255];
fp = fopen(file, "r");
fgets(buff, 255, (FILE*)fp);
fclose(fp);
if (buff[0] == 0xfffffffb) {
if (buff[2] == 0xffffff95) {
if (buff[3] == 0x17) {
if (buff[4] == 0xffffff90) {
if (buff[5] == 0xfffffff4) {
char key[5];
key[0] = buff[5];
key[1] = buff[4];
key[2] = buff[3];
key[3] = buff[2];
char encrypted[255] = "\xa6\xfb\x6f\xd7\xa6\xa3\x64\xa6\x95\xd4\x46\xa6\xac\xa1\x74\xa5\x97\xa2\x23\xa6\xac\xa1\x5a\xe2\xac\xa0\x70\xa5\xa1\xfd\x45\xac\xfe";
// XOR Key: 0x4f 0x90 0x17 0x95
char *s = encrypted;
size_t length = strlen(key), i = 0;
while (*s) {
*s++ ^= key[i++ % length];
}
#ifdef DEBUG
printf("\nDebug no questions asked\n");
pretty_print_bytes(s, strlen(s));
pretty_print_bytes(encrypted, 32);
printf("\n");
fb_decode(b64_flag_dec,b64_flag_dec_size );
#else
fb_decode(b64_flag_dec,b64_flag_dec_size );
printf(b64_flag_dec);
char nex_chall [] = "\xa9\x9e\x9a\x9f\x82\xdb\x9d\x94\x89\xdb\x8f\x93\x9e\xdb\x95\x9e\x83\x8f\xdb\x98\x93\x9a\x97\x97\x9e\x95\x9c\x9e\xc4\xd5\xd5\xd5\xdb\x8b\x89\x9e\x88\x88\xdb\x9e\x95\x8f\x9e\x89\00";
int nex_chall_size = 44;
fb_decode(nex_chall, nex_chall_size);
printf("\n");
printf("%s", nex_chall);
gets();
#endif
fb_decode(b64_flag_enc,b64_flag_enc_size );
tkek = gen_kek_key(b64_flag_enc, b64_flag_dec);
mypath = where_ami();
get_appended(mypath, tkek);
exit(0);
}
}
}
}
}
}
}
}