# osu!gaming CTF 2024 forensics/out-of-slide write up
Hi, i'm sim1222 aka こけっち.
I participated osu!gaming CTF 2024 with Team `RJ45` 5 hours before the end.
## forensics/out-of-slide
The beatmap has sliders with characters stroked at the last combo.
Nomally, the sliders appears out of screen and aren't visible.
```
1066,101,79722,2,0,P|1147:235|1105:58,1,480.000018310548
1329,81,80772,2,0,B|1186:130|1313:188|1389:283|1221:280,1,300.000011444092
1177,177,81447,2,0,P|1221:284|1291:173,1,300.000011444092
10304,10035,81672,2,0,B|10263:10114|10217:10122|10217:10122|10289:10166|10304:10241|10357:10226,1,300.000011444092
10360,10082,82272,2,0,B|10186:10113|10465:10192|10296:10241,1,240.000009155274
10209,10078,82872,2,0,B|10196:10281|10196:10281|10297:10284,1,300.000011444092
10166,10088,83697,2,0,B|10317:10089|10231:10091|10231:10091|10226:10279|10226:10279|10155:10279|10295:10283,1,420.000016021729
10150,10101,84522,2,0,B|10151:10295|10151:10295|10293:10245|10184:10093,1,420.000016021729
10331,10098,85272,2,0,B|10203:10101|10203:10101|10202:10219|10202:10219|10265:10220|10265:10220|10201:10218|10201:10218|10203:10329|10204:10329|10348:10316,1,600.000022888184
10206,10100,86472,2,0,B|10432:10124|10211:10184|10196:10215|10196:10215|10196:10328|10196:10328|10197:10212|10197:10212|10336:10341|10336:10340,1,660.000025177003
10214,10093,87672,2,0,B|10335:10093|10335:10093|10211:10223|10211:10223|10366:10223|10365:10223|10361:10226,1,420.000016021729
10178,10081,88572,2,0,B|10271:10112|10271:10186|10271:10186|10330:10214|10330:10214|10265:10267|10265:10267|10247:10348|10176:10341|10176:10342,1,420.000016021729
```
## Solution 1 (Smart)
I wrote a script that draws an image of a slider stroke.
```typescript=
import { BeatmapDecoder } from "npm:osu-parsers";
import { createCanvas } from "https://deno.land/x/canvas@v1.4.1/mod.ts";
import { mapData } from "./data.ts";
const decoder = new BeatmapDecoder();
const beatmap = decoder.decodeFromString(mapData, {
parseHitObjects: true,
});
const tiledCanvas = createCanvas(2000, 2000);
const tiledCtx = tiledCanvas.getContext("2d");
for (const hitObject of beatmap.hitObjects) {
if (
(hitObject.hitType == 2 && hitObject.startX > 1000) ||
hitObject.startY > 1000
) {
const canvas = createCanvas(2000, 2000);
const ctx = canvas.getContext("2d");
ctx.fillStyle = "white";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.moveTo(500 + hitObject.startX / 10, 500 + hitObject.startY / 10);
const startX = 500 + hitObject.startX / 10;
const startY = 500 + hitObject.startY / 10;
console.log(`startX: ${startX}, startY: ${startY}`);
for (const point of hitObject.path._controlPoints) {
ctx.lineTo(startX + point.position.x, startY + point.position.y);
console.log(
`x: ${startX + point.position.x}, y: ${startY + point.position.y}`
);
}
ctx.lineWidth = 10;
ctx.strokeStyle = "black";
ctx.stroke();
const buf = canvas.toBuffer("image/png");
await Deno.writeFile(`${hitObject.startTime}.png`, buf);
}
}
```
![79722](https://hackmd.io/_uploads/B1gu5wXp6.png)
This can be read like `osu{SLIDERZ}`
## Solution 2 (Only Mouse)
1. Open beatmap in osu!lazer
2. Enter to edit mode
![3mZEHVLE1Q](https://hackmd.io/_uploads/S1WvjDmpp.png)
3. Select last combo notes
![XKGZuEwH6z](https://hackmd.io/_uploads/BJIPiv7T6.png)
4. Drag all notes to center of screen
![osu!_6fGSSyFCkr](https://hackmd.io/_uploads/rkz2hwXTT.png)
5. Play
[video](https://s3.simkey.net/files/135045c0-a44e-40d8-8f9f-9a05f128958d.mp4)