# 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)