분석 시작!
1. 기초 정적 분석
악성코드인지 정상적 코드인지 판단이 잘 안서나보다.
각각의 비율이 거의 비슷하다
PEView에서 확인한 결과, 컴파일 시간은 2017년 6월 17일 09:04:08 이다.
IAT (Import Address Table)
: Import하는 프로그램이 어떤 API가 필요한지에 대한 정보를 담고 있음
: 여기에 등록을 해놔야 프로그램에서 API 사용이 가능함
Kernel32.dll
: 대부분의 프로그램에서 사용되는 dll. 파일/하드웨어/메모리 접근 및 조작이 가능하기 때문에 주의해야 한다.
CreateMutex, ReleaseMutex 등
: Mutex? 중복 실행 방지를 위해 사용
이름이 있거나 없는 Mutex 오브젝트 하나를 만듬(동기화/원자성을 위해)
CreateThread, CloseHandle, GetCurrentThreadId, Sleep, WaitForSingleObject 등
: 윈도우는 스레드 기반으로 동작함. 프로세스는 작업 공간이며 스레드가 작업을 수행한다.
메인 스레드는 동작을 하며 부가적 다른 스레드를 만들 수 있고(CreateThread)
현재 스레드 Id 를 확인도 한다.(GetGurrentThreadId)
동기화를 위해 Sleep, WaitForSingleObject 등 이벤트 기반의 함수를 사용하여 스레드의 동작을 확인한다.
스레드 뿐만 아니라 다른 오브젝트(예:Mutex)를 닫을 때도 CloseHandle을 사용하여 반납한다.
GetStartupInfo, CreateProcess, TerminateProcess, GetCurrentProcess, GetProcessId, GetExitCodeProcess
: StartupInfo라는 구조체를 생성하고(GetStartupInfo) 이는 CreateProcess 시 필요함
TerminateProcess는 프로세스 종료 함수이며, GetCurrentProcess로 현재 프로세스의 Handle을 얻을 수 있다.
GetExitCodeProcess는 프로세스 종료 시 반환값을 리턴한다.
CreatePipe, PeekNamedPipe, ReadFile, WriteFile 등
: Pipe? 프로세스끼리의 통신을 위한 것
파이프를 생성하여(CreatePipe) 파이프로부터 데이터를 읽고(PeekNamedPipe)
ReadFile, WriteFIle을 통해 오브젝트(파일, 파이프 등)에 데이터를 쓰고 읽는다.
GetTickCount, QueryPerformanceCounter 등
: 시간 관련 함수
또 중요한 dll 중 하나, USER32.dll을 살펴보자
USER32.dll = user의 인터페이스(버튼, 스크롤바, 사용자 행위 제어 등)를 제어하는 라이브러리. GUI 기반
ShowWindow
: Window 창의 상태를 지정 --> BackDoor는 이를 통해 자신의 창을 감출 것임을 예상
SubSystem : Win Console(CMD창)을 통해 동작하고 있다는 것을 알 수 있다.
하지만 ShowWindow를 통해 안보이게 감춰서 실행하겠지
패킹은 되어있지 않으며, Visual C++ 9.0 버전으로 컴파일 된 실행 파일이라는 것을 알 수 있다.
2. 기초 동적 분석
소켓 프로그래밍을 하는 파이썬 코드
30초 동안 Dump(기록)한다고 설정해놨으니,, 30초 안에 해당 기능을 실행해보겠다
Start 누른 후 Python 실행
30초가 지나면 Dump가 떠지면서 Backdoor의 실행이 끝난다.
파이썬을 실행했기 때문에 pythonw.exe 프로세스가 동작했음을 알 수 있고
cmd.exe가 실행된 것도 알 수 있다.
SimpleBackdoor.exe의 PID와 cmd.exe의 PPID가 겹치는 것으로 보아 SimpleBackdoor가 cmd를 실행한 것임을 알 수 있다.
정적 분석에서 봤던 API 함수들이 보인다.
socket 관련 함수들도 보인다.
bind : 1337번 포트로 연결하고 listen 한다.
accept : 클라이언트와 통신을 시작하는 지점
CreateRemoteThread : 스레드를 만들어 클라이언트와 통신한 것임
SimpleBackdoor.exe는 Pipe 2개(Read, Write를 위한 것이라고 추측)와 Socket을 하나 만들었음을 확인할 수 있다.
'Study > Reversing' 카테고리의 다른 글
Lena 6번 풀이/Rena's Reversing Tutorial 06 (0) | 2021.11.22 |
---|---|
Malware 프로그램 분석 2 (0) | 2021.11.17 |
Lena 5번 풀이/Rena's Reversing Tutorial 05 (0) | 2021.11.10 |
Lena 4번 풀이/Rena's Reversing Tutorial 04 (0) | 2021.11.10 |
악성코드 주요 행위 분석 (0) | 2021.11.10 |