From 983cd29f5a2c3d9cd1d6a9c4f343adcffe54f88c Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Tue, 6 Apr 2021 12:23:00 -0400 Subject: Initial import. --- babushka/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 babushka/README.md (limited to 'babushka/README.md') 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. -- cgit v1.3