My Study/Reversing2012.07.31 01:08

이번엔 VERA라는 리버싱 툴을 하나 소개하려합니다.


해당 툴 공식 페이지는 다음과 같습니다.

http://csr.lanl.gov/vera/


VERA는 컴파일된 실행 파일 분석을 위한 가상화 툴입니다. 해당 툴은 wxWidgets 패키지를 사용한 OpenGL framework에서 컴파일 되었습니다. 현재 버전은 오직 Windows XP와 그 이상의 OS에서 사용할 수 있습니다.


이 툴을 사용하는 이점들 입니다.

1. 리버서가 원하는 루틴을 쉽게 찾을 수 있다. 

   ( 메시지 기반 프로그램에서 루틴을 쉽게 찾음, 패킹된 파일에서 OEP를 쉽게 찾음 등등.. )

2. 프로그램의 실행 구조를 한눈에 파악할 수 있다.

3. 멋있는 리버싱을 할 수 있다.


이 그림 한장 딱 보면 어떠한 방법으로 툴을 이용하는지 알 것 같군요. 홈페이지에 있는 그림입니다.




아무튼..  저희는 바로 사용해볼 Intel PIN 기반 VERAtrace를 알아보겠습니다.


VERAtrace는 Intel PIN monitoring framework 기반으로 트레이싱을 하게 됩니다. 

VERA를 설치하면 폴더에 다음과 같은 파일들이 존재하는데 빨간색 네모친 파일들은 32bit 모드에서 실행하려면 가상머신으로 복사를 해야합니다. 즉, VERA로 프로그램을 분석하기 위해선 해당 파일과 trace 파일이 필요한데 trace 파일을 만들기 위해 필요하다는 것입니다.


먼저 trace 파일 생성 방법입니다.


pin.exe -t veratrace -- test.exe


test.exe가 타겟 프로그램 입니다. 저렇게 명령 프롬프트 창에 때려주시면 pin.exe가 존재하는 폴더에 "test.exe-[pid].trace"로 파일이 하나 생기게 됩니다. 파일에 있는 상태로 분석을 하는 것이 아닌 pin툴의 특성상 프로그램을 실행시켜 trace 파일을 쭉 생성해 나가는 방식입니다. 즉, 악성코드도 분석할 때 이 VERA로 분석을 하려면 실행을 시켜야한다는 것입니다.



이제 trace 데이터를 생성했으니 VERA 툴을 켜서 봐보도록 하겠습니다.

VERA툴을 켜서 trace 파일을 열어줍니다.


그러면 위와 같은 창이 나오는데 말 그대로 원본 파일을 지정해주고.. 아래는 GML 파일이 저장될 위치를 지정해주면 됩니다.

그리고 Finish를 누르면... trace 파일을 분석하게 되는데...


일단 제 OS는 Windows x64 7 입니다... 그래서 분석은 되지만..


... 이것만 보고는 오오오오 했습니다. 하지만.. ㅠ


확대를 해보니 안에 주소가 없습니다.... ㅠ_ㅠ ..........

주소가 없으면 무슨 소용이랍니까 -_-;;


그래서 vmware에서 windows x86 xp에서 해보기로 했습니다. 그 결과 xp에선 trace 파일 분석중 뜨면서.. 그대로 멈춰버리더군요. 10분을 기달려봐도 그대로.............. ㅠ 아...


마지막 Windows x86 7 에서 해봤습니다. 그 결과.. 잘 되긴하지만.. vmware 에서 돌리는 특성때문인지 몰라도 저 분석 그림을 좌우고 움직이고 싶어도 거의 안움직여진다는 것입니다. vmware에서 제공해주는 "VMware SVGA 3D"  그래픽 카드가 꼴은것 같습니다.  메뉴얼에도 추천 하드웨어라는 부분이 있는데.. 읽어보니 이렇다고 하네요.


VERA는 wxWidgets API를 사용한 OpenGL 시스템을 사용해 구현이 되었다. VERA에서 최고의 결과를 얻기 위해서는 하드웨어 그래픽 가속기를 사용할 것은 강력 추천한다. 이 코드는 Nvidia GTX 285 를 사용하면서 테스트를 하였고 그 후 다양한 그래픽 카드에서 테스트 되었다.


제 본컴의 그래픽 카드는 GeForce GT 440 으로 GTX 285보단 나은것 같습니다만.. 쩝..

그래서!! "vmware svga 3d hardware acceleration" 라고 구글에 쳐보았습니다.

http://www.vmware.com/support/ws5/doc/ws_vidsound_d3d_enabling_vm.html


뭐 이대로 해도 그대로더군요.. ㅠ 

Windows 64bit... reversing 하기엔 별로 좋지 않은 환경 같습니다 .ㅠ 흑...


여기서 포스팅을 잠시 중단하고 그러면 Windows 7 x86을 사용하고있는 제 놋북으로 다시 와서 계속해야겠습니다.


돌아왔습니다.

일단 이제 이 툴을 사용해 리버싱? 을 해보겠습니다.

지금부턴 제 주관적인 판단에 의한 분석이기 때문에 틀릴수도 있습니다.

이상한 부분이 있다면 지적해주세요 ㅎㅎ

먼저 간단한 crackme를 분석해보겠습니다. 여기서 풀진 않고 원하는 루틴을 찾아가는 정도까지만 하겠습니다.

이 툴의 목적이 그거니까요. 자세한 분석은 ollydbg를 열어서 해야겠죠.


Serial을 치고 Check를 누르면 Serial이 맞는지 틀린지 체크하는 아주 간단한 크랙미 입니다.


저렇게 한 10번정도 틀리고나서 VERA 툴로 봐보았습니다.


분석을 시작하기 전에 위 그래프에 있는 각 색에 대한 의미를 알아보겠습니다.

파란색 네모 - 프로그램 시작 부분

노란색 - 압축되지 않은 일반적인 루틴, 낮은 엔트로피를 가지고 있다.

어두운 녹색 - DLL / API 부분

밝은 보라색 - 잘 모르겠지만.. 아무튼 엔트로피가 낮은 일반적인 코드 부분

어두운 빨간색 - 높은 엔트로피를 가진 부분

밝은 빨간색 - 패킹된 exe 내부의 명령어가 아닌 부분

회녹색? - 매치되지 않은 오퍼랜드..


파란색에서 시작을 하면 얇은 검은색선을 따라 쭉 이어져 있는데 보통 저 부분은 프로그램 초기화 부분이라고 생각하면 됩니다.

얇은 선의 끝 부분을 가보겠습니다.


지금 API 함수들이 끝난 후 0x00401029라는 주소로 다 돌아오는 걸로 봐서 0x00401029 루틴은 WinProc 같은 함수인지 바로 알수 있었습니다. 그리고 검은색 선의 굵기에 따라 해당 루틴이 얼마나 자주 불리었는지도 알 수 있습니다.

아래쪽을 보면 MessageBox 함수가 보이는데 딱 봐도 저 MessageBox 함수가 있는 검은색 선을 따라가보면 비교 루틴을 알수 있겠군요.


마지막 그림입니다.


그 검은색 선을 따라가보니 GetDlgItemText 함수가 보였습니다. 저희가 친 Serial을 가져오는 부분이겠지요.

그러면 두 함수 사이에 있는 루틴(파란색으로 표시)만 분석해보면 쉽게 문제를 풀수 있겠지요.


사실은 이런 간단한 문제는 문자열을 검색한다던지 그냥 GetDlgItemText같은걸 바로 찾아서 풀면 더 간단하겠지만 엄청 복잡한 문제들 같은 경우에는 어떠한 결과가 나올지 모르겠군요.


그 다음은 패킹된 파일을 봐보겠습니다.

위에서 봤던 crackme를 가장 유명한 패커인 UPX 패커로 패킹을 한 후 VERA로 봐보겠습니다.


음.. 딱 봐도 대충 어떻게 프로그램이 돌아갔는지 확인할 수 있습니다. 왼쪽 위는 높은 엔트로피를 가진 부분으로서 언패킹이 진행되고 있는 부분으로 생각하면 됩니다. 그리고 오른쪽 아래는 딱봐도 언패킹이 끝나고 일반적인 루틴이 실행되고 있다는 것을 알 수 있습니다. 그러면 빨간색에서 색이 바뀌는 부분을 보겠습니다.


굳입니다. 더이상 설명할 필요는 없네요.

이번엔 .... 그냥 될지 안될지 모르겠지만... Themida로 패킹 후 봐보도록하겠습니다.. -_-;; 

어떻게 나올지 저도 궁금하군요.

대상 파일은 위 crackme로 했을 경우 프로그램이 뻗어버리길래 그냥 다른 crackme로 했습니다.

( reversing.kr 에 있는 Easy_Crackme )

Themida 버전은 v2.1.2.0 이고 보호옵션은 그냥 디폴트로 진행하였습니다.


왼쪽 그림은 Themida로 패킹한 파일이고 오른쪽 그림은 원본 파일입니다.

-_-........... 뭐 잘보면.. 돌아가는 꼴도 비슷하고..

지금 파란색 네모의 시작부분을 보면 원본 파일하고 패킹된 파일이 똑같습니다. 실제로 호출되는 주소도 똑같습니다. 

이는.... Themida로 패킹된 부분표시를 못해주는건가요?.. 뭐 어쨌든.. 파란색 다음 부분이 OEP 이므로 이걸로 Themida 패킹된 파일의 OEP는 1초만에 찾았습니다~~ ㅎㅎ -_-;; 아닌거 같은데 ㅠ_ㅠ ............... 하지만 전 확신하겠습니다.

다른 파일로 똑같이 해봐도 똑같은 결과가 나왔습니다. VERA는 Themida의 천적? ㅎㅎ


이번엔 마지막으로 VMProtect를 봐보겠습니다. 이건 쫌 색다른 결과를 내주길 바랍니다.

저도 하나씩 해보면서 블로깅 중이라 ㅋㅋ 잼있습니다 흠흠!

VMProtect버전은 v2.06 입니다. 보호옵션은 Ultra 입니다.


왼쪽은 VMProtect 로 패킹한 모습이고 오른쪽은 원본 파일입니다. 대박이군요 -_-.... 

일단 분석은 자세히 안해봤지만 빨간색에서 보라색으로 넘어오는 부분에서 엔트로피가 낮아지는 부분이므로 아마 저 부분에서 패킹이 풀리고 다른 루틴이 시작되는 것 같군요. 아무튼 이것도 분석하는데 큰 도움이 될 것 같습니다.



아무튼 결과적으로 VERA라는 툴은 리버싱을 하기 전 막막하게 시작하기보다 먼저 큰 숲을 한번 바라봐볼 수 있고 프로그램의 작동 방식을 어느정도 파악할 수 있다는 점에서 매우 큰 장점을 가진 툴 같습니다.

이 툴이 나온지 대략 1년 반정도 지난것 같지만 지금이라도 알아서 참 다행인것 같습니다 ^^ 안써보신 분들은 한번씩 써보시면 좋을 것 같습니다. 그 외에도 쓰는 사람의 능력에 따라 응용 범위는 엄청 클것 같네요.

Posted by Ezbeat