DreamHack/CTF

(CTF 출제)DreamHack - Flying Chars

G_OM 2024. 5. 2. 10:03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제화면을 보면 문자들이 날아다닌다.

 

문제파일은 없으니 소스코드를 보도록 하자.

 

 

 

 

 

 

 

 

    const img_files = ["/static/images/10.png", "/static/images/17.png", "/static/images/13.png", "/static/images/7.png","/static/images/16.png", "/static/images/8.png", "/static/images/14.png", "/static/images/2.png", "/static/images/9.png", "/static/images/5.png", "/static/images/11.png", "/static/images/6.png", "/static/images/12.png", "/static/images/3.png", "/static/images/0.png", "/static/images/19.png", "/static/images/4.png", "/static/images/15.png", "/static/images/18.png", "/static/images/1.png"];
    var imgs = [];
    for (var i = 0; i < img_files.length; i++){
      imgs[i] = document.createElement('img');
      imgs[i].src = img_files[i]; 
      imgs[i].style.display = 'block';
      imgs[i].style.width = '50px';
      imgs[i].style.height = '50px';
      document.getElementById('box').appendChild(imgs[i]);
    }

    const max_pos = self.innerWidth;
    function anim(elem, pos, dis){
      function move() {
        pos += dis;
        if (pos > max_pos) {
          pos = 0;
        }
        elem.style.transform = `translateX(${pos}px)`;
        requestAnimationFrame(move);
      }
      move();
    }

    for(var i = 0; i < 20; i++){
      anim(imgs[i], 0, Math.random()*60+20);
    }

 

이미지 안에 문자들이 담겨 있고 이미지에 대한 크기, 움직이게 하는 함수, 그것에 대한 애니메이션 효과를 반복문이 있다.

 

 

 

 

 

 

 

 

for(var i = 0; i < 20; i++){
  anim(imgs[i], 0, Math.random()*60+20);
}

 

 

일단 정신 사나우니까 이미지를 움직이는 반복문 안에 있는 'anim' 함수를 조작하여 멈춰보자.

 

anim 함수는 'anim(elem, pos, dis)' 방식으로 사용하며 각 순서에 따라 [이동시킬 이미지, 이미지의 초기 위치, 이미지가 한 번에 이동하는 거리]를 정한다.

 

따라서 이동하는 거리가 'Math.random()*60+20' 식에 따른다는 것이다.

 

이 부분을 조작하면..

 

 

플래그 값 일부

 

 

 

이렇게 움직이지 않게 만들 수 있다.

 

힌트에 따라서 플래그 값을 제출하면 문제가 풀린다.