diff options
author | Malfurious <m@lfurio.us> | 2021-08-21 14:28:06 -0400 |
---|---|---|
committer | Malfurious <m@lfurio.us> | 2021-08-21 14:28:06 -0400 |
commit | 442640f100727a081cf26460992465386fe3a633 (patch) | |
tree | 64824fcb57e572625e37aeb9fe17f6eea51412dc /docs | |
parent | 4666f79714f40d11d26fb0397c54dde3cbc8e47b (diff) | |
download | lib-des-gnux-442640f100727a081cf26460992465386fe3a633.tar.gz lib-des-gnux-442640f100727a081cf26460992465386fe3a633.zip |
Add writeup for RaRCTF 2021 / Boring Flag Checker
Signed-off-by: Malfurious <m@lfurio.us>
Diffstat (limited to 'docs')
-rw-r--r-- | docs/writeups/RaRCTF_2021/Boring_Flag_Checker.txt | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/docs/writeups/RaRCTF_2021/Boring_Flag_Checker.txt b/docs/writeups/RaRCTF_2021/Boring_Flag_Checker.txt new file mode 100644 index 0000000..88451de --- /dev/null +++ b/docs/writeups/RaRCTF_2021/Boring_Flag_Checker.txt @@ -0,0 +1,236 @@ +"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("") |