본문 바로가기

System/windows

Obfuscating Function Call

 

공부 사이트: 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