점수 알고리즘을 보면, BPM으로 먼저 판단하고, 동일하면 더 적은 UR을 가진 참가자가 우승한다. 봇은 BPM이 항상 목표 BPM과 일치하고, UR은 20.00이 나온다. 결국 BPM을 session.songs[session.round].bpm과 정확하게 일치시키고 UR값을 20 미만으로 만들어야한다.
🎉 Exploit
아래와 같이 코드를 작성하여 run() 함수내에 작성하면 목표로하는 BPM에 맞게 clicks.add() 이벤트를 생성할 수 있다.
const targetBPM = session.songs[session.round].bpm;
const clickInterval = 60000 / targetBPM / 4;
const songDurationMs = session.songs[session.round].duration * 1000;
const totalClicks = Math.floor(songDurationMs / clickInterval);
function simulateClicks(clickInterval, totalClicks, startTime) {
for (let i = 0; i < totalClicks; i++) {
setTimeout(() => {
const simulatedTime = startTime + i * clickInterval;
clicks.add(simulatedTime);
}, i * clickInterval);
}
}
simulateClicks(clickInterval, totalClicks, start);