업데이트로 돌아가기
New releaseJul 26, 2026

OffsetInspect v3.2.0

AMSI/Defender 탐지 경계 분석 및 정적 악성코드 분류를 위한 PowerShell 툴킷 — 바이트 오프셋을 탐지 트리거에 매핑하며, YARA, 엔트로피, 문자열 및 PE/imphash 분석을 포함합니다. OffsetScan의 동반 도구입니다.

공유

Dread Host Research

Release License PowerShell 5.1 and 7.x Cross-platform core Windows threat providers CI Security policy X (Twitter): @warped_atom

OffsetInspect

바이트 오프셋 검사, 소스 상관관계, 바이너리 비교, 방어 탐지 경계 분석을 위한 한정된 메모리(bounded-memory) PowerShell 툴킷입니다.

OffsetInspect는 실무 분석가의 질문에 답합니다:

이 바이트 오프셋에는 어떤 콘텐츠가 있으며, 그 주변에는 어떤 소스 또는 바이너리 컨텍스트가 있을까요?

또한 ThreatCheck가 다루는 동일한 분석 문제에서 영감을 얻은 OffsetInspect 고유의 탐지 경계 워크플로를 제공하되, ThreatCheck의 소스나 바이너리를 번들로 포함하지 않습니다. AMSI 또는 Microsoft Defender가 여전히 탐지하는 가장 빠른 콘텐츠 접두사를 찾아내고, 그 경계를 반복 검증한 다음, 그 결과 오프셋을 컨텍스트 검사기에 직접 전달합니다. 이 핵심 위에 다중 영역 발견, 코퍼스 스캔, 탐지 비교(diff), 탐지 트리거 상관관계, 드리프트 저널링, 참여 보고서, 엔트로피 분석, 문자열 추출, PE/imphash 파싱 등 레드팀 분석 및 정적 트리아주 스위트를 추가합니다. 모두 읽기 전용이며, 승인된 사용을 위한 시그니처 견고성 테스터는 샘플을 메모리에서만 변형하고 엔드포인트 보호를 절대 비활성화하거나 재구성하지 않습니다.

함께 쓰는 도구

PowerShell 오버헤드 없이 코퍼스 규모의 정적 트리아주(PE 파싱, 엔트로피, 문자열, IOC)를 수행하려면 OffsetScan 을 참조하세요. 동일한 JSON 출력 스키마를 사용하는 네이티브 Rust 바이너리입니다. OffsetInspect 3.1.0 이상은 -IocJsonPath를 통해 OffsetScan IOC JSON을 직접 입력받습니다.


주요 기능

  • 각 고유 검사 파일을 안정적인 읽기 핸들로 열고 요청된 모든 오프셋을 함께 처리합니다.
  • 줄 매핑을 위해 모든 오프셋마다 전체 파일을 다시 읽는 대신 한정된 메모리를 사용하는 스트리밍 패스를 사용합니다.
  • 헥스 출력과 비교를 위해 요청된 바이트 창만 읽습니다.
  • UTF-8 및 UTF-16 바이트 오프셋을 소스 줄 및 문자 위치에 매핑합니다.
  • -ContextLines를 통해 이전 및 이후 소스 컨텍스트를 구현합니다.
  • 사람이 읽을 수 있는(human), 객체(object), JSON, CSV 및 CSV 파일 출력 계약을 지원합니다.
  • 일대다, 다대일, 그리고 파일/오프셋 쌍 계획을 지원합니다.
  • 대상 바이트를 두 번째 파일과 비교하되 해당 파일을 반복적으로 로드하지 않습니다.
  • 명시적인 오류, 시간 초과, 차단 및 불확정 상태를 갖는 독립적으로 구현된 AMSI 및 Microsoft Defender 공급자 계층을 추가합니다.
  • 각 고유 공급자 호출에 대한 프로브별 감사 추적(ProbeLog/ProbeCount)을 기록하고, 이를 -Verbose로 실시간 스트리밍하여 스캔의 실제 공급자 비용을 보고서로 바로 사용할 수 있는 기록을 생성합니다.
  • 인메모리 AMSI 스캔(탐지된 것은 디스크에 기록되지 않음)을 통해 단일 파일에서 여러 개의 독립적으로 탐지 가능한 영역을 발견하고 각 경계를 절대 오프셋에 매핑합니다.
  • 코퍼스를 통합 탐지 매트릭스로 스캔하고, 두 스캔 간의 탐지 차이를 비교하며, Markdown/HTML 참여 보고서를 내보냅니다(선택적으로 네이티브 OffsetScan 엔진의 JSON을 코퍼스 규모 IOC 패널에 사용).
  • 탐지 경계를 이를 생성한 콘텐츠와 상관관계를 맺습니다 - PE 섹션, 경계까지의 구간 엔트로피, 경계에서 끝나거나 걸쳐 있는 문자열(후보 시그니처 콘텐츠).
  • 시간 경과에 따른 탐지 여부를 저널링합니다(파일 해시 및 로컬 Defender 시그니처 버전). 이를 통해 탐지 가능성 변화를 파일 변경, 시그니처 데이터베이스 업데이트, 또는 비결정적 공급자 결과로 귀속시킬 수 있습니다.
  • 승인된 참여를 위해 탐지된 샘플을 메모리에서 변형(대소문자, 연결, 주석, 공백)하고 어떤 변형 클래스가 우회하는지 보고하여 시그니처 견고성을 테스트합니다. 변형본이 디스크에 기록되는 경우는 없습니다.
  • 스캔을 생성된 Windows 원격 측정(-CaptureTelemetry)과 상관관계를 맺습니다: Microsoft Defender 경고가 발생했는지, 어떤 컨텍스트로 발생했는지, 어떤 원격 측정 소스가 눈이 멀었는지 - "가시성 가정 후 검증" 원칙을 구현합니다. 읽기 전용, 관리자 권한 불필요, Windows 전용.
  • 정적 악성코드 트리아주 헬퍼를 추가합니다: 창별 엔트로피(패킹/암호화 영역), 오프셋을 포함한 ASCII/UTF-16LE 문자열 추출, imphash 및 오버레이 탐지를 포함한 PE 헤더/섹션/임포트 파싱.
  • Authenticode 출처 확인(Get-OffsetSignature): 플랫폼의 실제 신뢰 검증을 사용하여 파일이 유효하게 서명되고 신뢰되는지, 서명자가 누구인지, 임베디드 서명인지 카탈로그 서명인지 보고합니다. 이 서명자 신호는 imphash 및 빌드 툴체인 지문(임포트 대 툴체인 대 서명자)을 보완합니다. Windows 전용.
  • Defender 제외, 실시간 보호 또는 시스템 보안 구성을 변경하지 않습니다.
  • 외부 런타임 의존성이 없는 자체 포함 PowerShell 갤러리 패키지로 제공됩니다. YARA 및 ClamAV 스캔만 선택적 예외이며, 각각 자체 외부 엔진이 필요합니다.

명령어

CommandPurposePlatform
Invoke-OffsetInspect바이트 오프셋을 소스/바이너리 컨텍스트, 헥스 및 비교로 매핑크로스 플랫폼
Invoke-OffsetThreatScan단일 파일에 대한 AMSI/Defender 탐지 경계 검색Windows
Invoke-OffsetThreatScanBatch파일 코퍼스 스캔; -Summary는 탐지 매트릭스를 반환Windows
Invoke-OffsetThreatScanRegion인메모리 AMSI를 통한 다중 영역 발견(디스크 쓰기 없음)Windows
Invoke-OffsetMutationTest시그니처 견고성 테스트: 탐지된 샘플을 메모리에서 변형하고 어떤 변형이 우회하는지 보고(승인된 용도로만)Windows
Compare-OffsetThreatResult두 스캔 결과 비교(예: 시그니처 정의 업데이트 전후)크로스 플랫폼
Get-OffsetDetectionTrigger탐지 경계를 가장 가능성 높은 트리거 콘텐츠와 상관관계 매핑크로스 플랫폼
Add-OffsetDriftEntry탐지 스냅샷(파일 해시 + Defender 시그니처 버전)을 저널에 기록크로스 플랫폼²
Get-OffsetDrift파일 탐지 가능성이 어떻게 변경되었는지 설명: 파일 변경 vs 시그니처 업데이트 vs 비결정적 결과크로스 플랫폼
Export-OffsetThreatReport스캔 결과를 Markdown/HTML 참여 보고서로 렌더링크로스 플랫폼
Invoke-OffsetYaraScan파일을 YARA 규칙과 매칭; 바이트 오프셋과 함께 히트 반환크로스 플랫폼¹
Invoke-OffsetClamScanClamAV 엔진으로 파일 스캔; 정규화된 탐지 결과크로스 플랫폼¹
Get-OffsetEntropy패킹/암호화 영역을 찾기 위한 창별 섀넌 엔트로피크로스 플랫폼
Get-OffsetString바이트 오프셋과 함께 ASCII/UTF-16LE 문자열 추출크로스 플랫폼
Get-OffsetPEInfoPE 헤더, 섹션, 임포트/imphash, 오버레이, 오프셋→섹션크로스 플랫폼
Get-OffsetIOC통합 지표 패널: 해시, 엔트로피, PE/imphash, 문자열크로스 플랫폼
Get-OffsetSignatureAuthenticode 서명: 유효하게 서명되고 신뢰되는지, 서명자가 누구인지, 임베디드 vs 카탈로그Windows

¹ 이 두 명령은 선택적 외부 의존성이 있습니다: Invoke-OffsetYaraScan은 YARA 엔진(winget install VirusTotal.YARA)이 필요하고, Invoke-OffsetClamScan은 시그니처 데이터베이스가 있는 ClamAV(winget install Cisco.ClamAV, 이후 freshclam)가 필요합니다. 다른 모든 명령은 자체 포함입니다. 여기서 ClamAV는 경계 검색 엔진이 아닌 단일 파일 탐지기입니다. clamscan은 호출마다 전체 데이터베이스를 로드하므로, 이분 검색을 하려면 clamd 데몬이 필요합니다.

² Add-OffsetDriftEntry는 크로스 플랫폼에서 저널링하지만, Defender 시그니처/엔진 버전 필드는 Windows에서만 채워집니다(Get-MpComputerStatus 사용). 다른 플랫폼에서는 null로 기록되며 나머지 스냅샷은 여전히 기록됩니다.

오프셋 검사 코어와 모든 정적 트리아주 헬퍼는 크로스 플랫폼(Windows, Linux, macOS)입니다. AMSI/Defender 위협 공급자는 Windows 전용입니다.

설치

PowerShell 갤러리```powershell

Install-Module OffsetInspect -Scope CurrentUser Import-Module OffsetInspect

### 저장소 체크아웃```powershell
git clone https://github.com/warpedatom/OffsetInspect.git
cd OffsetInspect
Import-Module ./module/OffsetInspect/OffsetInspect.psd1 -Force

이 저장소에는 경량 CLI 래퍼도 포함되어 있습니다:```powershell ./OffsetInspect.ps1 ./OffsetThreatScan.ps1 -Engine AMSI

## 오프셋 검사

### 사람이 읽을 수 있는 출력```powershell
Invoke-OffsetInspect ./sample.bin 0x200

The input chunk is empty — no content was provided to translate. Please supply the markdown text for chunk 9 of 63.```powershell $inspectParameters = @{ FilePaths = './script.ps1' OffsetInputs = 128, 256, 512 ByteWindow = 64 ContextLines = 4 } Invoke-OffsetInspect @inspectParameters

### 구조화된 객체```powershell
$inspectParameters = @{
    FilePaths    = './script.ps1'
    OffsetInputs = 0x80, 0x100
    PassThru     = $true
}
$results = Invoke-OffsetInspect @inspectParameters

$results | Where-Object BytesDiffer

JSON 및 CSV```powershell

Invoke-OffsetInspect ./sample.bin 0x200 -Json Invoke-OffsetInspect ./sample.bin 0x200 -Csv Invoke-OffsetInspect ./sample.bin 0x200 -CsvPath ./artifacts/offsets.csv

JSON 모드는 단일 결과의 경우에도 항상 배열을 출력합니다.

### 이진 비교```powershell
$compareParameters = @{
    FilePaths    = './before.bin'
    OffsetInputs = 0x200
    CompareFile  = './after.bin'
    PassThru     = $true
}
Invoke-OffsetInspect @compareParameters

오프셋 형식

입력해석
51210진수 512
0x200 또는 0X20016진수 0x200
200h16진수 0x200
E1AB1A-F를 포함하므로 접두사가 없는 16진수

접두사나 접미사가 없는 숫자로만 구성된 값은 의도적으로 10진수로 처리됩니다.

인코딩 모드

카테고리