티스토리 뷰

반응형

오늘 풀 문제는 [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://manggoo.tistory.com/3

 

[Packing Unpacking] 기본 개념

개요 pack이라는 단어는 (짐을) 싸다, (물건을) 포장하다 라는 의미를 가지고 있다. packing이라는 것은 단어 뜻에서 알 수 있듯이 무엇을 포장을 하는 것인데, 이것은 Code(프로그램)에 대한 지적 재산권(?)을 보..

manggoo.tistory.com

 

=패커들 분석

https://sanseolab.tistory.com/10

 

 

패커들 분석

패커와 관련된 대부분의 문서에서는 단지 MUP 방식만 간단하게 설명되어 있는것 같다. 물론 리버스 엔지니어링을 하는 입장에서는 대부분의 패커가 프로텍터처럼 안티 디버깅 방식을 사용하는 것도 아니고, 압축..

sanseolab.tistory.com

 

-UPX unpack

해당 문제에서 사용된 패커는 UPX.

upx는 오픈 소스로 존재하고 해당 패커를 다운받아서 패킹과 언패킹을 진행할 수 있다.

github에서 upx 리눅스용 툴을 다운 받아주면 된다.

 

 

-d 옵션이 바로 패킹을 푸는 옵션이다.

 

-풀이

gdb 를 이용해서 디스어셈블 해보면 +32에 flag 값을 옮긴다고 적여 있다. 그러면 39번째에는 옮겨진 flag값이 PTR에 저장되어 있을 것이다.

 

따라서 39번째에 브레이크를 걸고 실행시켜보면 아래와 같이 플래그가 나온다.

 

이 문제를 통해서 바이너리 패킹과 언패킹 방법에 대해서 알 수 있었다.

반응형
Comments
댓글쓰기 폼