summaryrefslogtreecommitdiff
path: root/babushka/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'babushka/README.md')
-rw-r--r--babushka/README.md23
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.