[2025 Codegate 예선] - Write Up & 후기

2025. 5. 26. 14:49·CTF

# Intro.

2025. 03. 29. 토요일에 개최된 2025 Codegate CTF에 참가했다

이 대회는 내가 작년에 처음으로 참가해본 외부 CTF이고, 규모가 컸던 대회라서 기억에 남는다

그래서 학원도 쨰고 잔류해서 토요일 대회에 참가했다

대충 문제 풀이하고 후기 적겠다

 

# Result.

예선 탈락했다

예상은,,조금은 했지만, 이럴줄은 몰랐다

성적이 굉장히 저조하다

4문제 풀어서 1250점. 44등.

작년 60몇등. 

하고 싶은 말은 많지만, 풀이할 문제도 많이 없지만 풀이 대충 기록만 해놓고 후기를 적겠다 (+ 앞으로 공부 방향성)

# Hello Codegate

그냥 공지에 들어가면 있다

플래그는 기억이 안남

 

# inital - rev 

그냥 공지에 들어가면 있다

 

엄청 복잡해보이지 않는다 

"딸깍"

byte_4020 = [
    0x45, 0xB8, 0x1A, 0x80, 0x47, 0xCB, 0xD6, 0x19, 0x1D, 0x58,
    0x56, 0xE2, 0x36, 0xE4, 0x27, 0x65, 0xB1, 0x73, 0xE9, 0x5C,
    0x7E, 0x42, 0x7C, 0xDE, 0x71, 0x61, 0xF6, 0x48, 0xF5, 0x22,
    0x57, 0x1B, 0xAF, 0xDB, 0x8D, 0x8B, 0xC0, 0x2B, 0xD4, 0xA1,
    0xCC, 0xF2, 0xEB, 0xBE, 0x37, 0x38, 0xD9, 0x1E, 0x63, 0xE3,
    0x4D, 0x94, 0x13, 0xBA, 0x9C, 0x86, 0x10, 0x35, 0xFC, 0x4F,
    0xD7, 0xD3, 0x7B, 0x3A, 0xC9, 0x8F, 0xD0, 0x24, 0xF1, 0x05,
    0x2C, 0x53, 0x5E, 0x8C, 0x96, 0x3D, 0xA6, 0xA4, 0x6E, 0xCF,
    0x5B, 0x6D, 0x04, 0xED, 0x12, 0x7A, 0x17, 0x25, 0x34, 0xDC,
    0xAD, 0xE1, 0x20, 0x91, 0x75, 0x06, 0xC4, 0x74, 0x6F, 0x78,
    0x00, 0x6C, 0xC2, 0xAB, 0xA9, 0x9F, 0xB0, 0x16, 0x33, 0x90,
    0xCD, 0xB2, 0x3C, 0xAA, 0x9B, 0x51, 0x4E, 0x3F, 0x1C, 0x50,
    0xFA, 0x18, 0xE8, 0xB4, 0x54, 0xB9, 0x3B, 0x49, 0xF9, 0xB6,
    0x99, 0x9D, 0x7D, 0x0E, 0x66, 0xEF, 0xFF, 0x15, 0x97, 0x55,
    0x0F, 0xF8, 0x21, 0x2E, 0x83, 0xF3, 0x95, 0x0A, 0xA8, 0xBC,
    0x5D, 0xB5, 0x32, 0xFD, 0xF7, 0xD8, 0x26, 0x89, 0x64, 0x2F,
    0xA7, 0xCA, 0x0D, 0xEC, 0xC3, 0xFB, 0xAC, 0xB7, 0x09, 0xEE,
    0x84, 0x92, 0x79, 0x01, 0x07, 0xA2, 0x77, 0x4A, 0x02, 0x60,
    0x39, 0xA0, 0x93, 0xBD, 0x88, 0xC6, 0xE5, 0xE7, 0xCE, 0x23,
    0xBB, 0xDF, 0x85, 0xC1, 0x59, 0xEA, 0xD2, 0x9A, 0xE6, 0x31,
    0x14, 0xFE, 0xC5, 0x44, 0x11, 0x87, 0x67, 0xD1, 0x4B, 0xDA,
    0x6A, 0x52, 0xBF, 0x0B, 0xF4, 0x5A, 0x8A, 0x08, 0x28, 0xA3,
    0x7F, 0x30, 0x70, 0x9E, 0x2D, 0x0C, 0x82, 0xAE, 0x40, 0x68,
    0x43, 0x76, 0xE0, 0x3E, 0x8E, 0x2A, 0x4C, 0xA5, 0xD5, 0x69,
    0x72, 0xC8, 0x81, 0x6B, 0x46, 0xC7, 0xB3, 0x1F, 0x5F, 0x98,
    0x29, 0xF0, 0x62, 0x03, 0xDD, 0x41
]

byte_4120 = [
    0x36, 0xE2, 0x2E, 0x86, 0x6D, 0x24, 0xCD, 0x94, 0x1A, 0x1A,
    0x46, 0x9B, 0x49, 0x83, 0x61, 0x15, 0x20, 0xB2, 0x47, 0xEA,
    0x0D, 0x42, 0xE9, 0x3D, 0xE4, 0x74, 0x1B, 0x16, 0x8B, 0x54,
    0x2E, 0xAA
]

def rotate_left(val, shift, bits=8):
    shift %= bits
    return ((val << shift) | (val >> (bits - shift))) & ((1 << bits) - 1)

# Reverse the sub_11A9 transformation
s_after_xor = []
for j in range(32):
    rot_amount = j & 6
    rotated_val = rotate_left(byte_4120[j], rot_amount)
    try:
        original_byte = byte_4020.index(rotated_val)
        s_after_xor.append(original_byte)
    except ValueError:
        print(f"Error: Could not find {rotated_val} in byte_4020 at j={j}")
        exit()

# Reverse the XOR transformation
xor_sum = 0
for i in range(31):
    xor_sum ^= s_after_xor[i]

original_s0 = s_after_xor[31] ^ xor_sum ^ s_after_xor[0]

original_s = [0] * 32
original_s[0] = original_s0

current_xor = original_s[0]
for i in range(1, 32):
    original_s[i] = current_xor ^ s_after_xor[i - 1]
    current_xor = original_s[i]

# Verify the last XOR
assert (original_s[31] ^ s_after_xor[0]) == s_after_xor[31], "Verification failed"

# Convert to flag
flag = bytes(original_s).decode('latin-1')
print(f"Flag: {flag}")

 

# Encrypted_flag - crypto

걍 복구해주면 된다

import math
from sympy import nextprime
from Crypto.Util.number import long_to_bytes, inverse

n = 54756668623799501273661800933882720939597900879404357288428999230135977601404008182853528728891571108755011292680747299434740465591780820742049958146587060456010412555357258580332452401727868163734930952912198058084689974208638547280827744839358100210581026805806202017050750775163530268755846782825700533559
e = 65537
c = 7728462678531582833823897705285786444161591728459008932472145620845644046450565339835113761143563943610957661838221298240392904711373063097593852621109599751303613112679036572669474191827826084312984251873831287143585154570193022386338846894677372327190250188401045072251858178782348567776180411588467032159

approx = math.isqrt(n)
while True:
    if n % approx == 0:
        p = approx
        q = n // p
        break
    approx -= 1

phi = (p - 1) * (q - 1)
d = inverse(e, phi)

m = pow(c, d, n)
flag = long_to_bytes(m)
print("Recovered flag:", flag)

 

# ping_tester - web

그저 commend injection

서버 닫혀서 기억은 안나는데 ls; cat flag뭐 이런식으로 했던것 같다

 

여기까지 대회 기간동안 푼 문제


대회 이후 업솔빙 or 풀이 방법을 확실하게 안 문제등등 (못푼거)

 

# Bright - AI

이 문제에 12시간을 투자했다

점심시간부터 이 문제를 보았는데 대충 뭘 요구하는지 알것 같았고, 풀 수 있을 줄 알았다

풀이자가 0명이라서 자신은 없었지만, 뭐 다른 문제도 자신있는건 아니라 그냥 이거 풀었다

 

밥 먹고 좀 쉬었다가 문제 보기 시작했는데 막히는 부분이 생겼다

그래서 유기할까 다른 문제도 보긴 했지만, 차라리 지금까지 분석이라도 해놓은 이걸 도전하는게 맞다고 생각해서 시도했다

저녁쯤 되니 PWN 1번 풀이자가 많아졌고, 문제도 쉬운 문제라고 판단했지만, 아주 거만한 생각으로 풀어도 250점을 주니

"나는 1000점을 풀어서 본선 갈거야!라는 아주아주 거만한 생각을 가지고 분명히 시도했으면 풀었을 수도 있었겠지만 안풀고 이 문제만 잡았다

오후 9시부터는 그냥 모아니면 도 마인드로 이 문제만 팠지만, 결국 실패했다

기숙사에 밀반입해서 좀 해봤는데 자정까지 못풀었고, 이거 못풀면 못자겠다 싶어서 2시간정도 더 보니깐 결국에는 풀렸다,,,,,

 

서버가 닫혀서 로컬에서 도커 환경 구축해서 접속해서 풀었다

 

환경 구축 완

 

문제를 봤을때 뭔 암호화? 그런걸 주고 인증을 하라는게 있었는데 그건 그냥 gpt 돌려서 그냥 풀었다

 

대회때도 적대적 이미지 생성을 활용해서 문제를 푸려고 했지만 잘 안되었다

 

대회 끝나고 한참뒤에 문제 파일 도커 빌드하고 문제 풀어봤는데 잘 풀렸다

 

정말 허무하게도 처음부터 다시, 어떤 방향으로 풀어야할지 알고 푸니깐 서버 구축 완료와 동시에 한 40분정도만에 풀렸다

 

앞으로는 자만하지 말고 풀 수 있는건 꼭 풀어야겠다

'CTF' 카테고리의 다른 글

[ 2025 COSS 아주대 CTF - 본선] - Write Up & 후기  (5) 2025.07.25
[2025 COSS 아주대 CTF - 예선 ] - Write Up & 후기  (0) 2025.06.23
[2025 DIMI CTF Write Up] - Prob by pandas. with 후기  (3) 2025.03.25
[CTF] 제 5회 중부대학교 JBU CTF  (1) 2025.02.27
[CTF] 2024 ELECCON 일렉콘 예선  (0) 2025.02.27
'CTF' 카테고리의 다른 글
  • [ 2025 COSS 아주대 CTF - 본선] - Write Up & 후기
  • [2025 COSS 아주대 CTF - 예선 ] - Write Up & 후기
  • [2025 DIMI CTF Write Up] - Prob by pandas. with 후기
  • [CTF] 제 5회 중부대학교 JBU CTF
Hello🖐️I'm pandas from KDMHS
Hello🖐️I'm pandas from KDMHS
한국디지털미디어고등학교 23기 웹 프로그래밍과에서 해킹을 공부하고 있는 pandas입니다.
  • Hello🖐️I'm pandas from KDMHS
    웹 프로그래밍과에서 시스템 해킹 공부하기
    Hello🖐️I'm pandas from KDMHS
  • 공지사항

    • Hello I'm pandas 🖐️
    • 분류 전체보기 (26)
      • CTF (9)
      • 디미고 (8)
      • 백준 (1)
      • Dreamhack (5)
      • INFO (3)
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

    디미고
    DreamHack
    팰린드롬
    reversing
    pwnable
    Python
    info
    백준
    해킹
    웹프로그래밍과
    docker
    ctf
    Baekjoon
    회고록
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Hello🖐️I'm pandas from KDMHS
[2025 Codegate 예선] - Write Up & 후기
상단으로

티스토리툴바