Again, we are performing more (albeit straightforward) checks on the input.
Using claripy, we specify our flag to be a bitvector with 37 characters. Using angr, we specify the base address of the binary to be 0, and we want to find the address 0x1286 which is the address of puts("Congratulations !"), and we avoid the addresses 0x1848 and 0x1837 which are the addresses of puts("Bruh : ( "). We then get the simulation manager to explore the program and find the flag.
import angrimport sysimport claripyinput_file_path='./angry_patched_skill_issues'flag_length=37known_string='L3AK{'FIND_ADDR=0x1826AVOID_ADDR=[0x1848,0x1837]proj=angr.Project(input_file_path,main_opts={'base_addr':0x00})known_chars=[claripy.BVV((known_string[i]))for i inrange(len(known_string))]flag_chars=[claripy.BVS(f"flag_{i}",8)for i inrange(flag_length-len(known_string))]flag=claripy.Concat(*known_chars+flag_chars + [claripy.BVV(b'\n')])state = proj.factory.entry_state(args=[input_file_path], stdin=flag)# state=proj.factory.full_init_state(args=[input_file_path,flag])# state = proj.factory.full_init_state(stdin=flag)sim_manager=proj.factory.simulation_manager(state)sim_manager.explore(find=FIND_ADDR,avoid=AVOID_ADDR)if(len(sim_manager.found)>0):print(sim_manager.found[0].solver.eval(flag,cast_to=bytes))# L3AK{angr_4_l1f3_d0nt_do_it_m4nU4lly}