공부 사이트: cocomelonc 블로그
모든 PE module은 일반적으로 외부 함수를 사용한다.
→ 실행중일 때 프로세스 메모리에 매핑되는 외부 DLL에 존재하는 모든 함수를 호출.
→ 프로세스 코드에서 이러한 함수들을 사용할 수 있도록 함.
AntiVirus 는 악성 프로그램이 외부 DLL과 함수를 사용하는 것을 분석하는데,
이는 해당 바이너리가 악의적인 행위를 하는지를 알아내는 지표가 될 수 있다.
→ AV 엔진은 임포트 주소를 조사함으로써 디스크상의 PE 파일을 분석한다.
→ 무적은 아니지만 효과가 있긴 하니까 많은 AV 엔진이 사용함.
이를 우회하기 위해 할 수 있는 것은, "함수 호출을 난독화" 하는 것이다.
Obfuscating Function Call
런타임 도중 호출되는 DLL 및 외부 함수들을 숨기는 방법
사용할 Window API 함수
- GetModuleHandle(): 모듈에 대한 핸들값 반환.
- GetProcAddress(): 해당 DLL에 있는 외부 함수의 주소를 반환
얘네 둘은 붙어다닐 것 같은 느낌이 든다
먼저 GetModuleHandle() 함수를 호출해서 dll 핸들 값을 얻어낸다.
그리고 GetProcAddress() 호출하여 dll 핸들 값이랑 외부함수 인자로 주면.. 그 함수 주소를 반환한다.
GetProcAddress(GetModuleHandle("내가 원하는 dll"), "내가 원하는 함수")
✅ POINT
코드 컴파일 시 컴파일러는 Import Address Table에 해당 dll을 포함하지 않는다.
→ AV엔진이 정적분석을 하고 있다면 탐지할 수 없다.
[실습]
우선 실습 파트는 눈으로 확인함.
시간나면 추가 업데이트 하겠다.
'System > windows' 카테고리의 다른 글
APC (Asynchronous procedure call) (0) | 2023.03.30 |
---|---|
PE 파일 (0) | 2022.11.21 |
나의 Public IP 찾기 TIP (curl) (1) | 2022.10.05 |
windows 관리자권한 가진 계정 생성 (0) | 2022.07.19 |
cmd에서 권한 변경하는 명령어 runas (0) | 2022.07.19 |