본문 바로가기
보안/ctf 풀이

[리버싱] picoCTF unpackme

by 물보라를일으킬래 2022. 12. 27.

unpackme 문제

선행 지식:

upx의 개념

 

선행 다운로드: 외부에서 다운받는 실행파일은 항상 리눅스 가상머신 환경에서 열어볼 것이다

리눅스에 파이썬과 upx이 설치되어있는지 확인해야 한다 

 

 

upx 압축 해제 전

메인함수는 패킹되었기 때문에 보이지 않고 start 지점만 보인다 (동적분석도 당연히 안 된다)

hexdump로 보니까 upx를 통해 패킹됐다는 것을 알 수 있다

 

./upx명령어를 실행할 수 있게끔 패킹된 파일을(unpackme) upx디렉토리 하위에 옮겨준다 

참고로 저는 다운받은 파일 이름명칭을 제마음대로 바꿉니다! 타자치기도 간편하고 직관적으로 이해하기 쉽도록 하려구요

 

리눅스에 UPX를 깔고 -d 옵션을 줘서 패킹을 풀어준다

 

 

 

패킹을 풀어주고 IDA에 올리면 이젠 main을 찾을 수 있다

main 함수 중 핵심이 되어보이는 부분을 가져왔다 (추측)

if 문이 답과 연관이 깊은 것 같다 특히 비교하려는 754635가(추측)

밑에 있는 함수는 디컴파일로 분석해보려해도 난독화가 되어있는 것처럼 복잡해 보여 동적분석을 하기로 한다

 

 

수상한 숫자를 넣어보니 정답이 바로 나온다..

매우 간단해서 놀람

 

 

이 문제를 풀면서 얻은 점:

1. IDA로 풀다가 막히면 gdb, gdb로 풀다가 막히면 IDA

맨 처음 파일을 받으면 IDA로 열어서 대강 main함수를 파악해보고, gdb로 동적분석을 하는 방향으로 가면 굿 훨씬 수월하게 플래그를 찾을 수 있을 것 같다.

 

2. 대회별 플래그가 나오는 방식이 상이하니 센스로 알아차리는 게 .. 센스가 있어야 하는 게 .... 

 

 

댓글