관리 메뉴

HeeJ's

[18] dlllist 우회하기(2)(DLL/THREAD) :: Anti Memory Forensics/Volatility 본문

<Project>/<Anti Memory Forensic>_2020

[18] dlllist 우회하기(2)(DLL/THREAD) :: Anti Memory Forensics/Volatility

meow00 2020. 8. 14. 02:14

[17] dlllist 우회하기(1)(DLL/THREAD) :: Anti Memory Forensics/Volatility

이어서

 

2. DLL 하나씩 은닉하기

LDR_DATA_TABLE_ENTRY 구조체의 InLoadOrderLinks, InMemoryOrderLinks 값 변조

 

은닉해볼 필드: C:\Windows\System32\ntdll.dll

 

 

dlllist 은닉 방법

inLoadOrderLinks와 InMemoryOrderLinks의 Flink값은 IMGSF50Start_x86.exe의 LDR_DATA_TABLE_ENTRY를 가리킨다.

IMGSF50Start_x86.exe의 세 필드가 가리키는 Flink값을 wow64.dll을 가리키도록 한다.

 

EPROCESS의 PEB 주소 확인

MalwareProcess의 물리주소(0x1DABB600)에서 0x338만큼 이동해 PEB주소를 확인해주었다.

이 값(0x7EFDF000)을 물리주소로 바꾸어준 후, 그 주소로(0x11CC000) 따라가주었다.

 

PEB구조체의 LDR 변수 값 확인

PEB의 물리주소에서 0x18만큼 떨어진 곳에서 LDR값인 0x773D2640을 확인할 수 있다.

LDR 주소는 _PEB_DRL_DATA 구조체를 가리키기 때문에

이 값의 물리주소(0x91E640)로 이동해주었다.

 

PEB_LDR_DATA 구조체의 InLoadOrderLinks값 확인

_PEB_LDR_DATA 구조체로 이동한 후, 10만큼 이동해 InLoadOrderLinks의 주소를 확인해주었다.

이 값을 따라가면 _LDR_DATA_TABLE_ENTRY 구조체로 이동할 수 있기 때문에

이 값의 물리주소(0x174E66E0)로 이동해주었다.

 

LDR_DATA_TABLE_ENTRY 구조체 중 IMGSF50Start_x86.exe(Process)의 InOrderLinks 값과 InMemoryOrderLinks 값

IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks 값과 InMemoryOrderLinks 값을 확인할 수 있었다.

이 값들은 다음 DLL로 넘어갈 수 있는 Flink값으로,

_LDR_DATA_TABLE_ENTRY 구조체 내의 프로세스와 DLL들이 Flink값으로 이동할 수 있다.

그래서 다음 DLL인 ntdll.dll로 넘어가기 위해 0x003727D0과 0x003727E0의 물리주소로 이동해보았다.

 

LDR_DATA_TABLE_ENTRY 구조체 중 ntdll.dll의 InLoadOrderLinks 값과 InMemoryOrderLinks 값 확인

이 값들은 다음 DLL인 wow64.dll을 가리키는 Flink값이다.

이 값들을 앞의 IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks 값과 InMemoryOrderLinks값에 넣어 변조해주면 Process의 Flink가 wow64.dll을 가리키게 되면서 ntdll.dll이 은닉된다.

 

IMGSF50Start_x86.exe(Process)의 Flink값 변조

IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks와 InMemoryOrderLinks Flink 값을

wow64.dll을 가리키게 변조해주었다.

 

ntdll.dll 은닉 성공!