안녕하세요. Message입니다.

<실전 악성코드와 멀웨어 분석> 책의 실습 문제 5-1을 분석합니다.

분석환경은 Windows 7 Ultimate 64x / Vmwre 12.1.0 build 입니다.

 

#1 : http://redscreen.tistory.com/66

#2 : http://redscreen.tistory.com/67

#3 : http://redscreen.tistory.com/68

#4 : http://redscreen.tistory.com/71

 

 

------------------------------------------------------------------------------------------------------------------------------------------

0. 준비

------------------------------------------------------------------------------------------------------------------------------------------

OllyDbg쓰다가 IDA쓰다가 이클립스로 개발하다가...보면 가장 혼동되는게 단축키입니다.

원래는 그때마다 검색해서 다시 감잡은 다음에 작업에 들어갔는데,

이참에 IDA에서 자주 쓰는 단축키만 정리하겠습니다.

 

일반

---------------------------------------------------------

- TextView와 Graph 화면전환 : SPACE 

- Strings Window : Shitft+F12

- 함수이동 : Ctrl+p 

- 이름검색 : Ctrl+L

- XREF 검색 : Ctrl+X 

- 주소이동 : g 

- 전단계 이동 : ESC

- 코드수정 : Alt+F2

- Text 검색 : Alt+t

- Quick View : Ctrl+1 

---------------------------------------------------------

 

디버그

--------------------------------

- BreakPoint : F2

Debugging Start : F9

- Debugging Exit : Ctrl+F2

- Step Into : F7

- Step Over : F8

--------------------------------

 

그래프모드 화살표 색상

---------------------------

------▶  False

------  True

------  무조건 Jump

---------------------------

 

------------------------------------------------------------------------------------------------------------------------------------------

1. DllMain의 주소는 무엇인가?

------------------------------------------------------------------------------------------------------------------------------------------

Function Name Window에서 DllMain을 찾습니다.

처음에는 DllEntryPoint로 착각했지만, DllMain이 따로 있었습니다.

둘의 차이점을 검색해보았으나, 명확하게 딱 이거다 라고 되어 있는걸 못찾았습니다.

스페이스키를 누르고 그래프를 살펴보았더니 DllEntryPoint가 먼저 호출되고 난 이후에

자신이 받은 인자값을 그대로 넣어주면서 DllMain을 호출하더군요.

답 : text 섹션 / 0x1000D02E

 

Tip. main에 관하여

RedAlert 에서 배포된 PE구조 문서를 보니

일반적으로 EntryPoint는 main, wmain, WinMain, wWinMain 으로 착각하기 쉽지만 (처음보는 함수도 많네요)

진정한 main은 CRT main이라고 합니다. CRT main은 C/C++ run-time startup 코드라고 불리는 함수가 따로 존재하는데,

이는 Linker에 의해 실행파일이 생성될 때 합쳐치며, main 함수도 CRT main에 의해서 호출되는 함수입니다.

CTR main은 Command-Line argument와 환경변수를 채우고,

heap 초기화, 전역변수 객체 생성자 호출, 전역변수 초기화 등을 수행합니다.

종류는 mainCRTStartup, wmainCRTStartup, WinMainCRTStartup wWinMainCRTStartup 등등..

이부분은 따로 숙지할 필요가 있겠네요.

 

 

------------------------------------------------------------------------------------------------------------------------------------------

2. Imports 윈도우를 이용해 gethostbyname을 탐색해보자. 임포트 위치는 어디인가?

------------------------------------------------------------------------------------------------------------------------------------------

Import Window에서 getbyhostname을 찾습니다.

윈도우에 포커스를 두고, gethostbyname을 타자치면 검색 기능이 활성화되어 쉽게 찾을 수 있습니다.

gethostbyname을 더블클릭하면 디스어셈블리창으로 이동되며, 주소값을 알아낼 수 있습니다.

답 : idata 섹션 / 0x100163CC

 

------------------------------------------------------------------------------------------------------------------------------------------

3. gethostbyname 함수는 몇번 호출되는기?

------------------------------------------------------------------------------------------------------------------------------------------

디스어셈블리창에서 Ctrl+X 를 입력하면 xref로 표기되는 상호참조 리스트 윈도우가 호출됩니다.

type은 호출(p)읽기(r)로 표시됩니다.

sub_10001074, sub_10001365, sub_10001656, sub_1000208F, sub_10002CCE 등 5개의

서로다른 함수에서 9번 호출됨을 알 수 있습니다.

답 : 5개의 함수에서 9번 호출

 

 

------------------------------------------------------------------------------------------------------------------------------------------

4. 0x10001757에 위치한 gethostbyname 호출을 보면 어떤 DNS 요청이 이뤄지는지 알 수 있는가?

------------------------------------------------------------------------------------------------------------------------------------------

.gethostbyname 함수는 도메인이름ex) www.daum.net 하나를 파라미터로 받는 함수입니다

상호참조 리스트에서 P type의 메소드를 클릭하여 확인하면

EAX 레지스터를 이용하여 도메인 네임 인자를 받는 어셈블리코드를 볼 수 있습니다.

 

off_10019040 주소를 더블클릭하거나 G 기능을 이용하여 주소로 점프하면

아래와 같이 "[This is RDO]pics.practicalmalware...(생략)" 소스를 발견할 수 있습니다.

 

EAX 레지스터에 0Dh 주소값을 더하는 이유는

문자열의 [This is RDO] 값을 제외하고 "pics..." 부분을 포인터로 얻기 위함입니다. 

답 : pics.practicalmalwareanalysis.com

 

 

------------------------------------------------------------------------------------------------------------------------------------------

5. 0x10001656 서브루틴에서 IDA Pro는 지역변수 몇개를 인지하고 있는가?

6. 0x10001656 서브루틴에서 IDA Pro는 파라미터 몇개를 인지하고 있는가?

------------------------------------------------------------------------------------------------------------------------------------------

스페이스바를 이용하여 그래프모드로 전환후 0x10001656으로 가거나

G단축키를 이용하여 0x10001656으로 이동하면

아래와 같은 그림에서 지역변수와 파라미터의 개수를 확인할 수 있습니다.

답 : 지역변수 23개, 파라미터 1개 (arg_0= dword ptr 4)

 

 

 

posted by Red_Message