Fly Off The Handle
@load ./lookup
@load ./flag
global GLOBAL::n: count = 0;
global GLOBAL::fh: file;
global GLOBAL::pain_level: count = 1000;
srand(double_to_count(time_to_double(current_time())));
local winner = rand(pain_level);
print winner;
while (n < pain_level) {
if (mkdir("tmp/")) {
fh = open(fmt("tmp/%s", n));
if (n == winner) {
for (char in flag) {
write_file(fh, fmt("%s.", ascii_map[char] + n));
}
} else {
for (char in flag) {
write_file(fh, fmt("%s.", rand(93) + 32 + n));
}
}
close(fh);
} else {
;
}
n += 1;
}Hmm so we don't have the flag string. We have some 1000 files in directories which contain numbers nicely delimited by decimals. So some string was used to compute a file that wasn't created using a randomizing function, the rest use the lookup table and a random offset we can't reverse.
Ok lets reverse every file back into strings on the assumption that is was the winner one.
So lets read the file in using the input framework.
We get an event from we can hook into that will gives us the line in the file. Brute force some string manipulations and reverse the look table.
Putting it all together
You end up getting a fair amount of string output, but this is a CTF and your looking for flags right. So a quick case insensitive search for flag and voila.
The solution!
The ::GLOBAL:: being in the string threw me off
Last updated
Was this helpful?