
메모리에서 디스크로 악성코드 PE 파일을 덤프하여 분석하기 위한 Windows 도구.
Process Dump는 악성코드 메모리 구성 요소를 분석을 위해 디스크로 다시 덤프하는 Windows 리버스 엔지니어링 명령줄 도구입니다. 종종 악성코드 파일은 AV 스캐너를 피하기 위해 실행 전에 패킹되고 난독화되지만, 이러한 파일이 실행되면 메모리에서 악성코드 코드의 정리된 버전을 언패킹하거나 주입하는 경우가 많습니다. 악성코드 연구원이 악성코드를 분석할 때 흔히 하는 작업은 이 언패킹된 코드를 메모리에서 디스크로 다시 덤프하여 AV 제품으로 검사하거나 IDA와 같은 정적 분석 도구로 분석하는 것입니다.
Process Dump는 Windows 32비트 및 64비트 운영 체제에서 작동하며 특정 프로세스 또는 현재 실행 중인 모든 프로세스에서 메모리 구성 요소를 덤프할 수 있습니다. Process Dump는 clean-hash 데이터베이스의 생성 및 사용을 지원하므로 kernel32.dll과 같은 알려진 파일의 덤프를 건너뛸 수 있습니다. 주요 기능은 다음과 같습니다:
-closemon)로 실행할 수 있으며, 이 모드에서는 후킹된 프로세스가 종료되기 직전에 일시 중지되고 덤프됩니다.제 웹사이트에서 공식 컴파일 릴리스를 유지 관리하고 있습니다: https://split-code.com/processdump.html
여기에서 Process Dump의 최신 컴파일 릴리스를 다운로드할 수 있습니다:
64비트 Windows에서는 pd64.exe(권장)를, 32비트 Windows에서는 pd32.exe를 사용하십시오. 두 바이너리 모두 독립 실행형이며 Microsoft Visual C++ 재배포 가능 패키지가 필요하지 않습니다.
Process Dump는 메모리에서 모든 알 수 없는 코드를 덤프하거나(-system), 특정 프로세스를 덤프하거나, 프로세스를 모니터링하여 종료되기 전에 덤프할 수 있습니다.
깨끗한 워크스테이션에서 다음 중 하나로 기준 데이터베이스를 생성하십시오:
pd64.exe -db genquickpd64.exe -db gen데이터베이스 생성과 덤프는 별도의 명령으로 실행하십시오. 최상의 액세스를 위해 관리자 권한으로 실행하십시오. 기본 작업자 수는 16입니다.
사용 예:
pd64.exe -systempd64.exe -pid 419pd64.exe -pid 0x1a3pd64.exe -pid 0x1a3 -a 0x401000 -o C:\dumpspd64.exe -p "chrome[.]exe"pd64.exe -p ".*chrome.*"pd64.exe -closemon일반 덤프 옵션
| 옵션 | 설명 |
|---|---|
-system | 액세스 가능한 모든 프로세스에서 clean hash 데이터베이스와 일치하지 않는 모듈 및 느슨한 코드를 덤프합니다. |
-pid <pid> | 특정 프로세스를 덤프합니다. 10진수 또는 16진수 PID의 경우 0x 접두사를 사용하십시오. |
-closemon | 프로세스 종료를 후킹하고 종료 전에 덤프합니다. 통제된 환경에서 사용하십시오. 중지하려면 Ctrl+C를 누르십시오. |
-p <regex> | 전체 이름이 대소문자를 구분하는 정규식과 일치하는 프로세스를 덤프합니다. 여러 개가 일치하면 확인을 요청합니다. |
-a <address> | 지정된 기본 주소에서 덤프합니다. -pid가 필요하며, 10진수 또는 0x 접두사가 붙은 16진수를 허용합니다. |
-o <path> | 출력 폴더를 설정합니다(기본값: 현재 작업 디렉터리). 폴더를 먼저 생성하십시오. 기존 파일은 절대 덮어쓰지 않습니다. |
Clean Hash 데이터베이스 옵션
데이터베이스 파일은 기본적으로 애플리케이션 디렉터리에 생성됩니다: clean.hashes, entrypoints.hashes 및 shortentrypoints.hashes.
| 옵션 | 설명 |
|---|---|
-db gen | 실행 중인 프로세스와 %WINDIR%, %USERPROFILE%, C:\Program Files, C:\Program Files (x86) 내의 PE 파일에서 재귀적으로 해시를 추가합니다. |
-db genquick | 실행 중인 프로세스에서만 해시를 추가합니다. gen보다 빠르지만 덜 완전합니다. |
-db add <dir> | 지정된 디렉터리에서 PE 파일 해시를 재귀적으로 추가하며, 엔트리포인트 시그니처도 포함합니다. |
-db remove <dir>, -db rem <dir> | 디렉터리에서 일치하는 클린 모듈 해시를 재귀적으로 제거합니다. 엔트리포인트 시그니처는 유지됩니다. |
-nr | 데이터베이스 추가/제거 명령에 대한 재귀를 비활성화합니다. -db gen에는 영향을 주지 않습니다. |
-db clean | 엔트리포인트 시그니처를 포함한 세 개의 데이터베이스를 모두 지웁니다. |
-db ignore | 파일을 변경하지 않고 이번 덤프에서 로드된 세 개의 데이터베이스를 모두 무시합니다. 실행 중에 반복되는 모듈은 여전히 건너뛸 수 있습니다. |
-cdb <filepath>, -c <filepath> | 클린 해시 데이터베이스 경로를 설정합니다. |
-edb <filepath> | 엔트리포인트 해시 데이터베이스 경로를 설정합니다. |
-esdb <filepath> | 짧은 엔트리포인트 해시 데이터베이스 경로를 설정합니다. |
출력 옵션
| 옵션 | 설명 |
|---|---|
-v | 상세 진단 정보를 출력합니다. |
-nh | 버전/저작권 배너를 표시하지 않습니다. |
--help, -help, -h, --h | 도움말을 출력하고 종료합니다. 인수 없이 실행해도 도움말이 출력됩니다. |
고급 옵션
| 옵션 | 설명 |
|---|---|
-g | 기존 헤더를 무시하고 32비트 및 64비트 PE 헤더를 모두 강제로 생성합니다. |
-eprec | 유효한 엔트리포인트가 존재하더라도 엔트리포인트 복구를 강제합니다. 복구는 휴리스틱 방식이며, 검색에 실패하면 기존 값이 그대로 유지됩니다. |
-ni | 공격적인 임포트 재구성을 비활성화합니다(기본적으로 활성화됨). |
-nc | 느슨한 코드(loose-code) 덤프 및 해싱을 비활성화합니다(기본적으로 활성화됨). |
-nep | 엔트리포인트 복구 및 라이브 엔트리포인트 해싱을 비활성화하며, -eprec를 무시합니다. 파일 데이터베이스 생성은 여전히 엔트리포인트 시그니처를 수집합니다. |
-reexec | 덤프를 다시 실행하기 위한 실험적 준비입니다. 캡처된 일부 상태를 버리고 원래 섹션 레이아웃을 가정합니다. 덤프를 실행하지 않으며 작동을 보장하지도 않습니다. 기본적으로 꺼져 있습니다. |
-nt | 워커를 하나만 사용하며, -t 1과 동일합니다. 종료 모니터링은 여전히 별도의 모니터링 스레드를 사용합니다. |
-t <count> | 시스템 덤핑, 데이터베이스 생성 및 종료 모니터링에 사용할 워커 수를 설정합니다(기본값 16, 최소 1). 직접 PID/이름 덤프는 동기식으로 유지됩니다. 마지막 -t/-nt가 적용됩니다. |
| 명령 | 설명 |
|---|---|
pd64.exe -db genquick | 현재 실행 중인 프로세스로부터 신속하게 기준선을 구축합니다. |
pd64.exe -system -t 4 -o C:\dumps | 워커 4개로 알 수 없는 모듈과 느슨한 코드를 기존 출력 폴더에 덤프합니다. |
pd64.exe -closemon | 종료 모니터 모드로 실행합니다. |
pd64.exe -pid 0x18A | 특정 프로세스에서 모듈과 느슨한 코드를 덤프합니다. |
pd64.exe -p ".*chrome.*" | 이름에 chrome이 포함된 프로세스를 덤프합니다. |
pd64.exe -db gen | 실행 중인 프로세스와 일반 폴더로부터 보다 완전한 기준선을 구축합니다. |
pd64.exe -db add C:\baseline -nr | 하위 디렉터리를 검색하지 않고 디렉터리의 PE 파일을 추가합니다. |
pd64.exe -pid 0x1a3 -a 0x401000 | 특정 주소에서 덤프합니다. PE 헤더가 없으면 32비트 및 64비트 헤더를 모두 생성합니다. |
악성코드 분석 시에는 격리된 랩을 사용하고 Process Dump를 관리자 권한으로 실행하십시오:
pd64.exe -db gen 또는 pd64.exe -db genquick으로 클린 해시 데이터베이스를 구축하십시오.pd64.exe -closemon을 계속 실행하십시오.pd64.exe -system을 사용하십시오.-o를 설정하지 않으면 덤프는 작업 디렉터리에 기록됩니다. 덤프는 비공개로 유지하십시오. 덤프는 분석용이며 실행이 보장되지 않습니다. 256 MiB를 초과하는 이미지는 거부됩니다.
hiddenmodule은 해당 모듈이 프로세스에 제대로 등록되지 않았음을 나타냅니다.codechunk는 PE 헤더가 없는 느슨한 실행 가능 영역에서의 덤프를 의미합니다. 이들은 재구성된 x86 및 x64 헤더와 함께 두 번 덤프됩니다.예제 파일 이름:
pd.sln을 Visual Studio 2019 또는 2022(Community 에디션 가능)에서 데스크톱 개발용 C++ 워크로드와 Windows SDK가 설치된 상태로 엽니다. Win32 또는 x64용 Release를 빌드하십시오. Release 빌드는 런타임을 정적으로 링크합니다.
Visual Studio Developer PowerShell에서 테스트를 빌드하고 실행하려면:
msbuild pd.sln /m /p:Configuration=Release /p:Platform=x64
.\x64\Release\pd_tests.exe