연구실:System

[DreamHack워게임] Out Of Boundary ex3

작성자 정보

  • za9uar 작성
  • 작성일

컨텐츠 정보

본문

//oob-3.c
#include <stdio.h>
int main(void) {
   int idx;
   int buf[10];
   int dummy[7];
   int win;
   printf("Which index? ");
   scanf("%d", &idx);
   
   if(idx < 0)
       idx = -idx;
   idx = idx % 10; // No more OOB!@!#!
   printf("Value: ");
   scanf("%d", &buf[idx]);
   printf("idx: %d, value: %d\n", idx, buf[idx]);
   if(win == 31337){
       printf("Theori{-----------redacted---------}");
   }
}

 

풀이 힌트

(0)  idx % 10 결과를 -8로 만들어야한다.

(1) 4 bytes int의 최대 값은 2147483647 이다. (2진수로 0111 1111 1111 1111) 

  •   ad3d7e722499ccf77af2297f4f71bf1aea6e1365g7wp.png

 

(2) 2147483648은 MSB(최상위비트) 값이 음수여서
4byte int 의 최소값은 -2147483648 이다. (2진수로 1000 0000 0000 0000)

 

(3) signed 4byte int 에서는 2147483648 과 -2147483648 이 똑같다고 할 수 있다.

 

(4) -2147483648 % 10 = -8 이므로 win 변수에 접근할 수 있게된다.
(buf 가 4byte int 배열로 선언되어있기때문에 4바이트씩 접근해서 -8번째에있는 win 변수에 도달할수있음)

 

※ 드림핵 snwo 님 Q&A 참조

https://dreamhack.io/forum/qna/274/ 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 댓글이 없습니다.