diff options
Diffstat (limited to 'babushka/README.md')
| -rw-r--r-- | babushka/README.md | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/babushka/README.md b/babushka/README.md new file mode 100644 index 0000000..bbb2e77 --- /dev/null +++ b/babushka/README.md @@ -0,0 +1,23 @@ +# babushka + +"I got this toy in a Russian gift shop." + +The file `babushka.py` has been omitted due to the size. It was generated by +`gen.py`. + +The challenge was named "babushka" because the program is designed like a +matryoshka doll. There is one entry point to a long (having 500 parts) chain of +functions, most unpacking the subsequent one in the chain. + +Each function in the chain does some check on the input. All of them, except for +the fourteenth, have some check that involves some decoy flag, and some way of +combining the results of the checks further down in the lineage. They are +combined such that only the output of one of the 500 functions is used. + +The intended solution was to write a script to extract all of the functions, and +look at the combiners to see which of the functions mattered. You could then +manually reverse engineer them to get the flag. + +The way the input is checked is about the same across all functions, so in +theory, one could write a script to extract the value the input is checked +against from all of the functions, and then try all 500 to see which one worked. |