ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • amocafe
    개인공부/드림핵 2025. 2. 12. 23:27

    문제설명


    소스코드


    풀이

     

    이번 문제의 경우 비트 연산을 통해 나온 결과 값을 다시 초기 상태로 되돌려 해당 값 입력을 통해 FLAG를 획득하는 문제이다.

     

    소스코드 수행으로 생성된 문자열은 사진에서 볼수 있듯이 1_c_3_c_0__ff_3e 이다.

     

    소스코드 부분에 주석을 통해 코드를 설명한 상태이지만 다시한번 설명하면 아래와 같다.

     

    코드 설명

     

    초기 값을 세팅하는 단계이다.

     

     

    org 값에 대한 연산이 수행되어 이를 현재의 결과 값인 1_c_3_c_0__ff_3e 이 출력되게 하는 단계이다.

     

    org의 값이 82라 하자.

    이를 2진수로 변환할시 01010010이된다.

     

    i = 0 일때, 0만큼 쉬프트 연산이 수행되기에 0101 0010에 대해 우측 쉬프트를 할 시 그 값은 0101 0010이다.

    ( >> X : X의 값 만큼 화살표 방향으로 쉬프트 연산 적용, 비는 공간은 0으로 채우기)

     

    이후, & 0xf 즉 AND 1111을 수행할 시  res의 값은 0010(2)이 된다.

     

    i = 1일때, 4 * 1 = 4 즉, 4만큼 쉬프트 연산을 수행할 시 그 값은 0000 0101이된다.

    이후, AND 연산 수행 시 res의 값은 0101(5)이 된다.

     

    이때 주의 할점으로는 res의 값이 만약 0보다 크고 12보다 작은 값이며 NOT 연산 수행 시 그 값이 0x4(4)와 같을 경우, st 리스트에 '_' 문자로 변환하여 저장한다.

     

    그렇지 않을 경우는 값을 그대로 문자열로 저장하며, 0 또는 12보다 클 경우에는 16진수로 변환하여 st 리스트에 저장한다.

     

    위의 연산을 거쳐서 나온 값을 다시 비트로 변경 후 10진수로 바꿔준다면 문재를 해결 할 수 있다.

     

    해결코드

     

    해당 코드를 통해 10진수 값을 얻을 수 있었고 코드 실행을 통해 나온 값을 입력할 시 아래와 같이 FLAG 획득이 가능하다.

    '개인공부 > 드림핵' 카테고리의 다른 글

    random-test  (0) 2025.01.18
    Type c-j  (0) 2025.01.04
    baby-union  (0) 2025.01.02
    BypassIF  (0) 2025.01.01
    what-is-my-ip  (0) 2024.12.31
Designed by Tistory.