1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
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("")
|