[18] dlllist 우회하기(2)(DLL/THREAD) :: Anti Memory Forensics/Volatility
[17] dlllist 우회하기(1)(DLL/THREAD) :: Anti Memory Forensics/Volatility
이어서
2. DLL 하나씩 은닉하기
LDR_DATA_TABLE_ENTRY 구조체의 InLoadOrderLinks, InMemoryOrderLinks 값 변조
은닉해볼 필드: C:\Windows\System32\ntdll.dll
inLoadOrderLinks와 InMemoryOrderLinks의 Flink값은 IMGSF50Start_x86.exe의 LDR_DATA_TABLE_ENTRY를 가리킨다.
IMGSF50Start_x86.exe의 세 필드가 가리키는 Flink값을 wow64.dll을 가리키도록 한다.
MalwareProcess의 물리주소(0x1DABB600)에서 0x338만큼 이동해 PEB주소를 확인해주었다.
이 값(0x7EFDF000)을 물리주소로 바꾸어준 후, 그 주소로(0x11CC000) 따라가주었다.
PEB의 물리주소에서 0x18만큼 떨어진 곳에서 LDR값인 0x773D2640을 확인할 수 있다.
LDR 주소는 _PEB_DRL_DATA 구조체를 가리키기 때문에
이 값의 물리주소(0x91E640)로 이동해주었다.
_PEB_LDR_DATA 구조체로 이동한 후, 10만큼 이동해 InLoadOrderLinks의 주소를 확인해주었다.
이 값을 따라가면 _LDR_DATA_TABLE_ENTRY 구조체로 이동할 수 있기 때문에
이 값의 물리주소(0x174E66E0)로 이동해주었다.
IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks 값과 InMemoryOrderLinks 값을 확인할 수 있었다.
이 값들은 다음 DLL로 넘어갈 수 있는 Flink값으로,
_LDR_DATA_TABLE_ENTRY 구조체 내의 프로세스와 DLL들이 Flink값으로 이동할 수 있다.
그래서 다음 DLL인 ntdll.dll로 넘어가기 위해 0x003727D0과 0x003727E0의 물리주소로 이동해보았다.
이 값들은 다음 DLL인 wow64.dll을 가리키는 Flink값이다.
이 값들을 앞의 IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks 값과 InMemoryOrderLinks값에 넣어 변조해주면 Process의 Flink가 wow64.dll을 가리키게 되면서 ntdll.dll이 은닉된다.
IMGSF50Start_x86.exe(Process)의 InLoadOrderLinks와 InMemoryOrderLinks Flink 값을
wow64.dll을 가리키게 변조해주었다.
ntdll.dll 은닉 성공!