"Why do all rev challenges have to be boring flag checkers these days? Note: This challenge has the same binary as boring-flag-runner" Category: re (600 points) Chall author: willwam845 Writeup author: malfurious Setup ----- As mentioned by the problem description, this problem includes the same binary as the boring-flag-runner challenge. RE from that problem revealed the binary to be a brainfuck interpreter. It reads brainfuck programs encoded in a custom binary format. See the writeup on that problem for more details. Also included in this problem is a suitable binary-brainfuck program for the boring flag runner. When you run it, it asks you for the flag, then tells you whether you got it right - a standard flag checker. I converted this file to an ASCII text brainfuck program using some simple tooling written for the other problem. See Appendix A for this program. RE -- In order to reverse engineer the brainfuck flag checker, I developed a fairly featureful debugger, which now has a home in this repository at tools/brainfuck/bf_debug.py. This can be used as a somewhat normal interpreter by running the program from the start without setting any breakpoints. Just remember to seed the program's text input before starting (it's not interactive as of this writing). The program starts by building and outputting the flag prompt string. During this time, the first two memory locations are also set to 1. Next, the flag is read from stdin, into memory starting at address 3 (fourth memory location). Reading continues until a NULL character is read. At this point, some processing on the input begins. The head is moved left to locate the beginning of the string (there is a NULL byte just before the start of the flag in memory), and several passes are made over the flag data subtracting fixed values from specific positions in the flag string. Next, a buffer is generated in memory at a fixed memory location (actually, a fixed offset from the start of the user's flag). Each value in this buffer is subtracted from each corresponding value in the user's flag. This buffer is also our clue for the correct length of the flag to input - there should be just enough space for it before the start of this calculated buffer. There is a little more processing on the flag. However, I didn't fully trace all of it out. I did make the key observation that the only modification made to the user's flag is to decrement character byte values. Keep this in mind for later. At the end of flag processing, the head is moved back to the beginning of the flag in memory. The program scans the data that has resulted from processing to ensure that only NULL bytes remain. If any non-zero byte is encountered in the scanned space, the head moves back to address 1 and clears that flag. The scan also zeroes out memory as it goes. If the value at address 1 is non-zero at the end, the string "Congratulations! You got it!" is displayed. Solution -------- After making the discoveries made during RE, I decided to attempt to leak the correct flag by feeding the program a string of all FF bytes of the correct length. Such a flag does not validate properly, but leaves the user input memory at the end of processing full of delta values. Processing _should have_ reduced these bytes to zero, so to calculate the correct flag, I just need to subtract the remaining data from the original 'all FF' string I started with. See Appendix B for a small script I used to perform this calculation. We are left with: rarctf{1_h0p3_y0u-3njoy3d_my-Br41nF$&k_r3v!_d387171751} ================================================================================ = Appendix A: prog.bf = ================================================================================ +>+>>++++[++++>---<]>++.-[--->+<]>++.++++++.+++[->+++<]>.+++++++++++++.[-->+++++ <]>+++.---[->++++<]>.------------.---.--[--->+<]>-.++[->+++<]>.++++++.---------- -.++++++.+[->+++<]>++.[-->+<]>+++.[-]<<<<<<<<<+,[>,]+++++[<]>[[->>]]<<[[-<]]++++ +++[[---->>]]<<[[<---]]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[ -]+++++++++++++++[-<-------->]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<-<++++++++++++[->---------<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>->>++++++++++[-<<---->>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<-<<+++++++++++[->>--------<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>++++++++++++++++[-<<<--->>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<-<<<++++++++++++[->>>---------<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>-->>>>+++++++++++++++[-<<<<--->>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<+++++++++++++[->>>>-------<<<<]>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++++++++[-<<<<<---->>>>>]<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<+++++++++++[->>>>>----------<<<<<]>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-->>>>>>+++++++++++++++[-<<<<<<--->> >>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---<<<<<<+++++++++++++[-> >>>>>-------<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++ ++++++[-<<<<<<<---->>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<< <<<<+++++++++++++[->>>>>>>---------<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>-->>>>>>>>+++++++++++++++[-<<<<<<<<--->>>>>>>>]<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<++++++++++[->>>>>>>>----<<<<<<<<]>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++[-<<<<<<<<<----------------->>>>> >>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+++++++++++++++[->> >>>>>>>------<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>> ++++++++++++++[-<<<<<<<<<<--->>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<++++++++++++++++[->>>>>>>>>>------<<<<<<<<<<]>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++[-<<<<<<<<<<<------------------->>>>>> >>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<++++++++++++++[-> >>>>>>>>>>---<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-->>>>>>>>> >>>+++++[-<<<<<<<<<<<<----------------->>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<+++++++++++++[->>>>>>>>>>>>--------<<<<<<<<<<<<]>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>++++++++++++++[-<<<<<<<<<<<< <-->>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<++++++ +++++++++[->>>>>>>>>>>>>---<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>+++++++++++[-<<<<<<<<<<<<<<---------->>>>>>>>>>>>>>]<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<--<<<<<<<<<<<<<<+++++[->>>>>>>>>>>>>>------------ -----<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>+++ ++++++++++++[-<<<<<<<<<<<<<<<--->>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<--<<<<<<<<<<<<<<<++++++[->>>>>>>>>>>>>>>-------------------<<<<<<<<<<<< <<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>+++++++++++++++[-<< <<<<<<<<<<<<<<------->>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<++++++++++[->>>>>>>>>>>>>>>>----<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++++++++++++[-<<<<<<<<<<<<<<<<<------> >>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+++++++ +++++++++[->>>>>>>>>>>>>>>>>-------<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++++++++[-<<<<<<<<<<<<<<<<<<--------->>>>>>>>>>> >>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<++++++++++++[-> >>>>>>>>>>>>>>>>>---<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>+++++++++++[-<<<<<<<<<<<<<<<<<<<--->>>>>>>>>>>>>>>>>>>]<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<+++++++++++++++[->>>>>>>>>>>>>>>> >>>---<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>++++++++++++++[-<<<<<<<<<<<<<<<<<<<<-->>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<++++++[->>>>>>>>>>>>>>>>>>>>--------------- --<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+ ++++++++++++[-<<<<<<<<<<<<<<<<<<<<<----->>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<++++++++++[->>>>>>>>>>>>>>>>>>>>>-------- --<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ++++++[-<<<<<<<<<<<<<<<<<<<<<<----------------->>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<++++++[->>>>>>>>>>>>>>>>>>>>>>--- --------------<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>+++++++++++[-<<<<<<<<<<<<<<<<<<<<<<<---->>>>>>>>>>>>>>>>>>>>>>>]<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<--<<<<<<<<<<<<<<<<<<<<<<<++++++[->>>>>>>>>>>>>>>>> >>>>>>-------------------<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>+++++++++++[-<<<<<<<<<<<<<<<<<<<<<<<<---->>>>>>>>>>>>>> >>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<++++++++++++ ++[->>>>>>>>>>>>>>>>>>>>>>>>---<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>++++++++++++[-<<<<<<<<<<<<<<<<<<<<<<<<<-------- ->>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<+++++[->>>>>>>>>>>>>>>>>>>>>>>>>-------------------<<<<<<<<<<<<<<<<<<<<<<<<<] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>+++[-<<<<<<<<<<<<<<<<<< <<<<<<<<------------------->>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<--<<<<<<<<<<<<<<<<<<<<<<<<<<+++++[->>>>>>>>>>>>>>>>>>>>>>>>>>--------------- --<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>++++++++++[-<<<<<<<<<<<<<<<<<<<<<<<<<<<---->>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+++++++++++++[->>>>>>>>>>>>> >>>>>>>>>>>>>>--------<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>-< <<<<<<<<<<<<<<<<<<<<<<<<<<<++++++++++++++++[->>>>>>>>>>>>>>>>>>>>>>>>>>>>------- <<<<<<<<<<<<<<<<<<<<<<<<<<<<]>[<<[-]>>[-]]>[<<<[-]>>>[-]]>[<<<<[-]>>>>[-]]>[<<<< <[-]>>>>>[-]]>[<<<<<<[-]>>>>>>[-]]>[<<<<<<<[-]>>>>>>>[-]]>[<<<<<<<<[-]>>>>>>>>[- ]]>[<<<<<<<<<[-]>>>>>>>>>[-]]>[<<<<<<<<<<[-]>>>>>>>>>>[-]]>[<<<<<<<<<<<[-]>>>>>> >>>>>[-]]>[<<<<<<<<<<<<[-]>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<[-]>>>>>>>>>>>>>[-]]>[< <<<<<<<<<<<<<[-]>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>[-]]>[<<<<< <<<<<<<<<<<[-]>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>[-]]>[< <<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>> >>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<< <[-]>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>[- ]]>[<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<< <<<[-]>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>> >>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<< <<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<< <<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>> >>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[- ]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[- ]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[- ]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]>[<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<[>++++[++++>---<]>.+[--->+<]>+++.-.-------.+++++++++++.+++[->+++<]>++. --[--->+<]>-.+.---------.-----------.--[--->+<]>-.-----------.++++++.-.+++++.+[- ->+++++<]>-.-.--[->+++<]>-.[->+++++++<]>.++++++.-[---->+<]>+++.++[->+++<]>+.++++ ++++.+++++.[---->+<]>+++.-[--->++<]>-.+++++++++++.[-->+++++<]>-.[--->+<]>-.<<<<< <<<<<<<<<<<[-]>[-]]<[>-[--->+<]>-------.-[--->+<]>.+.-----------.--[--->+<]>.-.[ -->+++++<]>--.-[--->+<]>.+++++.[---->+<]>+++.---[->++++<]>.------------.---.--[- -->+<]>-.++[->+++<]>.++++++.-----------.++++++.-[--->+<]>-.[--->+<]>-.[-]] ================================================================================ = Appendix B: decode_flag.py = ================================================================================ data = [ 0x8d, 0x9e, 0x8d, 0x9c, 0x8b, 0x99, 0x84, 0xce, 0xa0, 0x97, 0xcf, 0x8f, 0xcc, 0xa0, 0x86, 0xcf, 0x8a, 0xd2, 0xcc, 0x91, 0x95, 0x90, 0x86, 0xcc, 0x9b, 0xa0, 0x92, 0x86, 0xd2, 0xbd, 0x8d, 0xcb, 0xce, 0x91, 0xb9, 0xdb, 0xd9, 0x94, 0xa0, 0x8d, 0xcc, 0x89, 0xde, 0xa0, 0x9b, 0xcc, 0xc7, 0xc8, 0xce, 0xc8, 0xce, 0xc8, 0xca, 0xce, 0x82 ] for c in data: c = 0xff - c print(chr(c), end="") print("")