LEVEL 3

Typing Game Goes Hard

reversing
  • 문제 정보
  • 풀이 3
  • 난이도 투표 13
  • 질문 1
  • 최근 풀이자 81
  • 댓글 1
해당 문제는 Dreamhack Invitational 2025 Quals 에 출제된 문제입니다.

문제 설명

Description

When Typing Game gets harder

난이도 투표 13

질문 1

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
더 이상 진전이 안됩니다
for ( i = 0; i <= 1; ++i ) { puts("----------------------------------------------"); if ( i ) v0 = "HARD"; else v0 = "EASY"; printf("- %s MODE -\n", v0); puts("----------------------------------------------"); for ( j = 0; j <= 9; ++j ) { s2 = (char *)&unk_4060 + 64 * (unsigned __int64)(unsigned __int16)sub_15D4(); if ( i ) v1 = "[REDACTED]"; else v1 = s2; printf("Type this word as soon as possible: %s\n", v1); IDA로 디컴파일 했을 때 s2 에 입력해야 할 단어가 들어가고, 하드모드에선 단어가 [REDACTED]로 가려져 보이지 않습니다. 때문에 s2 의 주소를 찾고, 그곳에 들어있는 값을 읽어서 pwntools 의 sendline으로 보내려고 하고 있습니다. image.png 여기 보면 0x55555555ef20 이 주소는 항상 바뀌어서 이 곳을 읽는 것 같진 않고 0x7fffffffe108 이 주소가 s2가 들어있는 [rbp-0x58] 이라서 이 곳을 읽어야 하는 것 같습니다. 그래서 아래와 같이 익스 코드를 짰습니다 #!/usr/bin/python3 from pwn import * #p = remote('host1.dreamhack.games', 23234) p = process('./chall') e = ELF('./chall') rbp = 0x7fffffffe160 offset = 0x58 s2 = rbp - offset #easy mode for i in range(10): p.recvuntil('Type this word as soon as possible: ') ans = p.recvline().strip() print(f'{ans}') p.recvuntil('> ') p.sendline(ans) #hard mode for i in range(10): raw_data = p.read(s2, 100) # read 100 bytes ans = raw_data.split(b"\x00", 1)[0] #cut first null byte print(f'{ans}') p.recvuntil('> ') p.sendline(ans) 처음 이지모드에선 잘 되는데 하드모드에선 입력 대기 상태만 되고 더 이상 실행이 안되는 것 같습니다. 주소가 잘못된 건가요? 아니면 코드가 잘못된 건가요... 혹시 pwntools에서 메모리에 어떤 값이 쓰여 있고, 그 값을 읽을 수 있는 방법은 없을까요?
Okabe
LEVEL 3

Typing Game Goes Hard

reversing

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

krrr
세계수
출제된 지 30분 만에 풀이 완료!

최근 풀이자 81

탈퇴한 이용자
대표 업적 없음
dhki
대표 업적 없음
hack
Dreamhack Beta CTF 참여
Steadiness
대표 업적 없음
avatar
h4cky0u
대표 업적 없음
티엠다스
워게임: 1
avatar
sendol
대표 업적 없음
RefleSh
리버싱 입문
ma-an-jong
강의 수강: 1
avatar
비누스
강의 수강: 1

댓글 1

avatar
Rootsquare
해결사
재미있는 게임 해킹