Rating:

# Auto Bot

In this challenge, we're given a service `nc pwn.byteband.it 6000`.

The service provides us with a base64-encoded ELF file, the executable takes input, runs some processing on it, and compares it to a certain string, if they match, the service gives us another elf, else it prints `wrong password, lol` x)

After looking into the elf with `ghidra`, i realised how it works, it takes the input string and compares it to a fixed string, the comparison happens by comparing bytes in a certain order using an array of defined integers, for ex, the array is `[0x1, 0xf, 0x1b, 0x0a]`, the comparison goes by comparing the `input[0x1] to fixed_string[0]` then `input[0xf] to fixed_string[1]` and so on, so we just need to get the array and the static string, reconstruct the password and send it to the service.

I don't have good knowledge when it comes to ELF file structure, so i worked out of the usual for this one i think. so to get the `fixed_string`, i took a look at the binary of the ELF file, and i noticed that the `fixed_string` is in a pattern in the file, the pattern is `...\x00\x00fixed_string\x00Wrong pass...`, which means that by splitting the ELF file at `\x00Wrong pass` and splitting the first half at each `\x00`, we can get the `fixed_string` as it's gonna be the last element of the split result, as for the array on integers, i noticed in ghidra that the binary code for each array assignment falls into this pattern
`r'c7[8|4]5..f?f?f?f?f?f?(..)000000'`(everything in hex), so by grabbing all these patterns from the binary, it'll yield the array elements in order, and that's it. So each time you get an ELF file, you get grab the `fixed_string`, grab the array, reconstruct the password and send it to the service, repeat this until it sends the flag

```
flag{0pt1mus_pr1m3_has_chosen_you}
```

Original writeup (https://github.com/Qtty/ByteBanditCTF-2020/tree/master/autobot).