마지막으로 소개할 Anti Reversing으로 Packing이 되겠습니다.

Packing의 사전적 의미는 짐 싸기, 포장재 입니다.

Packing을 파일에 하니 파일을 포장한다라고 생각하면 되겠습니다.

Packing을 들어 보신분이라면 먼저 생각나는것은 아마 안티 리버싱을위한 기술일 것입니다.

하지만 Packing은 용량을 줄이기 위해서도 사용됩니다.
 
용량을 줄여도 정상적으로 실행되는 파일로 말이죠. 물론 보안을 위해서도 사용이 됩니다.^^

그럼 간단한 Packing 방법인 UPX Packing 방식을 tool을 사용하여 알아 보도록 하겠습니다.


이번 Packing에 사용될 파일입니다. 지금 저용량 보이시죠? 152kb 이것이 어떻게 변하는지
보도록 합시다.

일단 먼저 UPX Packing을 할 것이니 UPX를 실행 해보록 하겠습니다.


UPX폴더에서 실행을 하게 되면 UPX 명령어에 대한 설명이 나와있습니다.

어려운 영어가 아니니 읽어보시면 알것이기에 명령어에 대한 설명은 skip 하겠습니다.

그러면 명령어를 알아봤으니 Packing을 해봐야겠죠. Packing은 간단하게 cmd 명령어창에서 입력하면 됩니다.

 


아참 설명을 안드렸는데 Packing하고자 하는 파일은 upx tool이 있는 폴더에 복사를 해주셔야 합니다.

"upx -9 -o 파일명 패킹될파일명" 이렇게 입력해주시면 그림과 같이 파일사이즈가 얼마로 변했다, 비율은 어느정도이다, 포맷 형식은 이러하다, 파일명을 이러하다라는 정보를 알수 있습니다.

그럼 정말로 파일의 크기가 줄었는지 확인 해 볼까요


정말로 용량이 줄었군요......... 용량이 큰 파일을 이렇게 줄인다면 공간적인 효율면에서 당연히 좋을수 밖에 없겠군요.

anit reversing 면에서 보기로 하였는데 압축되는것만 지금은 보이는데요 그러면 이번에 ollydbg로 간단히 파일을 비교해 보도록 하겠습니다.

먼저 패킹되기전의 파일입니다.

 


첫번째 원본파일은 push 명령어로 시작하는군요

그럼 Packing 된 파일을 보겠습니다.

 



Packing된 파일은 ollydbg로 실행하니 pushad명령어부터 시작되는군요.

그리고 중간에 명령어들이 다른것을 확인 할수 있습니다.

그럼 push 와 pushad의 차이는 무엇일까요?

push는 스택 포인트를 4비트씩 감소를 하고 피연사자를 스택에 복사를 합니다.

pushad는 모든 범용 레지스터를 스택에 복사를 합니다.

차이라고 하자면 4비트씩이냐? 전부다냐? 라고 할 수 있겠네요.

즉 Packing된 파일은 기존의 레지스트들이 모두 스택에 복사되어 있는 상태이기에 용량이 줄어들게 됩니다.

그리고 정상 실행되는 이유는 프로그램이 실행되면 CPU가 PUSHAD 된 레지스트들을 POPAD 명령어에 의해 압축이 풀어지게 되어 정상 실행이 됩니다.

궁금하시다면 어셈블리어 명령어에 PUSHAD와 POPAD를 찾아 보시길 바랍니다.

마지막으로 Packing 되었는지 확인하는 툴로 확인 해보도록 하겠습니다.

 


먼저 Packing이 되지 않은 파일입니다. 일단 C로 작성되었다는것은 알아보겠네요.

다음 Packing 된 것을 보도록 하겠습니다.


뭔지 잘 몰라도 UPX 라는 문구가 나오는 것을 보니 Packing 되어 있다는것을 알수 있겠습니다.


이것으로 Anti Reveresing 기술에 대해 알아 보았습니다.

다음에는 지금까지 알아본 Anti Reversing 방법의 파회법에 대해 다루어 보도록 하겠습니다.
Posted by 헤리오


티스토리 툴바