티스토리 뷰
오늘 풀 문제는 [Toddler's bottle]의 4번째 문제 flag.
이 문제 지문에 papa bought me a packed present! 라고 적혀 있는 걸 보아 패킹되어 있는 바이너리를 언패킹 하는 문제라는 것을 알 수 있었다.
패킹되어있는 바이너리는 objdump 로 파일의 헤더를 확인하거나 디스어셈블등이 되지 않는다.
file '파일이름'으로 파일 정보를 확인해도 평소에 나오는 정보보다 훨씬 적은 정보만 나오는 것을 확인 할 수 있다.
바이너리 패킹 확인은 윈도우에서 더 쉽게 확인 할 수 있는데 PEID 를 이용해 대상 프로그램을 스캔 해 확인 할 수 있다.
-Binary Packing
실행 압축. 바이너리 패킹은 바이너리 디스어셈블을 방지 하기 위한 리버싱 방지 기법이다.
압축을 푸는 과정 없이 일반 프로그램처럼 바로 실행 가능하다.
패킹이 되어있는 바이너리는 원본코드 분석을 할 수가 없기 때문에 언패킹을 진행 해줘야 한다.
또한 UPX,Upack, ASPack, Petite, MEW, MPress, KKrunchy, RLPack Basic, FSG 1.33, FSG 2.0, nPack 등이 있다.
=패킹 언패킹 기본 개념
=패커들 분석
https://sanseolab.tistory.com/10
-UPX unpack
해당 문제에서 사용된 패커는 UPX.
upx는 오픈 소스로 존재하고 해당 패커를 다운받아서 패킹과 언패킹을 진행할 수 있다.
github에서 upx 리눅스용 툴을 다운 받아주면 된다.
-d 옵션이 바로 패킹을 푸는 옵션이다.
-풀이
gdb 를 이용해서 디스어셈블 해보면 +32에 flag 값을 옮긴다고 적여 있다. 그러면 39번째에는 옮겨진 flag값이 PTR에 저장되어 있을 것이다.
따라서 39번째에 브레이크를 걸고 실행시켜보면 아래와 같이 플래그가 나온다.
이 문제를 통해서 바이너리 패킹과 언패킹 방법에 대해서 알 수 있었다.
'Write Up > pwnable.kr' 카테고리의 다른 글
pwnable.kr)mistake_연산자 우선 순위 (2) | 2019.04.05 |
---|---|
pwnable.kr)shellshock (0) | 2019.04.02 |
pwnable.kr)bof_버퍼오버플로우 (2) | 2019.03.29 |
pwnable.kr)cmd2_command함수_필터우회 (0) | 2019.03.25 |
pwnable.kr)cmd1_리눅스 환경변수_strstr() (2) | 2019.03.25 |
- Total
- Today
- Yesterday
- MVVM
- Android
- DataBinding
- exception
- 웹 MVC
- androidstudio
- 에러
- reversing.kr
- pwnable.kr
- 리버싱기초
- 리버싱.kr
- 안드로이드
- 뷰모델
- CTF
- 자바
- 정보보안
- Java
- reversing.kr풀이
- 모바일리버싱
- 코드로 배우는 스프링 부트
- 펌웨어 분석
- 동적분석
- NumberFormatException
- Spring
- AndroidX
- writeup
- 스프링부트
- 앱분석
- 칼리리눅스
- 포너블.kr
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |