-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathSprintSolve.hx
46 lines (44 loc) · 1.41 KB
/
SprintSolve.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class SprintSolve {
public static function main():Void {
var flag = sys.io.File.getBytes("sprint-data.bin").sub(0xF10C, 39);
// brute force
/*
var adds = [ for (i in 0...4) for (j in 0...4) i | (i << 2) | (j << 4) | (j << 6) ];
var chars = [ for (i in 0...flag.length) [ for (a in adds) {
var res = (flag.get(i) + a) & 0xFF;
if (res < 0x20 || res >= 0x7F) continue;
res;
} ] ];
*/
// or known password
var password = "ddrrrrrrddrrrrrrrrddllrruullllllllddddllllllddddrrrrrrrruurrddrrddrrlluulluullddlllllllluuuurrrrrruuuuuulllllldduurrrrrrddddddllllllddddrrrrrruuddlllllluuuuuurruuddllddrrrrrruuuurrrrrruurrllddllllllddddllllllddddrrddllrruulluuuurrrrrruullrruurruuuurrrrrr";
var chars = [ for (i in 0...flag.length) {
var checksum = 0;
for (j in 0...4) {
checksum *= 4;
checksum += (switch (password.charAt(i * 4 + j)) {
case "u": 0;
case "r": 1;
case "d": 2;
case "l": 3;
case _: throw "!";
});
}
[(flag.get(i) + checksum) & 0xFF];
} ];
// print
for (off in 0...16) {
var printed = false;
for (i in 0...flag.length) {
if (off >= chars[i].length) {
Sys.print(" ");
} else {
Sys.print(String.fromCharCode(chars[i][off]));
printed = true;
}
}
if (!printed) break;
Sys.println("");
}
}
}