실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (1)


 

Notice : 해당 자료가 저작권등에 의해서 문제가 있다면 바로 삭제하겠습니다.
연구목적으로 사용하지 않고 악의적인 목적으로 이용할 경우 발생할 수 있는 법적은 책임은 모두 본인에게 있습니다.

Practical_Malware_Analysis
[구매하기]

실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-1
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-2
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-3
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-4
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-1
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-2
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-3
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-4
실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (1)

실습문제 다운로드 받는 곳 : http://nostarch.com/malware

실습 5-1
IDA Pro 만을 이용해 파일 Lab05-01.dll 내의 악성코드를 분석하라. 이실습의 목적은 IDA Pro를 직접 다루는데 있다. 이미 IDA Pro를 사용해 본 적이 있으면 다음 문제를 무시하고 악성코드 리버싱에 초점을 맞춰도 좋다.

질문
1. DllMain의 주소는 무엇인가?
A: IDA Pro를 시작하고 Lab05-01.dll을 로드하면 바로 DllMain이 보인다. 주소는 : 0x1000D02E
5-1-1

2. Imports 윈도우를 이용해 gethostbyname을 탐색해보자. 임포트 위치는 어디인가?
A: Imports 윈도우를 열어 gethostbyname를 확인해보았다. 주소는 : 0x100163CC
5-1-2

3. gethostbyname에 함수는 몇 개인가?
A: 위의 Imports 에서 찾은 gethostbyname 함수를 더블 클릭해보면 IDA View 에서 위치를 확인할수 있다.
5-1-3

여기서 Ctrl+x를 눌러 상호참조를 확인하면,
5-1-4

5개의 함수(sub_10001074, sub_10001365, sub_10001656, sub_1000208F, sub_10002CCE)에서 9번의 호출이 있는 것을 볼 수 있다.(p는 호출되는 부분, r은 읽는 부분)

4. 0x10001757에 위치한 gethostbyname 호출을 보면 어떤 DNS요청이 이뤄지는지 알 수 있는가?
A: 먼저 G키를 눌러 해당 위치로 이동한다.
5-1-6

해당위치에 가보면 gethostbyname 호출하는 부분이 보이고 조금위에 off_10019040 에 0Dh를 더한값을 파라미터로 전달하여 호출하는 부분이 보인다.

off_10019040 을 더블클릭하여 따라가보면,
5-1-5

[This is RDO]pics.praticalmalwareanalysis.com 문자열을 확인할수 있고 0Dh는 13이므로 13자 뒤부터인 pics.praticalmalwareanalysis.com을 전달하는 것을 볼 수 있다.

5. 0x10001656에 있는 서브루틴에서 IDA Pro는 지역변수 몇 개를 인지하고 있는가?
A : 0x10001656 으로 이동해서 확인해보면, IDA 가 자동으로 파라미터를 인식해서 변수명까지 붙여놓았다.
지역변수는 음의 offset 으로 총 23개가 있다.
5-1-7

6. 0x10001656에 있는 서브루틴에서 IDA Pro는 파라미터 몇 개를 인지하고 있는가?
A : 파라미터는 양의 offset 으로 arg_0 1개가 있다.

7. Strings 윈도우를 이용해 디스어셈블리 내의 문자열 \cmd.exe /c를 찾아보자. 어디에 있는가?
A : Strings 윈도우에서 \cmd.exe /c를 찾아보면, xdoors_d영역의 0x10095B34 위치에 있는 것을 확인할 수 있다.
5-1-8

8. \cmd.exe /c를 참조하는 코드 영역에서 무슨 일이 발생하는가?
A : 위의 창에서 더블클릭해보면 아래와 같은 부분을 볼 수 있고,
5-1-9

cmd.exe 바로 아래 부분을 보면, 아래와 같은 문구도 볼 수 있다.
Hi,Master
WelCome Back…Are You Enjoying Today?
Encrypt Magic Number For This Remote Shell Session

그리고 cmd.exe 부분은 sub_1000FF58 함수의 한 부분에서만 상호참조 되고 있는 것을 확인할 수 있다.
5-1-10

해당 상호참조를 따라가면 아래와 같은 부분을 확인할수 있다.
5-1-11

9. 같은영역 0x100101C8에서 dword_1008E5C4는 경로를 지정하는 전역변수로 보인다, 악성코드는 어떻게 dword_1008E5C4를 설정하는가?(힌트:dword_1008E5C4의 상호참조를 활용하라)
A : dword_1008E5C4를, 더블클릭하면, 아래의 코드를 볼 수 있다.
5-1-12

여기에서 상호참조를 확인하면, 3개를 확인할수 있다.
5-1-14

여기서 dword_1008E5C4를 변경하는 mov 부분을 더블클릭하여 확인해보면, 바로위의 sub_10003695 함수를 볼수 있다.
5-1-15

이 함수의 로직을 살펴보면, GetVersionExA함수를 호출하여 운영체제의 버전을 확인하는 것을 볼 수 있다.
5-1-16

10. 0x1000FF58에서 서브루틴으로 수백라인은 문자열을 비교하기 위한 일련의 memcmp 비교다. rotbotwork와 문자열 비교가 성공적으로 이뤄지면 무슨일이 일어나는가?(memcmp가 0을 반환)
A : 0x1000FF58 주소는 sub_1000FF58 함수를 가르키며, 함수가 상당히 크다, 쭉 쭉 내리면서 보다보면 문제에서 언급된 rotbotwork와 문자열 비교하는 부분을 확인할 수 있다.
5-1-17

문자열이 rotbotwork 와 일치하면, sub_100052A2을 call 하고 아니면, loc_10010468 으로 이동한다.

sub_100052A2 함수를 확인해보면, SOFTWARE\Microsoft\Windows\CurrentVersion 의 레지스트리값을 확인하는 것을 볼수 있다.
5-1-18

그리고 loc_10010468에서는 또 다른 문자열인 mbase 와 비교를 하는 것을 볼 수 있다.

문제가 21문제를 넘어가므로 10번 이후의 문제는 다음 post에서..ㅠㅠ

 


This entry was posted in Reading, Reversing and tagged , . Bookmark the permalink.

댓글 남기기