[Link to original writeup](https://github.com/babaiserror/ctf/tree/main/%5B210723-27%5D%20ImaginaryCTF%202021/It's%20Not%20Pwn%2C%20I%20Swear!)
The key thing is to realize that the `__stack_chk_failed` in `vuln` is not the actual `__stack_chk_failed` that is called when the canary is overwritten.
Reversing that function, and with some modular arithmetic we can get our desired input that will make the binary spit out the flag.