MalwareAnalysis <Lab05.dll>

 

 

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

- 0x1000D02E

 

DllMain : DLL의 메인 함수 DLL이 로드될 때 불림(4가지가 정의되어 있음 : dll 로드/언로드, thread 로드/언로드)

Names 탭을 누르면 Names Window 창이 뜨며, dllmain을 입력하면 해당 함수의 주소가 나온다.

 

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

- 0x100163CC

Imports 탭에서 gethostbyname을 입력하면 얻고자 했던 위치 정보가 나온다

 

3. gethostbyname을 호출하는 CALL 명령어는 몇 개인가?

- 9개

gethostbyname 함수 더블클릭 후 XREF 부분을 오른쪽마우스 -> jump to cross reference 후 확인 가능

XREF = 상호참조. 어디서 호출하는지 알려줌

 

 

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

- pics.praticalmalwareanalysis.com

 

gethostbyname : 서버 이름 또는 도메인(예. www.naver.com)으로부터 주소정보(IP Address)를 얻는다.

주소 정보는 local computer의 /etc/hosts 파일 또는 DNS 서버로 부터 얻는다.

G(주소) -> 10001757 입력

eax에 이름 정보가 있는 것을 확인할 수 있다.

그렇다면 eax는 어디에서 왔을까? 일단 10019040 주소에 있는 데이터를 가져와서(off_10019040)

0D 를 더하고 있다.

 

10019040에 위치한 값

1001 9194 + 0D = 1001 91A1

 

G -> 100191A1 입력

 

 

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

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

 

 

7. Strings 윈도우를 이용해 디스어셈블리 내의 문자열 \cmd.exe /c를 찾아보자. 어디에 있는가?

- 0x100101D0

Search -> text -> \cmd.exe /c 입력

 

 

8. \cmd.exe /c를 참조하는 코드 영역에서 무슨 일이 발생하는가?

- 공격자의 실행 명령어를 실행하기 위한 세팅 작업이 일어난다.

 

ex) \cmd.exe /c notepad : 메모장 프로그램이 끝날 때까지 다른 것을 실행하지 않음(다른 명령어를 받지 않음)

프로그램 버전에 따라 명령어 문자열을 달리함
대부분의 백도어의 형테가 이렇다고 한다. (문자열에 따른 계단식의 루틴)

 

9. 같은 영역 0x100101C8에서 dword_1008E5C4는 경로를 지정하는 전역 변수로 보인다. 악성코드는 어떻게 dword_1008E5C4를 설정하는가? (힌트 : dword_1008E5C4의 상호 참조를 이용하라)

- GetVersion이라는 함수를 통해서 커널버전을 저장한다.

 

100101C8
1008E5C4

10001767+22 지점에서 write 되고 있다.

10003695의 결과(eax)가 해당 부분에 쓰여지기 때문에 10003695 함수를 확인하러 가보자
GetVersionA 함수를 통해 eax에 값을 넣고 있다.

 

10. 0x1000FF58에서 서브루틴으로 수백 라인은 문자열을 비교하기 위한 일련의 memcmp 비교다. robotwork와 문자열 비교가 성공적으로 이뤄지면 무슨 일이 일어나는가? (memcmp가 0을 반환)

- robotwork는 작업 시간을 출력하는 것으로 보인다. 문자열도 만들고 네트워크를 통해 전송한다.

 

robotwork 문자열로 찾은 뒤 맞았을 때의 루틴을 따라가보자
call 부분의 함수 rename
바꾸고
그래프로 함수 동작 한눈에 파악

 

 

11. PSLIST 익스포트는 무슨 역할을 하는가?

- 프로세스 리스트를 분석

Exports - PSLIST - xref graph로 확인

 

 

12. 그래프 모드를 이용해 sub_10004E79 상호 참조 그래프를 그려보자. 이 함수에 진입하기 위해 호출하는 API 함수는 무엇인가?

- StartAddress → CreateThread()를 통해 백도어 함수를 진행한다.

 

해당 API 함수에만 기반을 두고 이 함수를 어떤 이름으로 변경하겠는가?

- my_checkLang

 

 

13. DllMain이 직접 호출하는 윈도우 API 함수는 몇 개인가?

- 너무 많다!

 

두 번째 깊이(depth of 2)에서 몇 개인가?

- 2~30개 일 것으로 추정

from, 깊이 설정

 

깊이가 2인 애들만 보면 됨

14. 0x10001358에서 Sleep 호출이 존재한다.(sleep까지 수밀리초 값을 파라미터로 갖는 API 함수) 코드 후반부를 보면 이 코드가 수행되려면 프로그램이 얼마동안 Sleep 하는가?

- 30초 

 

Sleep 함수

10019020으로부터 데이터(0x100192AC)를 가져와

0D를 더하고

여기에 있는 아스키 값("30")을

int형(30)으로 바꾸고(atoi)

3E8을 곱한ㄷㅏ.

 

따라서

30 * 1000 ms = 30 s

+ Recent posts