호박을 클릭하면 숫자가 줄어든다.
9999번 클릭하면 되는 게임인 거 같다.
는 무슨 코드를 봐보자.
<script>
var pumpkin = [ 124, 112, 59, 73, 167, 100, 105, 75, 59, 23, 16, 181, 165, 104, 43, 49, 118, 71, 112, 169, 43, 53 ];
var counter = 0;
var pie = 1;
function make() {
if (0 < counter && counter <= 1000) {
$('#jack-nose').css('opacity', (counter) + '%');
}
else if (1000 < counter && counter <= 3000) {
$('#jack-left').css('opacity', (counter - 1000) / 2 + '%');
}
else if (3000 < counter && counter <= 5000) {
$('#jack-right').css('opacity', (counter - 3000) / 2 + '%');
}
else if (5000 < counter && counter <= 10000) {
$('#jack-mouth').css('opacity', (counter - 5000) / 5 + '%');
}
if (10000 < counter) {
$('#jack-target').addClass('tada');
var ctx = document.querySelector("canvas").getContext("2d"),
dashLen = 220, dashOffset = dashLen, speed = 20,
txt = pumpkin.map(x=>String.fromCharCode(x)).join(''), x = 30, i = 0;
ctx.font = "50px Comic Sans MS, cursive, TSCu_Comic, sans-serif";
ctx.lineWidth = 5; ctx.lineJoin = "round"; ctx.globalAlpha = 2/3;
ctx.strokeStyle = ctx.fillStyle = "#1f2f90";
(function loop() {
ctx.clearRect(x, 0, 60, 150);
ctx.setLineDash([dashLen - dashOffset, dashOffset - speed]); // create a long dash mask
dashOffset -= speed; // reduce dash length
ctx.strokeText(txt[i], x, 90); // stroke letter
if (dashOffset > 0) requestAnimationFrame(loop); // animate
else {
ctx.fillText(txt[i], x, 90); // fill final letter
dashOffset = dashLen; // prep next char
x += ctx.measureText(txt[i++]).width + ctx.lineWidth * Math.random();
ctx.setTransform(1, 0, 0, 1, 0, 3 * Math.random()); // random y-delta
ctx.rotate(Math.random() * 0.005); // random rotation
if (i < txt.length) requestAnimationFrame(loop);
}
})();
}
else {
$('#clicks').text(10000 - counter);
}
}
$(function() {
$('#jack-target').click(function () {
counter += 1;
if (counter <= 10000 && counter % 100 == 0) {
for (var i = 0; i < pumpkin.length; i++) {
pumpkin[i] ^= pie;
pie = ((pie ^ 0xff) + (i * 10)) & 0xff;
}
}
make();
});
});
</script>
'pumpkin' 의 배열선언 124,112,59 ~
'counter'이 변수는 몇 번 클릭했는지를 나타내는 거 같다.
함수 make 에서는 클릭 횟수에 따라 투명도를 조절하는 코드인 거 같다.
if(10000 < counter)
클릭횟수가 10000보다 클 경우에 글자 애니메이션이 나온다고 한다.
그다음은 'function()'인데 이 부분이 중요한 거 같다.
$('#jack-target'). click( ~ 호박을 클릭하면 counter 가 1씩 증가한다,
여기서 "counter" 를 조작해 버리면
이상한 문자열이 나온다.
아마 실제 클릭 횟수를 따지기 때문에 그런 거 같다.
그러면 Console에서 반복문을 써서 클릭시켜보자.
반복문 실행..
정상적으로 호박이 만들어지고 플래그가 출력하게 된다.
'DreamHack > CTF' 카테고리의 다른 글
(CTF 출제)DreamHack - Easy Login (1) | 2024.05.01 |
---|---|
(CTF 출제)DreamHack - Mango (0) | 2024.04.30 |
(CTF 출제)DreamHack - PHPreg (수정) (0) | 2024.04.05 |
(CTF 출제)DreamHack - ex-reg-ex (수정) (0) | 2024.04.05 |
(CTF 출제)dreamhack - Baby Linux (수정) (0) | 2024.04.05 |