옛날에 PEB를 공부하면서 간과했던 부분이
이제서야 중요하다는 것을 깨닫고 이렇게 정리 해본다.
악성코드를 분석하던 중 위와 같이 Import 되는 라이브러리는 하나밖에 없는데
바이너리를 실행 시켜보면 kernel32.dll등 데 WinAPI를 자유자재로 사용하는 것을 볼 수 있습니다.
어떻게 이것이 가능하냐?????
[중요] 바로 PEB를 이용해 현재 로드된 모듈들을 가져와서 사용하는 것입니다.
[ 중요 ]
간단하게 설명하자면
PEB구조체의 필드중에 'Ldr'이라는 포인터 변수가 있다.
Ldr은 _PEB_LDR_DATA라는 구조체를 가지고,
이는 현재 프로세스에서 로드한 모듈들의 정보를 담고 있다.
즉, Ldr은 현재 프로세스에서 로드된 모듈들의 정보를 가지고 있다.
[참고] 32비트는 0xc만큼 떨어진곳에 존재하는데 64비트는 0x18떨어진 곳에 존재한다.
[참고] _PEB_LDR_DATA 구조체는 힙메모리영역에 있다.
_PEB_LDR_DATA -> InMemoryOrderModuleList로 들어간다.
여기서 부터 살짝 헷갈리기 시작한다,,,,
다음을 이해하자
( 출처 : https://limjunyoung.tistory.com/186 )
" _LIST_ENTRY 타입의 InLoadOrderMoudleList, InMemoryOrderModuleList, InInitializationOrderModuleList라는 세 가지 멤버를 가지고 있다. 이 멈버들은 각각 _LDR_DATA_TABLE_ENTRY 구조체의 InLoadOrderLinks, InMemoryOrderLinks, InInitializationOrderLinks 멤버의 포인터이다. 바로 이 _LDR_DATA_TABE_ENTRY 구조체가 프로세스 정보와 프로세스에 로딩되는 DLL의 정보를 가지고 있고, 이 구조체를 이용하여 로딩되는 DLL의 Base Address를 직접 구할 수 있다.
즉, 프로세스에 로딩되는 DLL마다 _LDR_DATA_TABLE_ENTRY 구조체가 하나씩 생성되는데,
연결 방법이 세 가지인 것이다.
첫 번째 _LDR_DATA_TABLE_ENTRY는 해당 process의 정보를,
두 번째는 ntdll.dll의 정보, 세 번째는 kernel32.dll의 정보를 가지고 있다.
프로세스에 로딩되는 순서에 따라 연결 리스크가 형성되는 것 같다. "
1. 프로세스에 로딩된 dll 모듈마다 _LDR_DATA_TABLE_ENTRY 구조체가 하나씩 생성 되고
이 구조체들은 _LIST_ENTRY 더블 링크
드 리스트로 연결된다.
2. LDR_DATA_TABLE_ENTRY에서는 LIST_ENTRY를 구조체 멤버로 사용한다.
드디어,,,, 퍼온 글을 어느정도 이해하였다.
[중요] "프로세스에 로딩된 dll 모듈마다 _LDR_DATA_TABLE_ENTRY 구조체가 하나씩 생성"
이 말이 중요한것 같다.
내가 확인하고 싶은것은 dll이고 dll의 위치를 확인 해주려면
PEB_LDR_DATA 구조체가 아닌 LDR_DATA_TABLE_ENTRY를 이용해서 출력을 해주어야한다.
먼저,
[ 중요 ]
여기서 0x10만큼 떨어진 곳을 LDR_DATA_TABLE_ENTRY형태로 출력 해주면 첫번째 dll이 나온다.
(위의 그림에서 보면 InOrderModuleList.Fink는 다음 dll을 가리킨다.)
Ldr -> process -> ntdll.dll ->kernel32.dll
어떤사람들은 InMemoryOrderModuleList주소찍어주고 -0x10 이런식으로 해주는데
나는 그냥 구조체 시작 주소인 InLoadOrderModuleList로 계속해서 찍어보았다.
악성코드는 이런식으로 참조해서 특정 dll의 함수를 가지고 온다.
코드는...
https://5kyc1ad.tistory.com/328
참고하면 될 것같다.
'Malware' 카테고리의 다른 글
FIESTA2020 Stepin-3 (매크로 악성코드) (0) | 2020.09.16 |
---|---|
신용카드 정보를 훔치는 POS 악성코드(Alina v3.4) (1) | 2020.08.28 |
Codegate2020 simple_machine (0) | 2020.08.25 |
cb-bitcoinstealer.exe (비트코인 주소를 바꾸는 악성코드) (0) | 2020.08.23 |
호크아이 악성코드 분석 (0) | 2020.08.05 |