마지막으로 소개할 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 헤리오

우선 좋은 정보를 알려주신 kyh1026님 감사합니다.

간단한 악성코드 분석툴(?)입니다.

툴이라기 보다는 사이트입니다. ^^;;

사이트는 http://anubis.iseclab.org/ 로 가시면 됩니다.

자기가 분석한다기보다 파일은 보내거나 사이트 주소를 입력하면 여기에서 분석을 해줍니다.


위의 박스에는 선택사항입니다.

File : 의뢰할 파일을 넣어줍니다. (8Mb 용량제한이 있습니다. 그리고 웬만하면 압축을 해서 올립니다.)

URL : 의뢰할 주소를 적어줍니다.


아래 박스에는 간단한 확인작업 입니다. 코드를 똑같이 적어주시면 됩니다.

그리고 제출버튼(Submit for Analysis)를 눌러줍니다.

분석을 하기 전 제출 페이지가 뜹니다.


악성코드 분석이 오래 걸릴 수 있기 때문에 아래의 URL을 기억해두고 나중에 들어가 보는 것도 좋은 방법입니다.

분석이 시작되고 시간이 표시됩니다. 조금 걸리니 다른 작업을 하셔도 됩니다.


끝나면 걸린 시간 및 보고서가 HTML, XML, PDF, Text 무려 4가지나 작성됩니다. 

결과물 중 HTML을 보면


각 각의 분석결과와 심각성을 표시해줍니다.


더 자세한 내용은 스크롤을 아래로 더 내리시면 있습니다.

'악성코드분석' 카테고리의 다른 글

악성코드 분석툴 - VirSCAN.org  (0) 2012.01.26
악성코드 분석툴 - Anubis  (0) 2012.01.08
악성코드 분석툴 - ThreatExpert  (0) 2011.12.30
Posted by 단신남

abex1 문제

하드를 CD-ROM 드라이버로 인식하게 바꾸라는 문제이다. 일단 올리디버거로 파일을 열어보겠다.

 

취약한 프로그램에 대한 리버싱을 하는 순서를 정리해보면

(1) 프로그램 흐름을 분석한다.

(2) 프로그램 문자열을 이용한 특정 이벤트 시점을 찾는다.

(3) 성공하였을 경우의 문자열 위치를 찾아 무조건 성공하도록 흐름을 변경한다.

 

첫 번째로 프록램흐름을 분석해보았으면, 문자열을 이용해서 특정 이벤트 시점을 찾아보겠다.



성공을 하게 되면 OK, I really 라는 문장이 뜬다는 것을 알수 있다. 이 주소를 보면 00402044인데 이 주소로 가보겠다.





화면에서와 같이 JE로 된 부분에는 좌측에 점프해서 이동하는 부분이 나타난다. 자세한 내용을 모르더라도 JE 부분이 “Nah...”문장과 “OK”문장을 표시되는 분기점임을 알 수 있다. JE는 점프명령어의 일종인데 JEJump if equal의 의미로서 ZF 플래그가 1과 같으면 점프를 하겠다는 뜻이다. 그냥 두면 점프를 하지 않으므로, 점프를 하도록 JEJMP로 변경해보겠다.



변경을 하니 OK 라고 뜨는 것을 알 수 가 있다.

 

다른 풀이 방법도 있다. 점프구문을 변경하지 않고, 리턴값을 변경시켜서 풀 수도있지만 간단하게 점프로 풀어보았다.

'예제' 카테고리의 다른 글

역분석 구조와 원리 1-1 jump 구 문제  (0) 2012.01.06
Posted by 엽잉