ugonfor.
Home
  • 분류 전체보기 (86)
    • Study (39)
      • Paper Review (3)
      • 대회 후기 (7)
      • Reversing Skills (5)
      • Develop (1)
      • Pwnable (2)
      • Tips (21)
    • Writeup (39)
      • Wargame_Writeup (31)
      • CTF_Writeup (8)
    • CS (0)
      • Algorithm (0)
      • Operation System (0)
      • Computer Network (0)
    • Etc (8)
      • Life (7)
Home
  • 분류 전체보기 (86)
    • Study (39)
      • Paper Review (3)
      • 대회 후기 (7)
      • Reversing Skills (5)
      • Develop (1)
      • Pwnable (2)
      • Tips (21)
    • Writeup (39)
      • Wargame_Writeup (31)
      • CTF_Writeup (8)
    • CS (0)
      • Algorithm (0)
      • Operation System (0)
      • Computer Network (0)
    • Etc (8)
      • Life (7)
블로그 내 검색
About Me

ugonfor.

보안 위주로 가볍게 작성하였습니다 :)

  • Writeup/CTF_Writeup

    IDAPython Example - MidnightSun CTF 2021 Qual - labyrevnt

    2021. 4. 11.

    by. ugonfor

    github.com/sajjadium/ctf-archives/tree/master/MidnightSun/2021/Quals/rev/Labyrevnt
    Can get the binary on this link.
    github.com/inforion/idapython-cheatsheet
    If you're not familiar to IDAPython, read above cheatsheet.

    And this is the solution code for this chall.
    It was good for training IDAPython.

    import ida_bytes
    walk_end = 0x59BE5 
    
    eip = walk_end
    _input = []
    _addr = []
    _str = []
    _need = dict()
    print("START")
    cnt = 0 
    while 1:
        cnt += 1
        if cnt > 1000: break
        for i in XrefsTo(eip):
            tmp = i.frm
            break
        eip = tmp # call inst
        prev = prev_head(eip)
        
        for i in XrefsTo(prev):
            tmp = i.frm
            break
        _jmp_a = tmp
    
        j_prev = prev_head(_jmp_a) # cmp 
        
        _addr.append(hex(j_prev))
        
        if get_operand_value(j_prev, 1) == 0:
            data_ins_addr = prev_head(prev_head(prev_head(j_prev)))
            print(hex(data_ins_addr))
            data = get_operand_value(data_ins_addr,1)
            print(hex(data))
    
            target_value = j_prev - data + 0x100000000
            idx = 0
            for i in range(40):
                if target_value == ida_bytes.get_dword(data + 4*i):
                    idx = i
                    break
            _str.append(chr(idx + get_operand_value(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(prev_head(j_prev))))))))))),1)))
        
        else:
            _str.append(chr(get_operand_value(j_prev, 1)))
    
    
    
        _need[hex(j_prev)] = chr(get_operand_value(j_prev, 1))
    
        _ft = get_next_func(get_prev_func(eip))
        if _ft == 0x625B : break
        eip = _ft
    
    print(_addr)
    print("".join(_str[::-1]))

    연합하여 했는 데, 다들 잘하시는 분들도 많고 열정 가득한 분들도 많아서 재밌게 한 듯.
    근데 문제가 진짜 게싱요소가 너무 많아서 좀;;

    오랜만에 24시간 풀타임 뛰어서 재밌긴 했는 데, 문제 퀄이 게싱없이는 못푸는 거도 많고, 여기저기 좀 허술한 부분들이 많아서 아쉽기도 했습니다...

    저작자표시 비영리 변경금지 (새창열림)

    'Writeup > CTF_Writeup' 카테고리의 다른 글

    [ ASIS CTF 2020 ] Latte  (0) 2020.07.06
    [ Defenit CTF 2020 ] Lord fool song remix  (0) 2020.06.08
    [ Defenit CTF 2020 ] momsTouch  (0) 2020.06.08
    [ RCTF 2020 ] rust-flag  (0) 2020.06.02
    [ CODEGATE 2020 Preliminary ] RS(702pt) wripte-up  (3) 2020.02.09

    댓글

    관련글

    • [ ASIS CTF 2020 ] Latte 2020.07.06
    • [ Defenit CTF 2020 ] Lord fool song remix 2020.06.08
    • [ Defenit CTF 2020 ] momsTouch 2020.06.08
    • [ RCTF 2020 ] rust-flag 2020.06.02
    맨 위로
전체 글 보기
  • Githug
  • Facebook
  • ugonfor.kr
  • Portfolio
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Designed by Nana
블로그 이미지
ugonfor

티스토리툴바