Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OffsetInspect — AMSI/Defender 탐지 경계 분석 및 정적 악성코드 트리아지를 위한 PowerShell 툴킷으로, 바이트 오프셋을 탐지 트리거에 매핑하며 YARA, 엔트로피, 문자열, PE/imphash 분석도 제공합니다. OffsetScan의 동반 도구입니다. | Kitploit
도구/GitHubGitHub/warpedatom/offsetinspect
Defensive ToolsStatic AnalysisVulnerability AnalysisExploitationReverse EngineeringForensicsMalware AnalysisPenetration TestingBinary AnalysisRed TeamingIncident Response
8210373개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
warpedatom/offsetinspect

OffsetInspect

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

저장소 보기
<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/9991/ec3b617ff761b38a1eb9296df3d62b7435bcf1684421cce77108da0b7ac12e92.png" alt="Dread Host Research" width="800">
</p>

<p align="center">
  <a href="https://github.com/warpedatom/OffsetInspect/releases"><img src="https://img.shields.io/github/v/release/warpedatom/OffsetInspect" alt="Release"></a>
  <a href="https://github.com/warpedatom/offsetinspect/blob/main/LICENSE"><img src="https://img.shields.io/github/license/warpedatom/OffsetInspect" alt="License"></a>
  <img src="https://img.shields.io/badge/PowerShell-5.1%20%7C%207.x-5391FE" alt="PowerShell 5.1 and 7.x">
  <img src="https://img.shields.io/badge/Core-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey" alt="Cross-platform core">
  <img src="https://img.shields.io/badge/Threat%20Providers-Windows-0078D4" alt="Windows threat providers">
  <img src="https://img.shields.io/github/actions/workflow/status/warpedatom/OffsetInspect/ci.yml?branch=main&amp;label=CI" alt="CI">
  <a href="https://github.com/warpedatom/offsetinspect/blob/main/SECURITY.md"><img src="https://img.shields.io/badge/Security-Policy-green" alt="Security policy"></a>
  <a href="https://x.com/warped_atom"><img src="https://img.shields.io/badge/X-@warped__atom-000000?logo=x&amp;logoColor=white" alt="X (Twitter): @warped_atom"></a>
</p>

# OffsetInspect

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

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

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

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

## 함께 쓰는 도구

PowerShell 오버헤드 없이 코퍼스 규모의 정적 트리아주(PE 파싱, 엔트로피, 문자열, IOC)를 수행하려면 **[OffsetScan](https://github.com/warpedatom/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 스캔만 선택적 예외이며, 각각 자체 외부 엔진이 필요합니다.

## 명령어

| Command | Purpose | Platform |
|---|---|---|
| `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-OffsetClamScan` | ClamAV 엔진으로 파일 스캔; 정규화된 탐지 결과 | 크로스 플랫폼¹ |
| `Get-OffsetEntropy` | 패킹/암호화 영역을 찾기 위한 창별 섀넌 엔트로피 | 크로스 플랫폼 |
| `Get-OffsetString` | 바이트 오프셋과 함께 ASCII/UTF-16LE 문자열 추출 | 크로스 플랫폼 |
| `Get-OffsetPEInfo` | PE 헤더, 섹션, 임포트/imphash, 오버레이, 오프셋→섹션 | 크로스 플랫폼 |
| `Get-OffsetIOC` | 통합 지표 패널: 해시, 엔트로피, PE/imphash, 문자열 | 크로스 플랫폼 |
| `Get-OffsetSignature` | Authenticode 서명: 유효하게 서명되고 신뢰되는지, 서명자가 누구인지, 임베디드 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 <file> <offset>
./OffsetThreatScan.ps1 <file> -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
```
### 오프셋 형식

| 입력 | 해석 |
|---|---:|
| `512` | 10진수 512 |
| `0x200` 또는 `0X200` | 16진수 0x200 |
| `200h` | 16진수 0x200 |
| `E1AB1` | A-F를 포함하므로 접두사가 없는 16진수 |

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

### 인코딩 모드

| 모드 | 동작 |
|---|---|
| `Auto` | UTF-8/UTF-16 BOM을 감지하며, 그 외에는 UTF-8을 사용합니다. |
| `Default` | 호스트 운영 체제 기본 인코딩을 사용합니다. |
| `UTF8` | UTF-8 소스 매핑 |
| `UTF16LE` | 리틀 엔디언 UTF-16 소스 매핑 |
| `UTF16BE` | 빅 엔디언 UTF-16 소스 매핑 |
| `ASCII` | ASCII 소스 매핑 |

출력은 `BytePositionInLine`과 `CharacterPosition`을 모두 보고합니다. 이 구분은 소스 파일에 멀티바이트 문자가 포함된 경우 중요합니다.

## 위협 경계 분석

위협 공급자 분석은 Windows 전용입니다. 일반 오프셋 검사 명령은 크로스 플랫폼을 유지합니다.

### AMSI 텍스트 스캔```powershell
$scanParameters = @{
    FilePath    = './script.ps1'
    Engine      = 'AMSI'
    ScanMode    = 'Text'
    RepeatCount = 3
    PassThru    = $true
}
$result = Invoke-OffsetThreatScan @scanParameters
```
텍스트 모드는 `AmsiScanString`을 사용하며, 서로게이트 쌍을 분할하지 않고 유니코드 스칼라 접두사를 검색하고, 감지된 접두사를 검증된 소스 인코딩을 통해 매핑하며, 유니코드 스칼라, UTF-16 코드 유닛, 소스 파일 바이트 인덱스를 반환합니다. 텍스트 모드에서는 포함된 NUL 문자가 거부됩니다. 해당 파일에는 raw-byte 모드를 사용하십시오.

### AMSI raw-byte 스캔```powershell
Invoke-OffsetThreatScan ./content.bin -Engine AMSI -ScanMode RawBytes
```
### Microsoft Defender 검사```powershell
$scanParameters = @{
    FilePath       = './sample.bin'
    Engine         = 'Defender'
    RepeatCount    = 3
    TimeoutSeconds = 45
}
Invoke-OffsetThreatScan @scanParameters
```
The Defender 공급자:

- 설치된 최신 `MpCmdRun.exe` 플랫폼 경로를 확인합니다.
- 고유한 사용자 임시 디렉터리에 접두어를 기록합니다.
- `-DisableRemediation`을 사용한 사용자 지정 검사를 수행합니다.
- 시간 초과, 공급자 오류, 지역화/알 수 없는 출력 및 모호한 표시를 비확정적으로 처리합니다.
- 검사가 완료되면 임시 작업 공간을 삭제합니다.

### 경계 의미론

`DetectionPrefixLength = 841`과 같은 결과는 다음을 의미합니다.

- 접두어 길이 840은 클린/미검출로 분류되었습니다.
- 접두어 길이 841은 검출/차단으로 분류되었습니다.
- 반복 검사는 해당 전환이 안정적인지 여부를 결정합니다.

이는 바이트 840이 완전한 서명이거나, 유일한 기여 바이트이거나, 전체 악성 범위라는 것을 **증명하지는 않습니다**. 백신 판정은 토큰화, 주변 컨텍스트, 파일 형식, 공급자 상태 및 서명 업데이트에 따라 달라질 수 있습니다.

### 실제 예: 두 엔진, 하나의 파일

동일한 샘플(PowerUp.ps1, 공개 레드팀 스크립트, 445,954바이트)을 두 공급자로 스캔하면 경계가 무엇인지, 그리고 두 엔진이 어느 정도까지 일치한다고 신뢰할 수 있는지 보여줍니다. 텍스트 모드의 AMSI:```text
Threat boundary scan: C:\Ops\Samples\PowerUp.ps1
SHA-256:              7abc87d9620aef493617a4fc1f823850f32fb26ca9ae0f3befeadb04971e0246
Engine:               AMSI
Scan mode:            Text
Initial status:       Detected
Scans performed:      25
Provider probes:      25 (see -Verbose or the ProbeLog property for the full audit trail)
Duration:             22771.419 ms
Known clean prefix:   445953
Detected prefix:      445954
Boundary offset:      445953 (0x6CE01)
Unicode scalar index: 445953
UTF-16 code-unit idx: 445953
Stable:               True
Confidence:           High

Line number:          4586
Byte in line:         46
Target byte:          0A (10)

--- Source Context ---
   4585 | Set-Alias Get-CurrentUserTokenGroupSid Get-ProcessTokenGroup
   4586 | Set-Alias Invoke-AllChecks Invoke-PrivescAudit
                                                       ^
```
raw-byte 모드의 Microsoft Defender, 동일 파일:```text
Engine:               Defender
Scan mode:            RawBytes
Initial status:       Detected
Scans performed:      25
Duration:             15370.562 ms
Known clean prefix:   445951
Detected prefix:      445952
Boundary offset:      445951 (0x6CDFF)
Stable:               True
Confidence:           High
Signature:            Trojan:Win32/Kepavll!rfn

Line number:          4586
Byte in line:         44
Target byte:          69 (105)

--- Hex Dump ---
0006CDBF  74 2D 50 72 6F 63 65 73 73 54 6F 6B 65 6E 47 72   t-ProcessTokenGr
0006CDCF  6F 75 70 0A 53 65 74 2D 41 6C 69 61 73 20 49 6E   oup.Set-Alias In
0006CDDF  76 6F 6B 65 2D 41 6C 6C 43 68 65 63 6B 73 20 49   voke-AllChecks I
0006CDEF  6E 76 6F 6B 65 2D 50 72 69 76 65 73 63 41 75 64   nvoke-PrivescAud
0006CDFF  69 74 0A                                          it.
```
두 엔진 모두 **4586행**에서 수렴합니다. Defender의 경계는 `Invoke-PrivescAudit`의 끝부분 `it` 안에 위치하고, AMSI의 경계는 같은 줄을 종료하는 개행 문자에 위치하며, 2바이트 뒤입니다. 두 오프셋 모두 "시그니처"가 아닙니다. 이들은 각 공급자가 여전히 탐지한 가장 이른 접두사이며, 2바이트의 차이는 앞서 설명한 토큰화/컨텍스트 효과와 정확히 일치합니다. Defender는 추가로 매칭한 대상(`Trojan:Win32/Kepavll!rfn`)의 이름을 제공합니다. AMSI는 시그니처 이름을 보고하지 않으므로, AMSI 적중을 특성화하기 위해 `Invoke-OffsetThreatScanRegion`과 `Get-OffsetDetectionTrigger`가 존재합니다.

두 스캔 모두 약 436 KiB 파일에 대해 25회의 공급자 프로브를 사용합니다. 이분 탐색은 파일 크기에 대해 로그형이며, 모든 프로브는 `ProbeLog`에 기록됩니다.

공급자 계약과 해석 지침은 [위협 스캔 설계](https://github.com/warpedatom/offsetinspect/blob/main/docs/THREAT-SCANNING.md)를, 검색 코어를 건드리지 않고 공급자를 추가하는 방법을 포함한 스캐너 계약은 [공급자 인터페이스](https://github.com/warpedatom/offsetinspect/blob/main/docs/PROVIDER-INTERFACE.md)를, 구현 경계와 출처 표기는 [위협 스캔 출처](https://github.com/warpedatom/offsetinspect/blob/main/docs/PROVENANCE.md)를, 버전 관리되는 객체 계약은 [출력 스키마](https://github.com/warpedatom/offsetinspect/blob/main/docs/OUTPUT-SCHEMA.md)를 참조하십시오.

### 탐지 경계 보고서

`Export-OffsetThreatReport`는 하나 이상의 스캔 결과를 독립형 Markdown 또는 HTML 보고서(파일별 요약, 공급자/시그니처/엔진 메타데이터, 전체 `ProbeLog` 감사 추적, 경고)로 변환하여 엔게이지먼트 라이트업에 첨부할 수 있게 합니다. 결과만 읽고 다시 스캔하지 않으므로 크로스 플랫폼에서 실행됩니다. `-IncludeIoc`를 추가하면 각 보고서 항목에 해시/엔트로피/PE 표시기 패널(`Get-OffsetIOC`와 동일한 데이터)이 포함되고, `-IncludeTrigger`를 추가하면 경계가 있는 모든 결과에 대해 탐지 트리거 분석(아래 참조)이 추가됩니다.```powershell
Invoke-OffsetThreatScan ./sample.ps1 -Engine AMSI -ScanMode Text -PassThru |
    Export-OffsetThreatReport -Path ./report.html -Format Html

# Aggregate many scans into one report, with an indicators panel and trigger analysis per file:
$results | Export-OffsetThreatReport -Path ./engagement.md -IncludeIoc -IncludeTrigger
```
For corpus-scale reports, `-IncludeIoc` re-scans every file in PowerShell, which is slow. The companion native engine [OffsetScan](https://github.com/warpedatom/OffsetScan) emits schema-identical IOC JSON far faster; point the report at it with `-IocJsonPath` and it sources each panel from that JSON (falling back to a live `Get-OffsetIOC` only for files absent from it):

For corpus-scale reports, `-IncludeIoc` re-scans every file in PowerShell, which is slow. The companion native engine [OffsetScan](https://github.com/warpedatom/OffsetScan) emits schema-identical IOC JSON far faster; point the report at it with `-IocJsonPath` and it sources each panel from that JSON (falling back to a live `Get-OffsetIOC` only for files absent from it):```powershell
offsetscan ioc ./corpus --recurse > ./ioc.json
$results | Export-OffsetThreatReport -Path ./engagement.md -IocJsonPath ./ioc.json
```
### 배치 / 말뭉치 스캔

`Invoke-OffsetThreatScanBatch`는 파일, 디렉터리 및 와일드카드를 파일 목록으로 확장하고 각 파일을 스캔하며(파일별 실패가 있어도 계속 진행) 파일당 하나의 결과를 반환합니다. `-Summary`는 평면화된 탐지 매트릭스를 반환하며, 전체 결과는 보고서 생성기로 직접 파이프됩니다. 프로바이더 스캔은 Windows 전용입니다.```powershell
Invoke-OffsetThreatScanBatch ./payloads -Recurse -Engine AMSI |
    Export-OffsetThreatReport -Path ./engagement.html -Format Html

Invoke-OffsetThreatScanBatch ./samples -Summary |
    Format-Table File, DetectionPrefixLength, Confidence, ProbeCount
```
### 탐지 차이 / 회귀

`Compare-OffsetThreatResult`는 두 스캔 결과를 비교합니다(예: 서명 정의 업데이트 전후의 동일한 파일). 그리고 변경 사항을 분류합니다(`NewlyDetected`, `NoLongerDetected`, `BoundaryEarlier`, `BoundaryLater`, `BoundaryUnchanged`, `BothClean`)와 경계 델타 및 변경된 필드를 포함합니다.```powershell
$before = Invoke-OffsetThreatScan ./sample.ps1 -Engine Defender -PassThru
# ... update Defender signature definitions ...
$after  = Invoke-OffsetThreatScan ./sample.ps1 -Engine Defender -PassThru
Compare-OffsetThreatResult -Reference $before -Difference $after
```
### 다중 영역 검색

접두사 검색은 *첫 번째* 탐지 경계를 찾습니다. `Invoke-OffsetThreatScanRegion`은 파일을 세그먼트로 분할하고 각 세그먼트를 AMSI를 통해 **전적으로 메모리에서** 개별적으로 스캔하여 *여러* 독립적으로 탐지 가능한 영역을 찾습니다. 탐지된 내용은 디스크에 기록되지 않으므로 Defender 실시간 보호가 트리거되거나 재구성되지 않습니다. 각 적중 항목은 해당 세그먼트 내에서 이분화되어 정확한 트리거 경계를 절대 파일 오프셋에 매핑합니다.```powershell
Invoke-OffsetThreatScanRegion ./payload.bin -SegmentCount 16 |
    Select-Object -ExpandProperty DetectedRegions |
    Format-Table SegmentIndex, StartOffset, EndOffset, AbsoluteBoundaryOffset, SignatureName
```
이는 자체적으로 트리거되는 영역을 보고합니다; 전체 파일 컨텍스트에서만 발동하거나 세그먼트 경계에 걸쳐 있는 시그니처는 놓칠 수 있으므로, 해당 영역을 `Invoke-OffsetThreatScan` 및 수동 검증으로 확인해야 할 단서로 취급하십시오. AMSI(인메모리)는 여기서 지원되는 유일한 엔진입니다 - Defender 파일 스캐닝은 감지된 콘텐츠를 디스크에 기록해야 합니다.

### 탐지 트리거 상관관계

경계는 탐지가 전환되는 *위치*를 알려주고, `Get-OffsetDetectionTrigger`는 그 자리에 *무엇이* 있는지 알려줍니다. 프리픽스 경계는 가장 먼저 탐지된 프리픽스의 마지막 바이트이므로, 트리거하는 콘텐츠는 해당 오프셋에서 끝나는 연속 구간입니다. 이 명령은 경계가 속한 PE 섹션, 경계까지의 연속 구간의 엔트로피(평문 vs 패킹/인코딩), 그리고 경계에서 끝나거나 경계에 걸쳐 있는 추출된 문자열을 근접도 순으로 정렬하여 보고합니다. 이 문자열들이 후보 시그니처 콘텐츠이며, 한 줄 해석과 함께 제공됩니다. 바이트만 읽고 다시 스캔하지 않으므로, 저장된 결과에 대해 크로스 플랫폼으로 실행됩니다.```powershell
Invoke-OffsetThreatScan ./flagged.ps1 -Engine AMSI -PassThru | Get-OffsetDetectionTrigger

# Or point it at a file and a known boundary directly:
Get-OffsetDetectionTrigger -FilePath ./sample.bin -BoundaryOffset 0x4A1 |
    Select-Object Interpretation, Section, PreBoundaryEntropy -ExpandProperty CandidateStrings
```
### 탐지 드리프트 저널

"'이전에는 탐지되었는데 지금은 탐지되지 않는다'는 세 가지 매우 다른 원인이 있습니다: 파일이 변경되었거나, 시그니처가 변경되었거나, 제공자가 비결정적(non-deterministic)인 경우입니다. `Add-OffsetDriftEntry`는 추가 전용 NDJSON 스냅샷(파일 SHA-256, 상태, 경계, 시그니처 이름, 로컬 Defender 시그니처/엔진 버전)을 기록하며, `Get-OffsetDrift`는 해당 기록을 읽고 각 변경을 올바른 원인에 귀속시킵니다.```powershell
# Record a snapshot over time (from a scan result, or directly):
Invoke-OffsetThreatScan ./sample.ps1 -Engine AMSI -PassThru | Add-OffsetDriftEntry
Add-OffsetDriftEntry -FilePath ./sample.ps1 -Status Detected -Engine AMSI -SignatureName 'Trojan:PowerShell/X'

# Later, explain what changed:
Get-OffsetDrift -FilePath ./sample.ps1 | Select-Object -ExpandProperty Transitions
```
각 전환에는 레이블이 지정됩니다. SHA-256 변경은 **파일 수정**으로 읽히고, 파일은 변경되지 않았지만 Defender 시그니처 버전이 변경된 상태 변경은 **시그니처 드리프트**로 읽히며, 둘 다 해당하지 않는 상태 변경은 **비결정적** 프로바이더 결과로 읽힙니다. 저널의 기본값은 `%LOCALAPPDATA%\OffsetInspect\drift.ndjson`이며, `-JournalPath`로 재정의할 수 있습니다.

### 시그니처 견고성 테스트 (승인된 사용 전용)

`Invoke-OffsetMutationTest`는 탐지 엔지니어링 질문에 답합니다. 시그니처가 깨지기 쉬운 정확한 리터럴 일치인지, 아니면 일반적인 난독화에 견고한지? AMSI가 현재 탐지하는 샘플이 주어지면 표준 변형(대소문자 반전, 문자열 리터럴 연결, 주석 삽입, 공백 주입)을 적용하고 각 변형을 다시 스캔하여 어떤 클래스가 탐지를 무력화하는지 보고합니다. **모든 것은 메모리에서 발생합니다.** AMSI의 프로세스 내 인터페이스를 통해 이루어지며, 어떤 변형도 디스크에 기록되지 않으므로 회피 아티팩트가 생성되지 않고 Defender 실시간 보호가 관여하지 않습니다. 이 명령은 `-AuthorizedEngagement` 없이는 실행을 거부하며, 테스트할 권한이 있는 샘플에만 사용하기 위한 것입니다.```powershell
Invoke-OffsetMutationTest -FilePath ./flagged.ps1 -AuthorizedEngagement |
    Select-Object RobustnessSummary -ExpandProperty Results
```
예를 들어 "brittle: neutralized by StringConcatenation, CommentInsertion" 같은 결과는 방어자에게 시그니처가 연속된 리터럴에 기반하고 있으므로 확장되어야 함을 알려주며, 인가된 운영자에게는 통제의 적용 범위에 대해 동일한 사실을 알려줍니다.

### 텔레메트리 상관관계

경계를 감지한다는 것은 *엔진*이 무엇을 보는지 알려주고, `-CaptureTelemetry`는 *방어자*가 무엇을 보는지 알려줍니다. 스캔 전에 접근 가능한 각 Windows 텔레메트리 로그의 하이워터 마크를 스냅샷으로 찍은 다음, 해당 작업이 알림을 발생시켰는지, 어떤 맥락에서 발생했는지, 어떤 소스가 맹점이었는지 보고합니다 - "가시성을 가정한 다음 검증하라"는 질문에 증거로 답하는 것입니다.```powershell
$r = Invoke-OffsetThreatScan ./flagged.ps1 -Engine AMSI -CaptureTelemetry -PassThru
$r.Telemetry | Format-List AlertGenerated, CorrelationConfidence, Findings
$r.Telemetry.Alert | Format-List ThreatName, SeverityName, SourceName, ProcessName, DetectionUser
```
The `Telemetry` property (`OffsetInspect.TelemetryCorrelation`) reports:

`Telemetry` 속성(`OffsetInspect.TelemetryCorrelation`)은 다음을 보고합니다:

- `AlertGenerated` / `Alert` - whether a Microsoft Defender detection (event 1116/1117) was logged for the scan, and its context (threat name, severity, detection source, process, user).

- `AlertGenerated` / `Alert` - 스캔에 대해 Microsoft Defender 탐지(이벤트 1116/1117)가 기록되었는지와 해당 컨텍스트(위협 이름, 심각도, 탐지 소스, 프로세스, 사용자)를 나타냅니다.

- `CorrelationConfidence` - **High** only when the detection's source matches the provider **and** its process matches the scanning host, so a coincidental concurrent detection is never claimed; Medium on source alone; Low on neither.

- `CorrelationConfidence` - 탐지 소스가 공급자와 일치 **하고** 해당 프로세스가 스캔 호스트와 일치하는 경우에만 **High**로 표시되어, 우연한 동시 탐지가 절대 주장되지 않습니다. 소스만 일치하면 Medium, 둘 다 일치하지 않으면 Low입니다.

- `SourcesAccessible` / `SourcesUnavailable` - which telemetry logs were readable and which were blind (Sysmon absent, the Security log requiring elevation). A visibility gap is itself a finding.

- `SourcesAccessible` / `SourcesUnavailable` - 읽을 수 있었던 텔레메트리 로그와 확인할 수 없었던 로그(Sysmon 부재, 상승된 권한이 필요한 Security 로그)를 나타냅니다. 가시성 공백 자체가 하나의 발견 사항입니다.

- `Findings` - plain-language conclusions: an alert with full context, an alert lacking a threat name, no telemetry at all, or a missing source.

- `Findings` - 평이한 언어로 된 결론: 전체 컨텍스트를 포함한 경고, 위협 이름이 없는 경고, 텔레메트리가 전혀 없는 경우, 또는 소스 누락.

The primary source is the Microsoft Defender Operational log, readable without elevation; correlation is by event `RecordId` (monotonic and timezone-independent). Windows-only, and inert unless `-CaptureTelemetry` is passed.

기본 소스는 상승된 권한 없이 읽을 수 있는 Microsoft Defender 운영(Operational) 로그입니다. 상관 관계는 이벤트 `RecordId`(단조 증가, 시간대 독립적)를 기준으로 합니다. Windows 전용이며 `-CaptureTelemetry`가 전달되지 않으면 비활성 상태입니다.

## Static triage helpers

## 정적 트라이지지 도우미

Three cross-platform static-analysis commands support malware triage and compose with the offset core:

세 가지 크로스 플랫폼 정적 분석 명령이 악성코드 트라이지지를 지원하며 오프셋 코어와 함께 사용할 수 있습니다:

- `Get-OffsetEntropy` - per-window Shannon entropy (bits/byte) to locate packed or encrypted regions; cross-reference the flagged windows with `Invoke-OffsetThreatScanRegion` detections.

- `Get-OffsetEntropy` - 패킹되거나 암호화된 영역을 찾기 위한 윈도우별 섀넌 엔트로피(비트/바이트). 플래그된 윈도우를 `Invoke-OffsetThreatScanRegion` 탐지와 상호 참조하십시오.

- `Get-OffsetString` - printable ASCII and UTF-16LE strings with byte offsets; pipe offsets into `Invoke-OffsetInspect` for context.

- `Get-OffsetString` - 바이트 오프셋이 포함된 인쇄 가능한 ASCII 및 UTF-16LE 문자열. 컨텍스트를 위해 오프셋을 `Invoke-OffsetInspect`로 파이프하십시오.

- `Get-OffsetPEInfo` - PE machine/bitness, entry point, section table, **imports and imphash**, appended-**overlay** detection, and resource size, with `-Offset` mapping a byte offset to its section (`.text`, `.rsrc`, ...). Imphash uses the standard `library.function` MD5 and is verified byte-identical to pefile/VirusTotal - including special-library ordinal resolution, so an ordinal imported from `ws2_32`/`wsock32`/`oleaut32` resolves to its real function name; every other ordinal import renders `ordNNN`, exactly as pefile does.

---

[Read more](https://github.com/warpedatom/offsetinspect)
도구 다운로드