The title of the challenge, angrme was a big clue as to what is expected: use the angr framework to solve it!

Running the binary with some random input makes it print :(. A quick look at the binary in IDA shows a lot of comparisons; if any of them fails, it will output :(, and if they are all successful, it will output :). So, we need to tell angr to symbolically execute until it reaches the basic block which outputs :).

Solve:

import angr

proj = angr.Project("angrme")
simgr = proj.factory.simgr()
simgr.explore(find=lambda s: b":)" in s.posix.dumps(1))
s = simgr.found[0]
print(s.posix.dumps(0))

Flag: b'hxp{4nd_n0w_f0r_s0m3_r3al_ch4ll3ng3}'