x64dbg xSelectBlock Plugin

x64dbg xSelectBlock Plugin

Windows OS 에서 실행되는 PE 파일 디버깅 프로그램인 x64dbg 는 사용자가 직접 개발한 플러그인 기능을 사용할 수 있다. 이 중 유용하게 사용하고 있는 xSelectBlock 에 대해 소개해보겠다.

안타깝게도 x64dbg 는 임의의 메모리 주소에서부터 임의의 크기만큼의 메모리를 선택할 수 있는 기능이 존재하지 않는다. 이 때문에 작은 크기의 메모리는 상관 없지만, 대량의 메모리를 선택해야 하는 상황에서는 크게 불편할 수 있다.

예를 들어 아래 이미지는 WriteProcessMemory() 를 호출하여 0x3295960 주소부터 0x21E00 바이트 크기만큼의 악성 코드를 다른 프로세스에 인젝션하고 있는 코드를 보여준다. 분석가는 해당 메모리를 덤핑하여 분석하고 싶지만 0x21E00 바이트를 직접 드래그해서 선택하기에는 너무 오래 걸리고 번거롭다. 이러한 상황에서 xSelectBlock 플러그인을 이용하면 지정한 메모리 주소를 지정한 크기만큼 쉽게 선택할 수 있다.

WriteProcessMemory() 호출 시 스택 상황

플러그인 설치

빌드

xSelectBlock플러그인 repository 에서 빌드된 플러그인을 제공하지 않으므로, 빌드하는 과정이 필요하다. 빌드가 어렵거나 귀찮다면 본 글에 첨부된 파일을 다운로드하여 사용하면 된다.

우선 repository 에서 파일을 다운로드한다.

xSelectBlock repository

프로젝트 파일 xSelectBlock.sln 을 실행하면, 현재 설치된 VisualStudio 버전에 따라 프로젝트 대상 변경 메시지가 팝업될 수 있다. 업그레이드 안 함을 선택하자.

프로젝트 대상 변경 화면

빌드 대상을 Release, x64 로 선택 후, 빌드 탭의 솔루션 빌드 버튼을 클릭하면 64비트 플러그인 파일을 빌드할 수 있다. 마찬가지 방법으로 x32 로 변경하여 빌드하면 32비트 플러그인 파일이 빌드된다.

빌드 대상 선택 화면

만약 빌드하는 과정에서 "'GWL_WNDPROC': 선언되지 않은 식별자입니다." 에러가 발생할 경우, 에러가 발생하는 곳을 찾아가 GWL_WNDPROCGWLP_WNDPROC 로 변경한다.

선언되지 않은 식별자 에러 메시지

빌드에 성공하면 bin 폴더에 빌드된 파일들이 존재한다. 이 중 xSelectBlock.dp32 , xSelectBlock.dp64 파일만 필요하다.

xSelectBlock 빌드 결과

플러그인 적용

앞서 빌드한 xSelectBlock.dp32,xSelectBlock.dp64 파일을 각각 x64dbg 의 x32/plugins, x64/plugins 폴더로 복사하면 플러그인이 적용된다.

빌드된 플러그인을 x64dbg 폴더에 복사

사용법

플러그인이 제대로 적용되면 Memory 를 우클릭 시 xSelectBlock 메뉴가 추가된다. Select block 을 클릭하면 메모리를 선택할 수 있는 창이 팝업된다.

xSelectBlock 플러그인 적용 결과

선택할 메모리의 시작 범위와 끝나는 지점, 혹은 길이를 지정하고 OK 를 클릭하면 메모리 창에서 지정한 범위가 선택되는 것을 확인할 수 있다.

선택할 메모리 범위 지정 화면