Reversing/윈도우 악성코드

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 05-01] -2

대장흰둥 2021. 2. 2. 17:30

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

robotwork와 문자열 비교가 성공하면, sub_100052A2 함수가 실행된다

다음 함수에서는 Robot_WorkTimes, Robot_WorkTime, SOFTWARE\Microsoft\Windows\CurrentVersion 의 레지스트리에 접근한다.

 

10. PLIST 익스포트는 무슨 역할을 하는가?

Expots View PSLIST 의 주소는 0x 10007025이다

첫 번째 함수는 시스템 플랫폼과 운영체제 버전을 검사한다.

조건문의 두 가지 함수 모두 프로세스 리스트를 받아온다.

결과적으로 PSLIST는 버전 확인 후, 프로세스 리스트를 받아온다.

 

11. 그래프 모드를 이용해 sub_10004E79 상호 참조 그래프를 그려보자. 이 함수에 진입하기 위해 호출하는 API 함수는 무엇인가? 해당 API 함수에만 기반을 두고 이 함수를 어떤 이름으로 변경하겠는가?

우클릭  xref from 을 검색하면 그래프를 그릴 수 있다.

해당 함수에서 GetSystemDefaultLangID 를 파악하는 것으로 보아, 사용자의 기본 언어를 파악하고 이를 공격자에게 보내는 코드로 생각할 수 있다.

 

12. DllMain 이 직접 호출하는 윈도우 API 함수는 몇 개인가? 두 번째 깊이(depth of 2)에서 몇 개인가?

depth 1에서 확인 결과, strncpy, _strnicmp, CreteThread, strlen 을 호출하고 있다.

 

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

sleep의 인자는 10019020 오프셋의 13번째 값 * 1000 이다.

1001902013번째 값은 30이고 여기에 1000을 곱하므로 30000밀리초 -> 30초만큼 sleep 한다

 

14. 0x10001701에서 소켓을 호출한다. 세가지 파라미터는 무엇인가?

af, type protocol의 세가지 파라미터가 차례로 6, 1, 2 push 된다.

 

15. 소켓과 IDA Pro에서 명명한 심볼 상수 기능을 이용하여 이 파라미터를 좀 더유용하게 할 수 있겠는가? 변경 후 파라미터는 무엇인가.

MSDN 홈페이지를 살펴보면

→ 다음의 값으로 변경할 수 있음을 알 수 있다. 

 

16. 명령어 opcode 0xED 의 사용법을 찾아보자. 이 명령어는 VMware 탐지를 수행하는 VMXh 매직 문자열로 사용한다. 이 악성코드는 이를 이용하고 있는가? VMware 을 탐지하는 다른 증거가 있는가?

Binary search 기능을 이용해 ED를 검색해 보았다.

opcode ED 인 어셈블리는 in eax, dx이다.

in eax, dx 윗부분에 VMXh 문자열이 보인다.