ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RC3 2016 CTF FLE
    CTF&Wargame/ETC 2016.12.02 23:29

    이번 문제는 희근이형이 추천해준 문제다


    파일 크기가 작고 비교적 쉽다

    argv로 인자를 받아서 flag랑 비교한다

    비교해서 맞다면 gottem을 출력하는데

    그 위에 보면 enc(dest)라고 함수가 하나있다


    이렇게 생겻는데 XOR연산을한다

    이걸 코딩하면


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    = [0x360x220x570x120x2A0x2E0x300x120x300x290x210x120x220x2D0x250x780x490x380x2B0x6A0x360x240x490x730x2B0x2E0x2F0x760x2A0x260x490x790x2B0x330x00]
    = [0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x250x7E0x250x200x25]
     
     
    print hex(0x36 ^ 0x64)
    print hex(0x22 ^ 0x61)
    print hex(0x57 ^ 0x64)
    print hex(0x12 ^ 0x3f)
    print hex(0x2A ^ 0x64)
    print hex(0x2E ^ 0x61)
    print hex(0x30 ^ 0x64)
    print hex(0x12 ^ 0x3f)
     
    for x in range(len(a)):
        if x % 4 == 0:
            print hex(a[x] ^ 0x64)
        elif x % 4 == 1:
            print hex(a[x] ^ 0x61)
        elif x % 4 == 2:
            print hex(a[x] ^ 0x64)
        elif x % 4 == 3:
            print hex(a[x] ^ 0x3f)
    cs

    이런식으로 코딩이 가능하다

    엄청 쉽다


    출력하면 이렇게 나온다

    내가 찾던 플래그가 아니란다

    여기서 충격을 받았는데

    이 바이너리를 살펴보면 알 수 있듯이

    더 이상 뭐 존재하는게 없다 파일크기도 작고 ㄷㄷㄷ

    힌트를 받아서 풀었는데


    파일 끝에 GALF가 있다 뒤집으면 FLAG이다


    코딩해서 파일을 뒤집고 FLAG를 대신 .ELF로 바꾼다


    이게 진짜 대단한게

    뒤집어서 헤더를 바꾸고 실행하면 처음 64비트 elf에서 32비트 elf로 바뀐다

    심지어 실행도된다 ㄷㄷㄷㄷ


    이런식으로 된다 


    A를 30개 입력한 이유는

    처음에 4개 입력했는데 eax가 5로 설정되어있었다

    1F는 31이므로 30개를 입력해줘야한다


    여기서 eax에 밑에 값들이 들어있다


    내가 입력한 문자열과 이값을 XOR한다 67 63까지 30만큼만


    그리고 XOR한 값과 최종적으로 비교한다

    그럼 다시 역으로 XOR한다


    1
    2
    3
    4
    5
    6
    7
    8
    = [0x610x680x4A0x640x140x1A0x470x190x030x720x360x080x6C0x1B0x2E0x6A0x6C0x1A0x550x670x680x760x460x640x7B0x1D0x500x7F0x670x63]
    = [0x330x2B0x790x490x260x2A0x760x2F0x2E0x2B0x730x490x240x360x6A0x2B0x380x490x780x250x2D0x220x120x210x290x300x120x300x2E0x2A]
    result = ""
     
    for x in range(len(a)):
        result += chr(a[x] ^ b[x])
     
    print result
    cs


    이렇게 짜면


    RC3-2016-YEAH-DATS-BETTER-BOII

    진짜 플래그가 나온다


    성공!

    'CTF&Wargame > ETC' 카테고리의 다른 글

    holyshield StudyScala  (0) 2016.12.19
    RC3 CTF GoReverseMe  (0) 2016.12.04
    RC3 2016 CTF FLE  (0) 2016.12.02
    f-secure reverse engineering challenge  (0) 2016.07.11
    SHARIF CTF dMd  (0) 2016.02.07
    sharif CTF SRM  (0) 2016.02.06

    댓글 0

Designed by Tistory.