Try   HackMD

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.

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); } }

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

This can be read like osu{SLIDERZ}

Solution 2 (Only Mouse)

  1. Open beatmap in osu!lazer

  2. Enter to edit mode

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

  3. Select last combo notes

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

  4. Drag all notes to center of screen

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

  5. Play
    video