더 이상 진전이 안됩니다
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으로 보내려고 하고 있습니다.
여기 보면 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에서 메모리에 어떤 값이 쓰여 있고, 그 값을 읽을 수 있는 방법은 없을까요?
#gdb
#pwntools
#rev
작성자 정보
답변
1
🚫
대표 업적 없음
sub_15D4
해당 함수에서 리턴 되는 값을 EASY모드를 통해서 구할 수 있을 것 같습니다.