베지밀

[악성코드분석] Hide Module / Terminate Process 본문

개인 공부/리버싱

[악성코드분석] Hide Module / Terminate Process

vegimil 2024. 8. 9. 20:26

분석툴 - IDA

training1_hm.zip
0.01MB

 

현재 실행중인 파일 경로 Filename에 받아온다.

Filename = C:\Users\anon\Desktop\kisia_samples\4_ida_training\ida_training\training1_hm.exe

mal_deu라는 경로는 filename에 없기 때문에 if문을 지나서 밖의 명령이 실행됨

GetTempPathA : 임시폴더의 경로를 Buffer에 가져옴.

    Buffer = C:\Users\anon\AppData\Local\Temp

PathAppendA : Buffer의 경로에 ‘mal_edu’라는 값을 더한다.

    Buffer = C:\Users\anon\AppData\Local\Temp\mal_edu

CreateDirectoryA : Buffer 문자열에 해당하는 경로에 디렉토리를 생성

PathAppendA : Buffer 경로에 malicious_sample.exe를 추가

    Buffer = C:\Users\anon\AppData\Local\Temp\mal_edu\malicious_sample.exe

CopyFileA : Filename에 있는 실행중인 파일을 Buffer 경로로 복사해온다.

ShellExecuteA : 자기 자신을 실행함으로써 if문 안으로 들어가서 기존 파일을 삭제해버린다!

 

결국 DeleteFileA를 통해 기존에 있던 자기 자신을 지워버리는 것이다 ….

 

 


training2_tp.zip
0.01MB

sub_401000

CreateToolhelp32Snapshot : 실행되는 그 순간의 시점을 스냅샷으로 찍어서 저장 → 현재 실행중인 모든 프로세스를 저장하는 것

프로세스 스냅샷의 핸들(hSnapshot)을 가지고 Process32First를 실행하면, pe라는 구조체에 맨 처음 프로세스를 가져오게 됨.

pe에는 프로세스 이름, pid, 실행된 시간, 스레드 개수 등의 정보가 담김

 

for문에서는 strcmp로 Str2(인자로 전달한 프로세스 명)을 검사하고,

Process32Next를 통해 반복문을 돌면서 스냅샷의 프로세스를 하나하나 가져온다.

 

만약 인자로 준 프로세스 명이 존재한다면, if문 안으로 들어가서 OpenProcess를 통해 프로세스 제어를 위한 핸들값을 가져오게 됨 → hProcess

TerminateProcess를 통해 핸들값으로 프로세스를 종료시킴