Tags: reverse 

Rating: 3.7

```
array[] = {0x0a,0x0d,0x06,0x1c,0x22,0x38,0x18,0x26,0x36,0x0f,0x39,0x2b,0x1c,0x59,0x42,0x2c,0x36,0x1a,0x2c,0x26,0x1c,0x17,0x2d,0x39,0x57,0x43,0x01,0x07,0x2b,0x38,0x09,0x07,0x1a,0x01,0x17,0x13,0x13,0x17,0x2d,0x39,0x0a,0x0d,0x06,0x46,0x5c,0x7d} // rdi register points this array at 0x004000b2

// algorithm is something like this
flag = x[0] xor x[1] = array[0]
flag = x[1] xor x[2] = array[1]
flag = x[2] xor x[3] = array[2]
flag = x[3] xor x[4] = array[3]
....
flag = x[x] xor x[x+1] = array[x]
```

```
#include <stdio.h>
//irGeeks
int main() {
char x[] = {0x0a,0x0d,0x06,0x1c,0x22,0x38,0x18,0x26,0x36,0x0f,0x39,0x2b,0x1c,0x59,0x42,0x2c,0x36,0x1a,0x2c,0x26,0x1c,0x17,0x2d,0x39,0x57,0x43,0x01,0x07,0x2b,0x38,0x09,0x07,0x1a,0x01,0x17,0x13,0x13,0x17,0x2d,0x39,0x0a,0x0d,0x06,0x46,0x5c,0x7d};
char z[0x2f];
z[0] = 'f';
z[1] = 'l';
z[2] = 'a';
z[0x2e] = 0;
for (int i = 0; i < 0x2e; i++) {
for (int y = 0; y < 255; y++) {
if ((z[i] ^ y) == x[i]) {
z[i+1] = y;
}
}
}
printf("%s",z); // flag{Yay_if_th1s_is_yer_f1rst_gnisrever_flag!}
return 0;
}
//Sajjad
```

Original writeup (https://github.com/SajjadPourali/CTF/blob/master/Hack.lu%20CTF%202018/BabyReverse.c).