Procmon 을 패치하여 Themida 를 우회하는 방법

개요
Procmon 은 MS 社 Sysinternals 에 포함된 동적 모니터링 프로그램으로, Windows 시스템에서 동적 디버깅에 유용하고 사용할 수 있다. 하지만 널리 사용되는만큼 악성 프로그램, 프로텍터에서도 Procmon 을 탐지하려는 경향이 있다.
이 글에서는 Themida 프로텍터 에서 Procmon 을 탐지하는 방식과, Procmon 실행 파일을 패치하여 탐지하지 못하도록 하는 방안에 대한 연구를 다룬다.

테스트 샘플의 Themida 버전 정보는 다음과 같다.
- Protector : Themida/Winlicense(2.X)

Procmon 탐지 방식
드라이버 탐지
Procmon 실행 시 파일 시스템 미니 필터에 PROCMON[버전숫자]
라는 이름의 드라이버가 로딩된다. 이렇게 로딩된 드라이버는 Procmon 프로세스가 종료되도 시스템 재부팅 전까지 계속 로딩된 상태를 유지한다. Themida 는 로딩된 미니 필터를 탐지하여 Procmon 의 실행 여부를 알 수 있다.

FindWindowA API
FindWindowA
API 는 윈도우 클래스 이름, 윈도우 이름을 인자로 전달받아 조건에 맞는 윈도우의 핸들을 반환받는 함수이다. Themida 프로텍터는 다음과 같은 문자열을 인자로 FindWindowA
를 호출하여 디버거, 모니터링 프로세스의 실행 여부를 확인한다. 이 중 PROCMON_WIDNOW_CLASS
, Process Monitor - Sysinternals: www.sysinternals.com
문자열이 Procmon 실행 시 생성되는 윈도우와 관련된 문자열이다.
윈도우 클래스 이름 | 윈도우 이름 |
---|---|
OLLYDBG GBDYLLO pediy06 FilemonClass PROCMON_WINDOW_CLASS RegmonClass 18467-41 |
File Monitor - Sysinternals: www.sysinternals.com Process Monitor - Sysinternals: www.sysinternals.com Registry Monitor - Sysinternals: www.sysinternals.com |
패치 방안
Unicode 문자열 패치
앞서 언급된 드라이버, 윈도우와 관련된 문자열은 Procmon 실행 파일 내부에 하드코딩되어 있다. 해당 값과 일치하는 Unicode 문자열을 모두 임의의 값으로 패치하면 Themida 프로텍터의 탐지 기능을 우회할 수 있다.
수정 전 문자열 | 수정 후 문자열 |
---|---|
PROCMON23.SYS PROCMON_WINDOW_CLASS Process Monitor - Sysinternals: www.sysinternals.com |
HROCWON91.SYS HROCMON_WINDOW_CLASS Hrocess Monitor - Hysinternals: www.sysinternals.com |
작업 결과물은 github 에서 다운로드 하면 된다.