ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0x25.SSG - easy_linux_reversing
    0x.CTF 2018. 11. 9. 20:34

    0x25.SSG - easy_linux_reversing


    파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/easy_linux_reversing


    포너블만 풀다가 쉬어갈겸 잡았다가 하드코딩하면서 한 글자를 빠뜨려 꽤 오랜시간 의미없는 삽질을 했던 문제이다.



    문제는 간단하다. 사용자로부터 입력을 받고 해당 입력의 길이에 따라 인코딩 루틴을 진행한다. 사용자로부터 입력받는 문자열과 길이에 따라 값이 변경되니 decode_it.txt의 문자의 개수만큼 for문을 돌리며 s[i]을 역연산 하는 방식으로 진행하였다.



    익스플로잇 코드

    v8 = ['C', 'f', 'D', 'Z', 'q', 'B', 'r', 'p', 'R', 'W', 'j', '1', 'z']
    test = [222, -125, 83, -115, -116, -79, 189, -105, 195, 145, 211, 37, 208]
    v10 = ['T', 'z', '1', 'j', 'W', 'R', 'p', 'r', 'B', 'q', 'Z', 'D', 'f']

    v8_1 = [] # ord(v8)
    v10_1 = [] # ord(v10) + i
    and_v10 = [] # v10+i & 1
    xor_v8 = [] # XOR V8
    v10_ord =[] # ord(v10)

    for i in range(13):
        result1 = ord(v8[i]) # v8_1 -> ord
        v8_1.append(result1)

        result2 = ord(v10[i]) # v10_ord -> ord
        v10_ord.append(result2)
        result2 += i          # v10_1 = v10_ord + i
        v10_1.append(result2)

        result3 = v10_1[i] & 1 # and_v10 = v10_1[i] & 1
        and_v10.append(result3)

        result4 = v8_1[i] ^ test[i] # xor_v8 = v8_1[i] ^ v10+v7-i
        xor_v8.append(result4)

        flag = []
        chr_flag = ''

    for i in range(13):
        if and_v10[i] == 1:
            result = v10_ord[i] + xor_v8[i]
            flag.append(result)
        elif and_v10[i] == 0:
            result = xor_v8[i] - v10_ord[i]
            flag.append(result)
    print flag

    for i in range(13):
        try:
            chr_flag += chr(flag[i])
        except:
            pass

    print chr_flag



    '0x.CTF' 카테고리의 다른 글

    0x27.Whitehat Quals 2017 - hacking_team_manager  (0) 2018.11.29
    0x26.WITHCON 2017 - combination  (0) 2018.11.22
    0x24.SSG - fortune_cookie  (0) 2018.11.08
    0x23.0ctf 2018 - blackhole  (0) 2018.11.06
    0x22.CODEGATE 2015 - yocto  (0) 2018.10.31

    댓글

Designed by Tistory.