diff --git a/.gitignore b/.gitignore index 2f836aa..1ffe6b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *~ +*# *.pyc diff --git a/Makefile b/Makefile index b282985..6b12412 100644 --- a/Makefile +++ b/Makefile @@ -6,19 +6,16 @@ BIN = $(BASE)/bin SBIN = $(BASE)/sbin BASE_URL = /ctf/ -install: - id ctf || useradd --system --shell /bin/false --home $(VAR) \ - --comment "Capture The Flag" ctf - install --directory $(LIB) $(BIN) $(SBIN) $(LIB)/disabled - install --directory --owner=ctf $(VAR) - install --directory --owner=ctf $(WWW) - install --directory --owner=ctf $(WWW)/puzzler - install --directory --owner=ctf $(VAR)/points - install --directory --owner=ctf $(VAR)/points/tmp - install --directory --owner=ctf $(VAR)/points/cur - install --directory --owner=ctf $(VAR)/flags +TEMPLATE = $(CURDIR)/template.html +MDWNTOHTML = $(CURDIR)/mdwntohtml.py --template=$(TEMPLATE) --base=$(BASE_URL) -# Tanks has a lot of files. +default: install + +SUBDIRS = mdwn +INSTALL_TARGETS = $(addsuffix -install, $(SUBDIRS)) +include $(addsuffix /*.mk, $(SUBDIRS)) + +install: base-install $(INSTALL_TARGETS) install --directory --owner=ctf $(VAR)/tanks install --directory --owner=ctf $(VAR)/tanks/results install --directory --owner=ctf $(VAR)/tanks/errors @@ -47,7 +44,34 @@ install: ./mkpuzzles.py --base=$(BASE_URL) --puzzles=puzzles \ --htmldir=$(WWW)/puzzler --keyfile=$(LIB)/puzzler.keys + install --directory $(VAR)/disabled + touch $(VAR)/disabled/bletchley + touch $(VAR)/disabled/compaq + touch $(VAR)/disabled/crypto + touch $(VAR)/disabled/forensics + touch $(VAR)/disabled/hackme + touch $(VAR)/disabled/hispaniola + touch $(VAR)/disabled/net-re + touch $(VAR)/disabled/skynet + touch $(VAR)/disabled/survey + + +base-install: + id ctf || useradd --system --shell /bin/false --home $(VAR) \ + --comment "Capture The Flag" ctf + install --directory $(LIB) $(BIN) $(SBIN) + install --directory --owner=ctf $(VAR) + install --directory --owner=ctf $(WWW) + install --directory --owner=ctf $(WWW)/puzzler + install --directory --owner=ctf $(VAR)/points + install --directory --owner=ctf $(VAR)/points/tmp + install --directory --owner=ctf $(VAR)/points/cur + install --directory --owner=ctf $(VAR)/flags + uninstall: rm -rf $(VAR) $(WWW) $(LIB) $(BIN) $(SBIN) rmdir $(BASE) || true + + +clean: $(addsuffix -clean, $(SUBDIRS)) diff --git a/mdwn/mdwn.mk b/mdwn/mdwn.mk new file mode 100644 index 0000000..12667a5 --- /dev/null +++ b/mdwn/mdwn.mk @@ -0,0 +1,16 @@ +MDWN_DIR = mdwn + +MDWN_SRC += $(wildcard $(MDWN_DIR)/src/*.mdwn) +MDWN_SRC += $(wildcard $(MDWN_DIR)/src/*/*.mdwn) +MDWN_SRC += $(wildcard $(MDWN_DIR)/src/*/*/*.mdwn) + +MDWN_OUT = $(subst $(MDWN_DIR)/src/, $(WWW)/, $(MDWN_SRC:.mdwn=.html)) + +mdwn-install: $(MDWN_OUT) + +$(WWW)/%.html: $(MDWN_DIR)/src/%.mdwn + install -d $(@D) + $(MDWNTOHTML) $< $@ + +mdwn-clean: + rm -f $(MDWN_OUT) \ No newline at end of file diff --git a/mdwn/src/index.mdwn b/mdwn/src/index.mdwn new file mode 100644 index 0000000..222ec5f --- /dev/null +++ b/mdwn/src/index.mdwn @@ -0,0 +1,15 @@ +Title: Welcome + +Welcome to Café Scientifique Capture The Flag. + +1. [Register](register.cgi) your team +2. [View the score board](scoreboard.html) +3. Check out the [base conversion table](table.html) +4. Start playing + +The following categories exist for this version of CTF: + +* [Sequence](puzzler.cgi?c=sequence) +* [Code Breaking](puzzler.cgi?c=codebreaking) +* [Webapp](puzzler.cgi?c=webapp) +* [Tanks](tanks/results.html) diff --git a/mdwn/src/intro.mdwn b/mdwn/src/intro.mdwn new file mode 100644 index 0000000..8ce18bb --- /dev/null +++ b/mdwn/src/intro.mdwn @@ -0,0 +1,103 @@ +Title: Introduction + +Welcome to Capture The Flag. + + +What This Is +============ + +* A hacking contest +* A chance to experience the nature of cyber incident response +* An environment to safely experiment with offensive techniques + + +What This Is Not +================ + +* An arena for purely malicious attacks +* A rave + + +Rules +===== + +Important Rules +--------------- + +* The contest network is 10.x.x.x. **Do + not attack machines outside the contest network**. All + federal, state, and school laws still apply to the outside + network. +* If the "outside network" requires you to plug into a different + switch, do not connect any machine that has been on the contest + network. +* Consider this network hostile: your machine may be + compromised. +* We expect you to be disruptive within the framework of the + game (malicious code, network scanning, social engineering, + etc.). Disruptive behavior outside the game will result in a + public and humiliating ejection from the contest area. +* No ARP attacks. While cute, they are not particularly clever + given our network topology, and would require expensive and + bulky equipment to prevent. Find something else to do. + +Less-Important Rules +-------------------- + +* If IRC is up, you should use it to communicate with the + contest staff. Staff will have operator status in #ctf. +* If you think something is wrong with the game, you are + expected to demonstrate the problem and explain what you think + is the correct behavior. + + +Scoring +======= + +The contest is made up of multiple categories. Each category is worth +one point toward the total score; the percentage of the total points +held by your team is the percentage of one point your team has for that +category. The team that has 30% of the points in each of five +categories has 1.5 points, whereas the team that has 80% of the points +in only one category has 0.8 points. It is typically better to have a +few points in many categories, than many points in a few categories. + +There are two kinds of categories: *flags* and *puzzles*. + + +Flags +----- + +Flag categories are challenges with a notion of a *winner* or *service +availability*. In these categories, the flag-holder (the winner, or +each team with a running service) makes 1 point per minute for as long +as they hold the flag. If there is a single flag-holder, and the flag +changes hands, a point is awarded to the new winner at the moment the +flag moves. + + +Puzzles +------- + +Most of the categories come in the form of multiple *puzzles*: for each +puzzle presented, a key (answer) must be found to recieve the amount of +points that puzzle is worth. Any team may answer any puzzle question at +any time. A new puzzle is revealed when a team correctly answers the +highest-valued puzzle in that category. + + +Hints +===== + +If you are really stuck, you can ask for a hint. It will cost you +points, though. For puzzles, you will lose ¼ of the points for that +puzzle even if you never solve the puzzle. For other events, +the staff member will decide how many points it will cost. You can try +to bribe or otherwise fanagle information out of us or other +contestants. *It's a hacking contest.* + +About Us +======== + +We are the dirtbags. People pay us +money to do the sorts of things you'll be doing in this contest. diff --git a/mdwn/src/table.mdwn b/mdwn/src/table.mdwn new file mode 100644 index 0000000..6dc095b --- /dev/null +++ b/mdwn/src/table.mdwn @@ -0,0 +1,161 @@ +Title: Counting in different bases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base
20110111001011101111000100110101011110011011110111110000100011001010011101001010110110101111100011001110101101111100111011111011111100000100001100010100011
80123456710111213141516172021222324252627303132333435363740414243
1001234567891011121314151617181920212223242526272829303132333435
160123456789abcdef101112131415161718191a1b1c1d1e1f20212223
\ No newline at end of file diff --git a/mdwn/src/tanks/docs.mdwn b/mdwn/src/tanks/docs.mdwn new file mode 100644 index 0000000..22756a9 --- /dev/null +++ b/mdwn/src/tanks/docs.mdwn @@ -0,0 +1,332 @@ +Title: Tanks Documentation + +Introduction +============ + +You are the proud new operator of a M-375 Pflanzarr Tank. Your tank is +equipped with a powerful laser cannon, independently rotating turret +section, up to 10 enemy detection sensors, and a standard issue NATO +hull. Unfortunately, it lacks seats, and thus must rely own its own +wits and your skills at designing those wits to survive. + + +An Example Tank +=============== + +You can to paste this tank code into the [submit page](submit.html) page +to get started. Then, start changing things to see how it affects your +tank's behavior. + + >addsensor(50, 0, 5, 1); # Sensor 0: Fire Sensor + >addsensor(30, 0, 50); # Sensor 1: Anti-collision sensor + + # Commands + : move(90, 100) . turretset(0); # Always do this + sense(0) : fire(); # If sensor 0 is active, fire + sense(1) : move(-100, 100) # If sensor 1 is active, turn + + +Programming Your Tank +===================== + +Your tanks are programmed using the Super Useful Command and Kontrol +language, the very best in laser tank AI languages. It includes amazing +features such as comments (Started by a #, ended at EOL), logic, +versatility, and semi-colons (all lines must end in one). As with all +new military systems it utilizes only integers; we must never rest in +our diligence against the communist floating point conspiracy. +Whitespace is provided by trusted contractors, and should never +interfere with operations. + +Your program should be separated into Setup and AI commands. The +definitions section lets you designated the behaviors of its +sensors and memory. Each setup command must begin with a +'>'. Placing setup commands after the first AI command is a +violation of protocol. Here are some examples of correct setup +commands: + + >addsensor(80, 90, 33); + >addsensor(50, 0, 10, 1); + >addtimer(3); + +The AI section will act as the brain of your tank. Each AI line +is separated into a group of conditions functions and a group of +action functions. If all the conditions are satisfactory (true), +all of the actions are given as orders. Conditions are separated +by ampersands, actions separated by periods. Here are some +examples of AI commands: + + sense(1) & sense(2) & fireready() : fire(); + sense(0,0)&sin(5): move(40, 30) . turretcw(50); + sense(4) & random(4,5) : led(1).settoggle(0,1); + +Your tank will execute its program each turn(frame), and attempt +to the best of its abilities to carry out its orders (or die +trying). Like any military mind, your tank may receive a plethora +of often conflicting orders and information. This a SMART TANK, +however. It knows that the proper thing to do with each subsystem +is to have that subsystem follow only the last order given each +turn. + + #Setup commands define your tank when your program + #compiles + >addsensor(50, 0, 5, 1); # 0-Fire Sensor + >addsensor(30, 0, 180); # 1-Anti-collision sensor + + # These commands execute each frame. + # Blank condition sections are true. + : move(90, 100). + turretset(0); + sense(0) : fire(); + sense(1) : move(-100, 100) + +Setup Actions +------------- + +These functions can be used to setup your tank. Abuse of these +functions has, in the past, resulted in mine sweeping duty. With +a broom. + +
+
addsensor(range, angle, width, [turretAttached])
+
+

Add a new sensor to the tank.

+

+ Sensors are an arc (pie slice) centered on the tank that + detect other tanks within their sweep.
+ A sensor is 'on' if another tank is within this arc. +

+

+ Sensors are numbered, starting at 0, in the order they are + added. +

+

+ range - The range of the sensor, as a percent of the tanks max + range.
+ angle - The angle of the center of the sensor, in degrees.
+ width - The width of the sensor, in degrees.
+ turretAttached - Normally, the angle is relative to the front of + the + tank.
When this is set, the angle is relative to the current + turret + direction.
+

+
+ +
addtimer(timeout)
+
+

+ Add a new timer (they're numbered in the order added, starting from 0), + with the given timeout. +

+

+ The timeout is in number of turns.
+ The timer + is created in inactive mode.
You'll need to do a starttimer() + action + to reset and start the timer.
When the timer expires, the + timer() + condition will begin to return True. +

+
+ +
addtoggle([state])
+
+

Add a toggle to the tank.

+

+ The state of the toggle defaults to 0 (False).
+ese essentially act as a single bit of memory.
+e the toggle() condition to check its state and the settoggle, +eartoggle, +d toggle actions to change the state.
Toggles are named +merically, +arting at 0. +

+
+
+ +Conditions +---------- + +These functions are used to check the state of reality. If reality +stops being real, refer to chapter 5 in your girl scout handbook. + +
+
cos(T)
+
+

+ A cos wave with period T (in turns). +

+ +

+ Returns True when the wave is + positive.
A wave of period 1 is always True.
Period + 2 is True every + other turn, etc. +

+
+ +
firenotready()
+
+

+ True when the tank can not fire. +

+
+ +
fireready()
+
+

+ True when the tank can fire. +

+
+ +
random(n,m)
+
+

Generate a random number.

+ +

+ Takes two + arguments, n and m.
Generates a random number between 1 + and m (inclusive) each time it's checked.
If the random + number is less + than or equal + to n, then the condition returns True.
Returns False + otherwise. +

+
+ +
sense(#, [invert])
+
+

True when a sensor is activated.

+ +

+ Takes a Sensor number as an argument.
+ + Returns True if the given sensor is currently activated, False + otherwise.
+ If the option argument invert is set to true then logic is + inverted, + and then sensor returns True when it is NOT activated, and + False when + it is.
Invert is false by default. +

+
+ +
sin(T)
+
+

A sin wave of period T (in turns).

+ +

+ Returns True when the wave is positive.
+ A wave with period 1 or 2 is always False (it's 0 each turn), + only + at periods of 3 or more does this become useful. +

+
+ +
timer(#, [invert])
+ +
+

Checks the state of timer # 'key'.

+ +

+ Returns True if time has run + out.
+ + If invert is given (and true), then True is returned if the + timer has + yet to expire. +

+
+ +
toggle(#)
+
+

Returns True if the given toggle is set, False + otherwise.

+
+
+ +Actions +------- + +These actions are not for cowards. Remember, if actions contradict, +your tank will simply do the last thing it was told in a turn. If +ordered to hop on a plane to hell it will gladly do so. If order to +make tea shortly afterwards, it will serve it politely and with cookies +instead. + + +
+
cleartimer(#)
+
+

Clear the given timer such that it is no longer active (inactive timers + are always False).

+
+ +
fire()
+
+

Attempt to fire the tanks laser cannon.

+

+ Its range is 50% of your sensor range. +

+
+ +
led(state)
+
+

Set the tank's LED to state (true is on, false is off).

+

+ The led is a light that appears behind the tanks turret.
+ It remains on for a single turn. +

+
+ +
move(left tread speed, right tread speed)
+
+

Set the speeds for the tanks right and left treads.

+ +

+ The speeds should + be a number (percent power) between -100 and + 100. +

+
+ +
settoggle(key, state)
+
+

Set toggle 'key' to 'state'.

+
+ +
starttimer(#)
+
+

Start (and reset) the given timer, but only if it is + inactive.

+
+ +
toggle(key)
+
+

Toggle the value of toggle 'key'.

+
+ +
turretccw([percent speed])
+
+

Rotate the turret counter clockwise as a + percentage of the max speed.

+
+ +
turretcw([percent speed])
+
+

Rotate the turret clockwise at a rate + preportional to speed.

+
+ +
turretset([angle])
+
+

Set the turret to the given angle, in degrees, relative to the + front of the tank.

+

+ Angles increase counterclockwise.
The angle can be left + out; in that case, this locks the turret to its current + position. +

+
+
diff --git a/mdwn/src/tanks/links.xml b/mdwn/src/tanks/links.xml new file mode 100644 index 0000000..c86c136 --- /dev/null +++ b/mdwn/src/tanks/links.xml @@ -0,0 +1,10 @@ +

Tanks

+ + + + diff --git a/mdwn/src/tanks/submit.mdwn b/mdwn/src/tanks/submit.mdwn new file mode 100644 index 0000000..c576413 --- /dev/null +++ b/mdwn/src/tanks/submit.mdwn @@ -0,0 +1,14 @@ +Title: Tanks Submission + +
+
+ Your program: + Team: +
+ Password: +
+
+ + +
+
diff --git a/mdwntohtml.py b/mdwntohtml.py new file mode 100755 index 0000000..bafe89f --- /dev/null +++ b/mdwntohtml.py @@ -0,0 +1,44 @@ +#! /usr/bin/python + +import os +import shutil +import optparse +import string +import markdown +from codecs import open + +p = optparse.OptionParser('%prog [OPTIONS] infile outfile') +p.add_option('-t', '--template', dest='template', default='template.html', + help='Location of HTML template') +p.add_option('-b', '--base', dest='base', default='', + help='Base URL for contest') + +opts, args = p.parse_args() + +basedir = os.path.dirname(args[0]) +links_fn = os.path.join(basedir, 'links.xml') +try: + links = open(links_fn, encoding='utf-8').read() +except IOError: + links = '' + +f = open(args[0], encoding='utf-8') +title = '' +for line in f: + line = line.strip() + if not line: + break + k, v = line.split(': ') + if k.lower() == 'title': + title = v +body = markdown.markdown(f.read(99999)) +template = string.Template(open(opts.template, encoding='utf-8').read()) +page = template.substitute(hdr='', + title=title, + base=opts.base, + links=links, + body_class='', + onload='', + body=body) + +open(args[1], 'w', encoding='utf-8').write(page) diff --git a/puzzler.keys b/puzzler.keys deleted file mode 100644 index 7c492e4..0000000 --- a/puzzler.keys +++ /dev/null @@ -1,112 +0,0 @@ -bletchley 50 extra special text -bletchley 1000 It is a lovely day outside -bletchley 150 jackalope wheeze -bletchley 350 PC LOAD LETTER -bletchley 300 jako561962 -bletchley 200 unequivocal -bletchley 900 PEANUT BUTTER JELLY TIME -bletchley 100 antediluvian -bletchley 500 xez.3nt -bletchley 250 DB1663<3 -net-re 4 PINHEAD CATASTROPHE -net-re 2 great job -net-re 25000 galloping gallimimus -net-re 1000 a difficult key! -net-re 7 60.0.13.65 -net-re 4000 gaucho moped fleet -net-re 800 10.72.148.66 -net-re 5000 miniature commodore exercise -net-re 300 pumpkins -net-re 5 fishsticks -net-re 30 RSTNFGEAID -net-re 3000 galactic octopus -net-re 200 particulate -net-re 6 whatever.example.net -net-re 2000 obtuse -net-re 3 2,4,6,8,A,B,C,D,F -net-re 400 lettuce -net-re 100 chumbucket -net-re 8 bacon -net-re 1200 hotshot tomato -net-re 20 squirrel -net-re 1 163 -net-re 10 69.35 -net-re 700 fixate rasterize -net-re 250 alice_test@hotmail.com -survey 1000000 quux blorb frotz -sequence 50 42 -sequence 2 111 1000 -sequence 35 13 21 -sequence 300 ┤ -sequence 25 36 -sequence 600 61 64 9b -sequence 200 E G G -sequence 16 a -sequence 400 0101 -sequence 100 45 -sequence 8 100 -sequence 19 17 -sequence 1 6 -sequence 700 01 00 00 ca 0a -sequence 450 05 -hispaniola 50 LANL GUYS -hispaniola 5 3acd767f2717b84076cdcd18e882f01d -hispaniola 125 ‽ -hispaniola 75 ⚑ ◢ ◕ ★ ♥ ◢ ♥ ⚑ ◕ ★ ♥ ◕ ★ ♥ ⚑ ★ ⚑ ◢ ♥ ◢ ◕ ◕ ◢ ★ ⚑ -hispaniola 15 -462766 -hispaniola 10 You're well on your way :) -skynet 302 SkynetSasserVersionWithPingFast -skynet 401 67678dj*&78 -skynet 102 beagle_beagle -skynet 300 pecompact -skynet 202 tftp -skynet 203 FreeConsole -skynet 200 402fcc -skynet 301 4028de -skynet 400 services.exe -skynet 100 bbeagle.exe -skynet 500 c:\windows\system32:lzx32.sys -skynet 500 -skynet 501 kdD -crypto 160 chronic failure -crypto 220 open meadows -crypto 230 quavering tendrils -crypto 130 probable cause -crypto 210 The Colour Out of Space -crypto 150 flaming mastiff -crypto 240 in the same vein -crypto 140 giant chickens -crypto 200 the squirrels crow at noon -crypto 110 the s is for sucks -crypto 120 Rat Fink -crypto 180 The key for this puzzle is this sentence -crypto 400 --------========Thanks for Pl@y|ng========-------- -crypto 100 caesar -crypto 170 terrifying silence -crypto 1 dirtbags -forensics 50 C:\WINDOWS\system32\klog.sys -forensics 200 winsecur.dll -forensics 400 avatar.txt -forensics 100 dll injection -forensics 20 klog.txt -forensics 10 lsass.exe -forensics 250 Dirka Dirka -compaq 50 4C -compaq 150 This is our world now... the world of the electron and the switch, the beauty of the baud. -compaq 350 Actually, Werner, we're all tickled to here you say that. Frankly, watchin' Donny beat Nazis to death is is the closest we ever get to goin' to the movies. -compaq 600 Now think real hard. You been bird-doggin' this township awhile now. They wouldn't mind a corpse of you. Now, you can luxuriate in a nice jail cell, but if your hand touches metal, I swear by my pretty floral bonnet, I will end you. -compaq 200 Gawain Ballard Tunisia -compaq 400 lawful forths Amanda -compaq 100 root:x:0:0:root:/root:/bin/bash -compaq 500 codger launched jet -hackme 806 That's all, folks. -hackme 200 james -hackme 614 james -webapp 50 eVkIwHzOok -webapp 40 765JBo4B54 -webapp 70 s4nNlaMScV -webapp 30 BRrHdtdADI -webapp 60 QJebByJaKX -webapp 80 dmW5f9P54e -webapp 20 uq4G4dXrpx -webapp 10 ktFfb8R1Bw diff --git a/puzzles/basemath/1/index.mdwn b/puzzles/basemath/1/index.mdwn new file mode 100644 index 0000000..d813a25 --- /dev/null +++ b/puzzles/basemath/1/index.mdwn @@ -0,0 +1 @@ + 1 2 3 4 5 6 7 8 9 10 _ diff --git a/puzzles/basemath/1/key b/puzzles/basemath/1/key new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/puzzles/basemath/1/key @@ -0,0 +1 @@ +11 diff --git a/puzzles/basemath/2/index.mdwn b/puzzles/basemath/2/index.mdwn new file mode 100644 index 0000000..af51cfa --- /dev/null +++ b/puzzles/basemath/2/index.mdwn @@ -0,0 +1,2 @@ + 1 10 11 100 101 110 111 _ + diff --git a/puzzles/basemath/2/key b/puzzles/basemath/2/key new file mode 100644 index 0000000..83b33d2 --- /dev/null +++ b/puzzles/basemath/2/key @@ -0,0 +1 @@ +1000 diff --git a/puzzles/basemath/3/index.mdwn b/puzzles/basemath/3/index.mdwn new file mode 100644 index 0000000..39abc94 --- /dev/null +++ b/puzzles/basemath/3/index.mdwn @@ -0,0 +1 @@ + ... 4 5 6 7 10 11 12 ... 75 76 77 _ diff --git a/puzzles/basemath/3/key b/puzzles/basemath/3/key new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/puzzles/basemath/3/key @@ -0,0 +1 @@ +100 diff --git a/puzzles/basemath/4/index.mdwn b/puzzles/basemath/4/index.mdwn new file mode 100644 index 0000000..ec74c96 --- /dev/null +++ b/puzzles/basemath/4/index.mdwn @@ -0,0 +1 @@ + ... 7 8 9 A B C D E F 10 11 12 13 ... 1C8 1C9 _ diff --git a/puzzles/basemath/4/key b/puzzles/basemath/4/key new file mode 100644 index 0000000..747e1ad --- /dev/null +++ b/puzzles/basemath/4/key @@ -0,0 +1 @@ +1CA diff --git a/puzzles/basemath/5/index.mdwn b/puzzles/basemath/5/index.mdwn new file mode 100644 index 0000000..22a9d01 --- /dev/null +++ b/puzzles/basemath/5/index.mdwn @@ -0,0 +1 @@ + 1 2 4 8 16 32 _ diff --git a/puzzles/basemath/5/key b/puzzles/basemath/5/key new file mode 100644 index 0000000..900731f --- /dev/null +++ b/puzzles/basemath/5/key @@ -0,0 +1 @@ +64 diff --git a/puzzles/codebreaking/1/index.mdwn b/puzzles/codebreaking/1/index.mdwn new file mode 100644 index 0000000..7d4c275 --- /dev/null +++ b/puzzles/codebreaking/1/index.mdwn @@ -0,0 +1 @@ +The answer for this page is "snickers". \ No newline at end of file diff --git a/puzzles/codebreaking/1/key b/puzzles/codebreaking/1/key new file mode 100644 index 0000000..aee2f5c --- /dev/null +++ b/puzzles/codebreaking/1/key @@ -0,0 +1 @@ +snickers diff --git a/puzzles/codebreaking/2/index.mdwn b/puzzles/codebreaking/2/index.mdwn new file mode 100644 index 0000000..b0b1be2 --- /dev/null +++ b/puzzles/codebreaking/2/index.mdwn @@ -0,0 +1 @@ +Uif botxfs gps uijt qbhf jt "hpctupqqfs". \ No newline at end of file diff --git a/puzzles/codebreaking/2/key b/puzzles/codebreaking/2/key new file mode 100644 index 0000000..740c3cf --- /dev/null +++ b/puzzles/codebreaking/2/key @@ -0,0 +1 @@ +gobstopper diff --git a/puzzles/codebreaking/3/dancing.png b/puzzles/codebreaking/3/dancing.png new file mode 100644 index 0000000..74fb578 Binary files /dev/null and b/puzzles/codebreaking/3/dancing.png differ diff --git a/puzzles/codebreaking/3/index.mdwn b/puzzles/codebreaking/3/index.mdwn new file mode 100644 index 0000000..a2092fb --- /dev/null +++ b/puzzles/codebreaking/3/index.mdwn @@ -0,0 +1 @@ +![dancing men](danging.png) diff --git a/puzzles/codebreaking/3/key b/puzzles/codebreaking/3/key new file mode 100644 index 0000000..0afb7d2 --- /dev/null +++ b/puzzles/codebreaking/3/key @@ -0,0 +1 @@ +tootsie diff --git a/puzzles/codebreaking/4/index.mdwn b/puzzles/codebreaking/4/index.mdwn new file mode 100644 index 0000000..c6ed686 --- /dev/null +++ b/puzzles/codebreaking/4/index.mdwn @@ -0,0 +1 @@ +Xts cgmvsl ihl otfm jcns fm "tslmtsx". diff --git a/puzzles/codebreaking/4/key b/puzzles/codebreaking/4/key new file mode 100644 index 0000000..77cfbcd --- /dev/null +++ b/puzzles/codebreaking/4/key @@ -0,0 +1 @@ +hershey diff --git a/puzzles/codebreaking/5/image.png b/puzzles/codebreaking/5/image.png new file mode 100644 index 0000000..283558a Binary files /dev/null and b/puzzles/codebreaking/5/image.png differ diff --git a/puzzles/codebreaking/5/key b/puzzles/codebreaking/5/key new file mode 100644 index 0000000..dc67af8 --- /dev/null +++ b/puzzles/codebreaking/5/key @@ -0,0 +1 @@ +skittles diff --git a/puzzles/codebreaking/6/image.png b/puzzles/codebreaking/6/image.png new file mode 100644 index 0000000..9be3c2f Binary files /dev/null and b/puzzles/codebreaking/6/image.png differ diff --git a/puzzles/codebreaking/6/key b/puzzles/codebreaking/6/key new file mode 100644 index 0000000..a27adc8 --- /dev/null +++ b/puzzles/codebreaking/6/key @@ -0,0 +1 @@ +toffee diff --git a/puzzles/codebreaking/7/index.mdwn b/puzzles/codebreaking/7/index.mdwn new file mode 100644 index 0000000..29e869f --- /dev/null +++ b/puzzles/codebreaking/7/index.mdwn @@ -0,0 +1,13 @@ + toaatbs 1 + hdsthea 2 + iectern 3 + siyetos 4 + tstnofw 5 + ycattle 6 + paliaer 7 + eleoltb 8 + olpnnte 9 + featuee 10 + cdyomrt 11 + + 1234567 \ No newline at end of file diff --git a/puzzles/codebreaking/7/key b/puzzles/codebreaking/7/key new file mode 100644 index 0000000..a4a6735 --- /dev/null +++ b/puzzles/codebreaking/7/key @@ -0,0 +1 @@ +beet diff --git a/puzzles/codebreaking/8/index.mdwn b/puzzles/codebreaking/8/index.mdwn new file mode 100644 index 0000000..7e727e6 --- /dev/null +++ b/puzzles/codebreaking/8/index.mdwn @@ -0,0 +1 @@ +cusoeecolorsahnanicnagtfnyslriagtwuaoctaeptnthlra diff --git a/puzzles/codebreaking/8/key b/puzzles/codebreaking/8/key new file mode 100644 index 0000000..11cbcea --- /dev/null +++ b/puzzles/codebreaking/8/key @@ -0,0 +1 @@ +chalupa diff --git a/puzzles/sequence/summary.txt b/puzzles/sequence/summary.txt deleted file mode 100644 index e69de29..0000000 diff --git a/template.html b/template.html index 40c908e..cf5e6a6 100644 --- a/template.html +++ b/template.html @@ -13,8 +13,6 @@