이번 문제는 bof 문제와 다르게 바이너리 내에서 flag을 찾는 방식이다. pwnable.kr은 문제 하나하나가 새로운 방식이라 재밌는 것 같다.
일단 문제의 문구는 "아빠가 압축된(포장된) 선물을 줬어, 열어 봤어!"다. 리버싱 문제들을 어느정도 풀어봐서 그런지 packed라는 단어를 봤을 때 패킹(실행 압축) 돼 있지 않을까 생각이 들었다.
일단 ida를 통해 확인해봤지만 예상대로 패킹이 돼 있어 제대로 분석이 불가능한 상황 같다.
문자열 탭을 확인해보면 upx 관련 문자열이 보이는 것을 알 수 있다. 따라서 이 프로그램은 upx로 패킹됐다 가정하고 깔려 있던 upx 프로그램으로 언패킹 해봤다.
성공적으로 언패킹된 것을 볼 수 있다.
다시 ida로 까본다면 제대로 코드가 보이는 것을 볼 수 있다.
main 코드를 decompile 해보면 첫 줄에 malloc, strcpy 함수에 flag가 있다는 내용(?)의 문구를 출력해주는 것을 볼 수 있다.
일단 malloc 함수는 2번째 줄에 보이고 밑의 sub_400320은 strcpy 함수일 가능성이 있어 보인다.
ida로는 flag을 찾지 못해서 gdb로 동적 분석해봤다.
gdb로 확인해봤을 때 malloc 함수를 실행한 후 반환 값들을 rsi, rdi 레지스터로 옮기는 것 같다. 이 두 레지스터의 값을 확인해볼 필요가 있을 것 같다.(이 레지스터들이 malloc 함수를 실행해서 얻은 flag 값이 존재할 수도 있기 때문)
rsi, rdi를 문자열 형태로 확인해 보니 flag 처럼 보이는 문자열이 존재하는 것을 볼 수 있다.
rsi에서 나온 문자열 "UPX...? sounds like a delivery service :)"를 입력해보니 정답이었다.
'Wargame > Pwnable.kr' 카테고리의 다른 글
pwnable.kr [random] (0) | 2021.04.08 |
---|---|
pwnable.kr [leg] (0) | 2021.04.08 |
pwnable.kr [bof] (0) | 2021.04.04 |
pwnable.kr [collision] (0) | 2021.04.02 |
pwnable.kr [fd] (0) | 2021.04.01 |