System/OS

Obfuscating Function Call

병뚜 2023. 3. 29. 15:08

 

공부 사이트: 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엔진이 정적분석을 하고 있다면 탐지할 수 없다.

 

 

[실습]

우선 실습 파트는 눈으로 확인함.

시간나면 추가 업데이트 하겠다.