Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
OffsetInspect — PowerShell toolkit per l'analisi dei confini di rilevamento di AMSI/Defender e il triage statico di malware, mappa gli offset dei byte ai trigger di rilevamento, più analisi YARA, entropia, stringhe e PE/imphash. Complementare a OffsetScan. | Kitploit
Strumenti/GitHubGitHub/warpedatom/offsetinspect
Strumenti DifensiviAnalisi StaticaAnalisi delle VulnerabilitàExploitReverse EngineeringInformatica ForenseAnalisi MalwarePenetration TestingAnalisi di BinariRed TeamingRisposta agli Incidenti
8210373 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
GitHub
warpedatom/offsetinspect

OffsetInspect

PowerShell toolkit per l'analisi dei confini di rilevamento di AMSI/Defender e il triage statico di malware, mappa gli offset dei byte ai trigger di rilevamento, più analisi YARA, entropia, stringhe e PE/imphash. Complementare a OffsetScan.

Vedi Repository
Condividi
<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

**Un toolkit PowerShell a memoria limitata per l'ispezione di offset di byte, la correlazione delle sorgenti, il confronto binario e l'analisi dei confini di rilevamento difensivi.**

OffsetInspect risponde a una domanda pratica dell'analista:

> Quale contenuto è presente a questo offset di byte e quale contesto di origine o binario lo circonda?

Fornisce inoltre un flusso di lavoro nativo OffsetInspect per i confini di rilevamento, ispirato allo stesso problema analitico affrontato da ThreatCheck, senza includerne il codice sorgente o i binari: individua il prefisso di contenuto più antico che AMSI o Microsoft Defender rileva ancora, convalida ripetutamente il confine e inserisce l'offset risultante direttamente nell'ispettore di contesto. Oltre a questo nucleo, aggiunge una suite di analisi red-team e triage statico: scoperta multi-regione, scansione del corpus, diffing delle rilevazioni, correlazione dei trigger di rilevamento, journaling del drift, report di engagement, analisi dell'entropia, estrazione delle stringhe e parsing PE/imphash - tutto in sola lettura, più un tester di robustezza delle firme per uso autorizzato che perturba i campioni solo in memoria, senza mai disabilitare o riconfigurare la protezione degli endpoint.

## Strumento complementare

Per il triage statico su scala di corpus (parsing PE, entropia, stringhe, IOC) senza overhead PowerShell, vedi **[OffsetScan](https://github.com/warpedatom/OffsetScan)** - un binario Rust nativo con lo stesso schema di output JSON. OffsetInspect 3.1.0+ ingerisce il JSON IOC di OffsetScan direttamente tramite `-IocJsonPath`.

---

## Punti salienti

- Apre ogni file di ispezione unico tramite un handle di lettura stabile ed elabora tutti gli offset richiesti insieme.
- Utilizza un passaggio di streaming a memoria limitata per il mapping delle righe invece di rileggere l'intero file per ogni offset.
- Legge solo le finestre di byte richieste per l'output esadecimale e il confronto.
- Mappa gli offset di byte UTF-8 e UTF-16 alle righe di origine e alle posizioni dei caratteri.
- Implementa il contesto di origine precedente e successivo tramite `-ContextLines`.
- Supporta formati di output umano, oggetto, JSON, CSV e file CSV.
- Supporta piani file/offset uno-a-molti, molti-a-uno e accoppiati.
- Confronta il byte target con un secondo file senza caricare ripetutamente quel file.
- Aggiunge un livello provider AMSI e Microsoft Defender implementato indipendentemente con stati espliciti di errore, timeout, bloccato e indeterminato.
- Registra una traccia di audit per-sonda (`ProbeLog`/`ProbeCount`) di ogni invocazione distinta del provider, trasmessa in tempo reale a `-Verbose`, per una trascrizione pronta per il report del costo reale del provider di una scansione.
- Scopre più regioni indipendentemente rilevabili in un file tramite scansione AMSI in memoria (nulla di rilevato viene scritto su disco) e mappa ogni confine a un offset assoluto.
- Scansiona un corpus in una matrice di rilevamento consolidata, confronta le rilevazioni tra due scansioni ed esporta report di engagement in Markdown/HTML (alimentati opzionalmente dal JSON del motore OffsetScan nativo per pannelli IOC su scala di corpus).
- Correla un confine di rilevamento al contenuto che lo ha prodotto: la sezione PE, l'entropia del tratto fino al confine e le stringhe che terminano al confine o lo attraversano come contenuto candidato per la firma.
- Registra le rilevazioni nel tempo (hash del file **e** versione della firma Defender locale) in modo che un cambiamento nella rilevabilità possa essere attribuito al file, a un aggiornamento del database delle firme o a un risultato non deterministico del provider.
- Testa la robustezza delle firme per engagement autorizzati perturbando un campione rilevato **in memoria** (maiuscole/minuscole, concatenazione, commento, spazi bianchi) e riportando quali classi di trasformazione eludono - nessuna variante viene mai scritta su disco.
- Correla una scansione con la telemetria Windows che genera (`-CaptureTelemetry`): se è stato generato un avviso di Microsoft Defender, con quale contesto e quali fonti di telemetria sono state cieche - codificando il principio "assumi visibilità, poi validala". Sola lettura, non amministratore, solo Windows.
- Aggiunge helper di triage statico del malware: entropia per finestra (regioni impacchettate/crittografate), estrazione di stringhe ASCII/UTF-16LE con offset e parsing di header/sezioni/import PE con imphash e rilevamento overlay.
- Verifica la provenienza Authenticode (`Get-OffsetSignature`): utilizzando la reale convalida della fiducia della piattaforma, segnala se un file è firmato validamente e attendibile, chi lo ha firmato e se è firmato embedded o catalog - un segnale del firmatario che completa l'imphash e l'impronta della toolchain di build (import vs toolchain vs firmatario). Solo Windows.
- Non modifica mai le esclusioni di Defender, la protezione in tempo reale o la configurazione di sicurezza del sistema.
- Viene fornito come pacchetto PowerShell Gallery autonomo senza dipendenze runtime esterne; la scansione YARA e ClamAV sono le uniche eccezioni opzionali, ciascuna richiede il proprio motore esterno.

## Comandi

| Comando | Scopo | Piattaforma |
|---|---|---|
| `Invoke-OffsetInspect` | Mappa gli offset di byte al contesto di origine/binario, esadecimale e confronto | Multipiattaforma |
| `Invoke-OffsetThreatScan` | Ricerca del confine di rilevamento AMSI/Defender per un file | Windows |
| `Invoke-OffsetThreatScanBatch` | Scansiona un corpus di file; `-Summary` restituisce una matrice di rilevamento | Windows |
| `Invoke-OffsetThreatScanRegion` | Scoperta multi-regione tramite AMSI in memoria (nessuna scrittura su disco) | Windows |
| `Invoke-OffsetMutationTest` | Test di robustezza delle firme: perturba un campione rilevato in memoria, segnala quali trasformazioni eludono (solo uso autorizzato) | Windows |
| `Compare-OffsetThreatResult` | Confronta due risultati di scansione (es. tra aggiornamenti delle definizioni delle firme) | Multipiattaforma |
| `Get-OffsetDetectionTrigger` | Correla un confine di rilevamento al contenuto che molto probabilmente lo ha attivato | Multipiattaforma |
| `Add-OffsetDriftEntry` | Registra un'istantanea di rilevamento (hash file + versione firma Defender) in un journal | Multipiattaforma² |
| `Get-OffsetDrift` | Spiega come è cambiata la rilevabilità di un file: modifica del file, aggiornamento firma o risultato non deterministico | Multipiattaforma |
| `Export-OffsetThreatReport` | Renderizza i risultati di scansione in un report di engagement Markdown/HTML | Multipiattaforma |
| `Invoke-OffsetYaraScan` | Confronta un file con regole YARA; restituisce hit con offset di byte | Multipiattaforma¹ |
| `Invoke-OffsetClamScan` | Scansiona un file con il motore ClamAV; risultato di rilevamento normalizzato | Multipiattaforma¹ |
| `Get-OffsetEntropy` | Entropia di Shannon per finestra per individuare regioni impacchettate/crittografate | Multipiattaforma |
| `Get-OffsetString` | Estrae stringhe ASCII/UTF-16LE con offset di byte | Multipiattaforma |
| `Get-OffsetPEInfo` | Header PE, sezioni, import/imphash, overlay, offset→sezione | Multipiattaforma |
| `Get-OffsetIOC` | Pannello indicatori consolidato: hash, entropia, PE/imphash, stringhe | Multipiattaforma |
| `Get-OffsetSignature` | Firma Authenticode: se è firmata validamente e attendibile, da chi, embedded o catalog | Windows |

¹ Questi due comandi hanno dipendenze esterne opzionali: `Invoke-OffsetYaraScan` necessita del motore YARA (`winget install VirusTotal.YARA`), e `Invoke-OffsetClamScan` necessita di ClamAV con i database delle firme (`winget install Cisco.ClamAV`, poi `freshclam`). Ogni altro comando è autonomo. ClamAV è qui un rilevatore a file singolo, non un motore di ricerca dei confini - `clamscan` carica l'intero database per ogni invocazione, quindi la bisezione richiederebbe il demone `clamd`.

² `Add-OffsetDriftEntry` registra su più piattaforme, ma i campi della versione della firma/motore Defender si popolano solo su Windows (tramite `Get-MpComputerStatus`); altrove vengono registrati come null e il resto dell'istantanea viene comunque scritto.

Il nucleo di ispezione degli offset e tutti gli helper di triage statico sono multipiattaforma (Windows, Linux, macOS); i provider di minacce AMSI/Defender sono solo Windows.

## Installazione

### PowerShell Gallery```powershell
Install-Module OffsetInspect -Scope CurrentUser
Import-Module OffsetInspect
```
### Checkout del repository```powershell
git clone https://github.com/warpedatom/OffsetInspect.git
cd OffsetInspect
Import-Module ./module/OffsetInspect/OffsetInspect.psd1 -Force
```
Il repository include anche dei thin CLI wrappers:```powershell
./OffsetInspect.ps1 <file> <offset>
./OffsetThreatScan.ps1 <file> -Engine AMSI
```
## Ispezione degli offset

### Output leggibile dall'uomo```powershell
Invoke-OffsetInspect ./sample.bin 0x200
```
CONTENUTO:```powershell
$inspectParameters = @{
    FilePaths    = './script.ps1'
    OffsetInputs = 128, 256, 512
    ByteWindow   = 64
    ContextLines = 4
}
Invoke-OffsetInspect @inspectParameters
```
### Oggetti strutturati```powershell
$inspectParameters = @{
    FilePaths    = './script.ps1'
    OffsetInputs = 0x80, 0x100
    PassThru     = $true
}
$results = Invoke-OffsetInspect @inspectParameters

$results | Where-Object BytesDiffer
```
### JSON e CSV```powershell
Invoke-OffsetInspect ./sample.bin 0x200 -Json
Invoke-OffsetInspect ./sample.bin 0x200 -Csv
Invoke-OffsetInspect ./sample.bin 0x200 -CsvPath ./artifacts/offsets.csv
```
JSON mode emette sempre un array, anche per un singolo risultato.

### Confronto binario```powershell
$compareParameters = @{
    FilePaths    = './before.bin'
    OffsetInputs = 0x200
    CompareFile  = './after.bin'
    PassThru     = $true
}
Invoke-OffsetInspect @compareParameters
```
### Formati degli offset

| Input | Interpretazione |
|---|---:|
| `512` | Decimale 512 |
| `0x200` o `0X200` | Esadecimale 0x200 |
| `200h` | Esadecimale 0x200 |
| `E1AB1` | Esadecimale senza prefisso perché contiene A-F |

I valori puramente numerici senza prefisso o suffisso sono intenzionalmente trattati come decimali.

### Modalità di codifica

| Modalità | Comportamento |
|---|---|
| `Auto` | Rileva BOM UTF-8/UTF-16; altrimenti usa UTF-8 |
| `Default` | Usa la codifica predefinita del sistema operativo host |
| `UTF8` | Mapping sorgente UTF-8 |
| `UTF16LE` | Mapping sorgente little-endian UTF-16 |
| `UTF16BE` | Mapping sorgente big-endian UTF-16 |
| `ASCII` | Mapping sorgente ASCII |

Il report mostra sia `BytePositionInLine` che `CharacterPosition`. Questa distinzione è importante quando un file sorgente contiene caratteri multibyte.

## Analisi dei confini delle minacce

L'analisi Threat-provider è solo per Windows. Il normale comando di ispezione degli offset rimane multipiattaforma.

### AMSI text scan```powershell
$scanParameters = @{
    FilePath    = './script.ps1'
    Engine      = 'AMSI'
    ScanMode    = 'Text'
    RepeatCount = 3
    PassThru    = $true
}
$result = Invoke-OffsetThreatScan @scanParameters
```
La modalità testo utilizza `AmsiScanString`, cerca prefissi di scalar Unicode senza dividere coppie di surrogate, mappa il prefisso rilevato attraverso la codifica sorgente convalidata e restituisce indici di scalar Unicode, code-unit UTF-16 e byte del file sorgente. I caratteri NUL incorporati vengono rifiutati in modalità testo; usa la modalità raw-byte per quei file.

### Scansione raw-byte AMSI```powershell
Invoke-OffsetThreatScan ./content.bin -Engine AMSI -ScanMode RawBytes
```
### Scansione di Microsoft Defender```powershell
$scanParameters = @{
    FilePath       = './sample.bin'
    Engine         = 'Defender'
    RepeatCount    = 3
    TimeoutSeconds = 45
}
Invoke-OffsetThreatScan @scanParameters
```
Il provider Defender:

- Risolve il percorso della piattaforma `MpCmdRun.exe` più recente installato.
- Scrive i prefissi in una directory temporanea utente unica.
- Utilizza una scansione personalizzata con `-DisableRemediation`.
- Considera timeout, errori del provider, output localizzato/sconosciuto e marcatori ambigui come non definitivi.
- Elimina l'area di lavoro temporanea al termine della scansione.

### Semantica dei confini

Un risultato come `DetectionPrefixLength = 841` significa:

- La lunghezza del prefisso 840 è stata classificata come pulita/non rilevata.
- La lunghezza del prefisso 841 è stata classificata come rilevata/bloccata.
- Controlli ripetuti determinano se quella transizione è stabile.

Non **prova** che il byte 840 sia la firma completa, l'unico byte contribuente o l'intero intervallo dannoso. Le decisioni dell'antivirus possono dipendere dalla tokenizzazione, dal contesto circostante, dal tipo di file, dallo stato del provider e dagli aggiornamenti delle firme.

### Esempio pratico: due motori, un file

La scansione dello stesso campione (PowerUp.ps1, uno script pubblico di red team, 445,954 byte) con entrambi i provider mostra cos'è un confine e fino a che punto ci si può fidare che due motori concordino. AMSI in modalità testo:```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
                                                       ^
```
Microsoft Defender in modalità raw-byte, stesso file:```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.
```
Entrambi i motori convergono sulla **linea 4586** - il confine di Defender cade all'interno del `it` finale di `Invoke-PrivescAudit`, quello di AMSI sulla nuova riga che termina la stessa linea, due byte dopo. Nessuno dei due offset è "la firma": sono il prefisso più precoce che ciascun provider ha ancora segnalato, e il disaccordo di due byte è esattamente l'effetto di tokenizzazione/contesto descritto sopra. Defender inoltre nomina ciò che ha rilevato (`Trojan:Win32/Kepavll!rfn`); AMSI non riporta alcun nome di firma, motivo per cui `Invoke-OffsetThreatScanRegion` e `Get-OffsetDetectionTrigger` esistono per caratterizzare un hit di AMSI.

Entrambe le scansioni costano 25 sonde di provider per un file di ~436 KiB - la bisezione è logaritmica nella dimensione del file, e ogni sonda è registrata in `ProbeLog`.

Vedere [Threat scanning design](https://github.com/warpedatom/offsetinspect/blob/main/docs/THREAT-SCANNING.md) per il contratto del provider e le linee guida di interpretazione, [provider interface](https://github.com/warpedatom/offsetinspect/blob/main/docs/PROVIDER-INTERFACE.md) per il contratto dello scanner e come aggiungere un provider senza toccare il core di ricerca, [threat-scanning provenance](https://github.com/warpedatom/offsetinspect/blob/main/docs/PROVENANCE.md) per i confini di implementazione e l'attribuzione, e [output schema](https://github.com/warpedatom/offsetinspect/blob/main/docs/OUTPUT-SCHEMA.md) per il contratto dell'oggetto versionato.

### Report dei confini di rilevamento

`Export-OffsetThreatReport` trasforma uno o più risultati di scansione in un report Markdown o HTML autonomo - riepilogo per file, metadati del provider/firma/motore, l'intero audit trail `ProbeLog` e avvisi - da allegare a un writeup di engagement. Legge solo i risultati e non esegue mai una nuova scansione, quindi funziona multipiattaforma. Aggiungere `-IncludeIoc` per includere un pannello di indicatori hash/entropia/PE (gli stessi dati di `Get-OffsetIOC`) in ogni voce del report, e `-IncludeTrigger` per aggiungere un'analisi del trigger di rilevamento (vedi sotto) per ogni risultato con un confine.```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
```
Per i report su scala di corpus, `-IncludeIoc` esegue una nuova scansione di ogni file in PowerShell, il che è lento. Il motore nativo complementare [OffsetScan](https://github.com/warpedatom/OffsetScan) emette JSON IOC con schema identico molto più velocemente; puntare il report su di esso con `-IocJsonPath` e attinge ogni pannello da quel JSON (ricorrendo a un `Get-OffsetIOC` live solo per i file assenti da esso):```powershell
offsetscan ioc ./corpus --recurse > ./ioc.json
$results | Export-OffsetThreatReport -Path ./engagement.md -IocJsonPath ./ioc.json
```
### Scansione batch / corpus

`Invoke-OffsetThreatScanBatch` espande file, directory e wildcard in un elenco di file, scansiona ciascuno (proseguendo oltre gli errori per singolo file) e restituisce un risultato per file. `-Summary` restituisce una matrice di rilevamento appiattita; i risultati completi possono essere passati direttamente al generatore di report. La scansione dei provider è solo per 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
```
### Diff / regressione del rilevamento

`Compare-OffsetThreatResult` confronta due risultati di scansione - ad esempio lo stesso file prima e dopo un aggiornamento della definizione delle firme - e classifica il cambiamento (`NewlyDetected`, `NoLongerDetected`, `BoundaryEarlier`, `BoundaryLater`, `BoundaryUnchanged`, `BothClean`) con il delta del confine e i campi modificati.```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
```
### Scoperta multi-regione

La ricerca per prefisso trova il *primo* confine di rilevamento. `Invoke-OffsetThreatScanRegion` trova *multiple* regioni rilevabili indipendentemente suddividendo il file in segmenti e scansionando ciascuno in isolamento tramite AMSI **interamente in memoria** - nulla di rilevato viene scritto su disco, quindi la protezione in tempo reale di Defender non viene mai attivata o riconfigurata. Ogni rilevamento viene bisecato all'interno del proprio segmento per mappare il confine esatto di attivazione a un offset assoluto del file.```powershell
Invoke-OffsetThreatScanRegion ./payload.bin -SegmentCount 16 |
    Select-Object -ExpandProperty DetectedRegions |
    Format-Table SegmentIndex, StartOffset, EndOffset, AbsoluteBoundaryOffset, SignatureName
```
Questo riporta regioni che si attivano da sole; può tralasciare firme che si attivano solo in contesto di file completo o che attraversano un confine di segmento, quindi tratta le regioni come indizi da confermare con `Invoke-OffsetThreatScan` e validazione manuale. AMSI (in-memory) è l'unico motore supportato qui - la scansione di file di Defender richiederebbe la scrittura del contenuto rilevato su disco.

### Correlazione dei trigger di rilevamento

Un confine ti dice *dove* il rilevamento scatta; `Get-OffsetDetectionTrigger` ti dice *cosa* c'è. Poiché un confine di prefisso è l'ultimo byte del prefisso rilevato più precoce, il contenuto scatenante è una sequenza che termina a quell'offset. Il comando riporta la sezione PE in cui cade il confine, l'entropia della sequenza fino ad esso (testo semplice vs compresso/codificato) e le stringhe estratte che terminano o sono a cavallo del confine, classificate per prossimità - il contenuto candidato della firma - con un'interpretazione in una riga. Legge solo byte e non esegue mai una nuova scansione, quindi funziona multipiattaforma sui risultati salvati.```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
```
### Registro del drift di rilevamento

"È stato rilevato prima e ora non lo è" ha tre cause molto diverse: il file è cambiato, le firme sono cambiate o il provider è non deterministico. `Add-OffsetDriftEntry` registra snapshot NDJSON solo append - SHA-256 del file, stato, boundary, nome della firma e le versioni locali della firma/engine di Defender - e `Get-OffsetDrift` legge quella cronologia e attribuisce ogni cambiamento alla giusta causa.```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
```
Ogni transizione è etichettata: una modifica SHA-256 viene letta come una **modifica del file**; un cambiamento di stato con file invariato ma versione della firma Defender aggiornata viene letto come **deriva della firma**; un cambiamento di stato con nessuna delle due viene letto come un **risultato non deterministico del provider**. Il journal è predefinito su `%LOCALAPPDATA%\OffsetInspect\drift.ndjson`; si può sovrascrivere con `-JournalPath`.

### Test di robustezza delle firme (solo per uso autorizzato)

`Invoke-OffsetMutationTest` risponde a una domanda di ingegneria del rilevamento: una firma è un confronto esatto e fragile, oppure è robusta rispetto all'offuscamento comune? Dato un campione che AMSI rileva attualmente, applica perturbazioni standard – inversione di maiuscole/minuscole, concatenazione di stringhe letterali, inserimento di commenti, iniezione di spazi bianchi – e ri-esamina ogni variante per segnalare quali classi neutralizzano il rilevamento. **Tutto avviene in memoria** tramite l'interfaccia in-process di AMSI; nessuna variante viene scritta su disco, quindi non vengono prodotti artefatti evasivi e la protezione in tempo reale di Defender non è coinvolta. Il comando rifiuta di essere eseguito senza `-AuthorizedEngagement` ed è destinato solo a campioni che sei autorizzato a testare.```powershell
Invoke-OffsetMutationTest -FilePath ./flagged.ps1 -AuthorizedEngagement |
    Select-Object RobustnessSummary -ExpandProperty Results
```
Un risultato di, ad esempio, "brittle: neutralizzato da StringConcatenation, CommentInsertion" dice a un difensore che le chiavi della firma si basano su un letterale contiguo e dovrebbero essere ampliate; dice a un operatore autorizzato la stessa cosa riguardo alla copertura di un controllo.

### Correlazione della telemetria

Rilevare un confine ti dice cosa vede il *motore*; `-CaptureTelemetry` ti dice cosa vede il *difensore*. Esso registra il high-water mark di ciascun log di telemetria di Windows accessibile prima della scansione, poi segnala se l'azione ha generato un avviso, con quale contesto, e quali fonti erano cieche – la domanda "presupponi la visibilità, poi validala", risposta con prove.```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
```
La proprietà `Telemetry` (`OffsetInspect.TelemetryCorrelation`) segnala:

- `AlertGenerated` / `Alert` - se è stato registrato un rilevamento di Microsoft Defender (evento 1116/1117) per la scansione, e il suo contesto (nome della minaccia, gravità, origine del rilevamento, processo, utente).
- `CorrelationConfidence` - **Alta** solo quando l'origine del rilevamento corrisponde al provider **e** il suo processo corrisponde all'host di scansione, quindi non viene mai rivendicata una rilevazione coincidente concorrente; Media solo per l'origine; Bassa per nessuno dei due.
- `SourcesAccessible` / `SourcesUnavailable` - quali log di telemetria erano leggibili e quali erano inaccessibili (Sysmon assente, il Security log richiede elevazione). Una lacuna di visibilità è di per sé un reperto.
- `Findings` - conclusioni in linguaggio semplice: un avviso con contesto completo, un avviso senza nome della minaccia, nessuna telemetria affatto, o una fonte mancante.

La fonte primaria è il log operativo di Microsoft Defender, leggibile senza elevazione; la correlazione avviene tramite l'evento `RecordId` (monotono e indipendente dal fuso orario). Solo Windows, e inerte a meno che non venga passato `-CaptureTelemetry`.

## Helper di triage statici

Tre comandi di analisi statica multipiattaforma supportano il triage di malware e si compongono con il nucleo di offset:

- `Get-OffsetEntropy` - entropia di Shannon per finestra (bit/byte) per individuare regioni impaccate o crittografate; incrociare le finestre segnalate con i rilevamenti di `Invoke-OffsetThreatScanRegion`.
- `Get-OffsetString` - stringhe ASCII stampabili e UTF-16LE con offset byte; reindirizzare gli offset in `Invoke-OffsetInspect` per il contesto.
- `Get-OffsetPEInfo` - PE machine/bitness, punto di ingresso, tabella delle sezioni, **import e imphash**, rilevamento **overlay** aggiunto, e dimensione delle risorse, con `-Offset` che mappa un offset byte alla sua sezione (`.text`, `.rsrc`, ...). Imphash utilizza il MD5 standard `library.function` ed è verificato byte-per-byte identico a pefile/VirusTotal - inclusa la risoluzione ordinale per librerie speciali, quindi un ordinale importato da `ws2_32`/`wsock32`/`oleaut32` viene risolto nel suo nome di funzione reale; ogni altro import ordinale rende `ordNNN`, esattamente come fa pefile.
- `Get-OffsetIOC` - pannello di indicatori one-shot che combina quanto sopra: MD5/SHA-1/SHA-256 (passaggio singolo), entropia complessiva, conteggio di stringhe stampabili, e PE machine/imphash/overlay quando applicabile.```powershell
Get-OffsetEntropy ./sample.bin -HighOnly | Select-Object -ExpandProperty Windows
Get-OffsetString ./sample.bin -MinimumLength 6 | Where-Object Value -match 'http|\.dll'
Get-OffsetPEInfo ./sample.exe | Select-Object Machine, EntryPointHex, ImpHash, ImportedDllCount, HasOverlay, OverlaySize
Get-OffsetIOC ./sample.exe | Format-List
```
### Scansione YARA

`Invoke-OffsetYaraScan` esegue regole YARA create dall'analista e restituisce ogni corrispondenza con il suo byte offset - integrando la visualizzazione dei limiti di rilevamento di AMSI/Defender con firme che controlli tu, senza necessità di antivirus installato (solo il motore YARA, ad es. `winget install VirusTotal.YARA`). Gli offset vengono alimentati direttamente nell'ispettore.```powershell
Invoke-OffsetYaraScan ./sample.bin -RulePath ./rules/malware.yar |
    ForEach-Object { Invoke-OffsetInspect $_.File $_.Offset -ContextLines 2 }
```
### Scansione con ClamAV

`Invoke-OffsetClamScan` esegue la scansione di un file con il motore on-demand di ClamAV e restituisce un risultato normalizzato (`Clean` / `Detected` / `Error`, più il nome della firma). Poiché `clamscan` carica l'intero database delle firme ad ogni chiamata, si tratta di un rilevatore a file singolo, non di un motore di ricerca di confine (che richiederebbe il demone `clamd`). Necessita che ClamAV sia installato **e** che i suoi database delle firme siano scaricati – `freshclam` non verrà eseguito finché non esiste un file di configurazione:```powershell
# One-time setup: create the freshclam config (remove the sample's "Example" line), then fetch databases.
Copy-Item "$env:ProgramFiles\ClamAV\conf_examples\freshclam.conf.sample" "$env:ProgramFiles\ClamAV\freshclam.conf"
(Get-Content "$env:ProgramFiles\ClamAV\freshclam.conf") -notmatch '^\s*Example\s*$' |
    Set-Content "$env:ProgramFiles\ClamAV\freshclam.conf"   # requires admin to write under Program Files
& "$env:ProgramFiles\ClamAV\freshclam.exe"

Invoke-OffsetClamScan ./sample.bin
```
Usa `-DatabasePath` per puntare a una directory di firme in una posizione scrivibile (non amministrativa), e `-ClamScanPath` se `clamscan` non è in `PATH`.

## Oggetti risultato

`Invoke-OffsetInspect -PassThru` restituisce oggetti `OffsetInspect.Result` contenenti:

- Percorso file canonico, dimensione del file, offset decimali ed esadecimali.
- Codifica richiesta e rilevata.
- Numero di riga, anteprima della sorgente, righe di contesto, posizione del byte e posizione del carattere.
- Byte target e dump esadecimale delimitato.
- Byte di confronto opzionale e stato di differenza.
- Avvisi, durata, stato di successo e messaggio di errore.

`Invoke-OffsetThreatScan -PassThru` restituisce oggetti `OffsetInspect.ThreatScanResult` contenenti:

- SHA-256 del file, timestamp della scansione UTC, motore, modalità di scansione, stato iniziale del provider e metadati del provider.
- Lunghezze dei prefissi noti puliti e noti rilevati.
- Limite del byte e limite opzionale del carattere.
- Stabilità, confidenza, conteggio scansioni, stati di limite ripetuti e nome della firma quando disponibile.
- Una traccia di audit `ProbeLog` di ogni sonda distinta del provider (esposta come `ProbeCount` nell'output CSV, ed esportabile in un trascritto JSON con `-ProbeLogPath`); vedere [schema di output](https://github.com/warpedatom/offsetinspect/blob/main/docs/OUTPUT-SCHEMA.md).
- Contesto `OffsetInspect.Result` annidato al limite mappato.

## Modello di prestazioni

L'implementazione in stile v1 rileggeva e decodificava un file completo per ogni offset. La versione 2 raggruppa il lavoro per file:```text
Previous approach: approximately O(file size × offset count)
Version 2:         approximately O(file bytes scanned once + requested windows)
```

---

[Read more](https://github.com/warpedatom/offsetinspect)
Scarica lo strumento