
AMSI/Defender डिटेक्शन-सीमा विश्लेषण और स्थैतिक मैलवेयर ट्राइएज के लिए PowerShell टूलकिट जो बाइट ऑफसेट को डिटेक्शन ट्रिगर्स से मैप करता है, साथ ही YARA, एन्ट्रॉपी, स्ट्रिंग और PE/imphash विश्लेषण। OffsetScan का साथी उपकरण।
बाउंडेड-मेमोरी PowerShell टूलकिट जो बाइट-ऑफसेट निरीक्षण, स्रोत सहसंबंध, बाइनरी तुलना, और डिफेंसिव डिटेक्शन-बाउंड्री विश्लेषण के लिए है।
OffsetInspect एक व्यावहारिक विश्लेषक प्रश्न का उत्तर देता है:
इस बाइट ऑफसेट पर क्या सामग्री मौजूद है, और इसके चारों ओर कौन-सा स्रोत या बाइनरी संदर्भ है?
यह ThreatCheck द्वारा संबोधित उसी विश्लेषक समस्या से प्रेरित एक OffsetInspect-नेटिव डिटेक्शन-बाउंड्री वर्कफ़्लो भी प्रदान करता है, बिना इसके स्रोत या बाइनरी को बंडल किए: यह उस सबसे प्रारंभिक सामग्री उपसर्ग (prefix) का पता लगाता है जिसे AMSI या Microsoft Defender अभी भी पहचानता है, बाउंड्री को बार-बार मान्य करता है, और परिणामी ऑफसेट को सीधे संदर्भ निरीक्षक में भेजता है। इस मुख्य भाग के ऊपर, यह एक रेड-टीम विश्लेषण और स्थैतिक ट्राइएज सुइट जोड़ता है - मल्टी-रिजन डिस्कवरी, कॉर्पस स्कैनिंग, डिटेक्शन डिफिंग, डिटेक्शन-ट्रिगर सहसंबंध, ड्रिफ्ट जर्नलिंग, एंगेजमेंट रिपोर्ट, एंट्रॉपी विश्लेषण, स्ट्रिंग निष्कर्षण, और PE/imphash पार्सिंग - सभी केवल-पठनीय (read-only), साथ ही एक अधिकृत-उपयोग सिग्नेचर-रोबस्टनेस परीक्षक जो नमूनों को केवल मेमोरी में परिवर्तित करता है, और एंडपॉइंट सुरक्षा को कभी अक्षम या पुन:कॉन्फ़िगर किए बिना।
PowerShell ओवरहेड के बिना कॉर्पस-स्तरीय स्थैतिक ट्राइएज (PE पार्सिंग, एंट्रॉपी, स्ट्रिंग्स, IOC) के लिए, OffsetScan देखें - एक नेटिव Rust बाइनरी जिसका JSON आउटपुट स्कीमा समान है। OffsetInspect 3.1.0+ -IocJsonPath के माध्यम से OffsetScan IOC JSON को सीधे इनजेस्ट करता है।
-ContextLines के माध्यम से पिछला और अगला स्रोत संदर्भ लागू करता है।ProbeLog/ProbeCount) रिकॉर्ड करता है, जो -Verbose पर लाइव स्ट्रीम होता है, ताकि स्कैन की वास्तविक प्रोवाइडर लागत की रिपोर्ट-तैयार प्रतिलिपि मिल सके।¹ इन दो कमांड्स की वैकल्पिक बाहरी निर्भरताएँ हैं: Invoke-OffsetYaraScan को YARA इंजन चाहिए (winget install VirusTotal.YARA), और Invoke-OffsetClamScan को सिग्नेचर डेटाबेस के साथ ClamAV चाहिए (winget install Cisco.ClamAV, फिर freshclam)। बाकी हर कमांड स्व-निहित है। यहाँ ClamAV एकल-फ़ाइल डिटेक्टर है, कोई बाउंड्री-खोज इंजन नहीं - clamscan प्रति इनवोकेशन अपना पूरा डेटाबेस लोड करता है, इसलिए bisection के लिए clamd डेमन की आवश्यकता होगी।
² Add-OffsetDriftEntry क्रॉस-प्लेटफ़ॉर्म जर्नल करता है, लेकिन Defender सिग्नेचर/इंजन संस्करण फ़ील्ड केवल Windows पर भरते हैं (Get-MpComputerStatus के माध्यम से); अन्यत्र वे null रिकॉर्ड होते हैं और बाकी स्नैपशॉट फिर भी लिखा जाता है।
ऑफसेट-निरीक्षण कोर और सभी स्थैतिक-ट्राइएज सहायक क्रॉस-प्लेटफ़ॉर्म (Windows, Linux, macOS) हैं; AMSI/Defender थ्रेट प्रोवाइडर केवल Windows के लिए हैं।
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
No source content was provided to translate.```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
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
| इनपुट | व्याख्या |
|---|---|
केवल संख्यात्मक मान बिना किसी उपसर्ग या प्रत्यय के जानबूझकर दशमलव माने जाते हैं।
आउटपुट BytePositionInLine और CharacterPosition दोनों की रिपोर्ट करता है। यह अंतर तब महत्वपूर्ण होता है जब किसी स्रोत फ़ाइल में मल्टीबाइट वर्ण होते हैं।
थ्रेट-प्रोवाइडर विश्लेषण केवल विंडोज़ पर उपलब्ध है। सामान्य ऑफ़सेट निरीक्षण कमांड क्रॉस-प्लेटफ़ॉर्म बना रहता है।
$scanParameters = @{ FilePath = './script.ps1' Engine = 'AMSI' ScanMode = 'Text' RepeatCount = 3 PassThru = $true } $result = Invoke-OffsetThreatScan @scanParameters
टेक्स्ट मोड `AmsiScanString` का उपयोग करता है, सरोगेट जोड़ों को विभाजित किए बिना यूनिकोड-स्केलर उपसर्गों की खोज करता है, पता लगाए गए उपसर्ग को मान्य स्रोत एन्कोडिंग के माध्यम से मैप करता है, और यूनिकोड-स्केलर, UTF-16 कोड-यूनिट और स्रोत-फ़ाइल बाइट इंडेक्स लौटाता है। टेक्स्ट मोड में एम्बेडेड NUL वर्ण अस्वीकार किए जाते हैं; उन फ़ाइलों के लिए रॉ-बाइट मोड का उपयोग करें।
### AMSI रॉ-बाइट स्कैन```powershell
Invoke-OffsetThreatScan ./content.bin -Engine AMSI -ScanMode RawBytes
$scanParameters = @{ FilePath = './sample.bin' Engine = 'Defender' RepeatCount = 3 TimeoutSeconds = 45 } Invoke-OffsetThreatScan @scanParameters
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
^
Microsoft Defender को raw-byte मोड में, वही फ़ाइल:```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 की उसी पंक्ति को समाप्त करने वाले न्यूलाइन पर, दो बाइट बाद। कोई भी ऑफ़सेट "सिग्नेचर" नहीं है: वे सबसे प्रारंभिक प्रीफ़िक्स हैं जिन्हें प्रत्येक प्रदाता अभी भी फ़्लैग करता है, और दो-बाइट का अंतर ठीक वही टोकनाइज़ेशन/संदर्भ प्रभाव है जिसका ऊपर वर्णन किया गया है। Defender अतिरिक्त रूप से बताता है कि उसने किससे मेल खाया (`Trojan:Win32/Kepavll!rfn`); AMSI कोई सिग्नेचर नाम रिपोर्ट नहीं करता, यही कारण है कि AMSI हिट की विशेषता बताने के लिए `Invoke-OffsetThreatScanRegion` और `Get-OffsetDetectionTrigger` मौजूद हैं।
दोनों स्कैन की लागत ~436 KiB फ़ाइल के लिए 25 प्रदाता प्रोब है - द्विविभाजन फ़ाइल आकार के सापेक्ष लघुगणकीय है, और हर प्रोब `ProbeLog` में दर्ज किया जाता है।
प्रदाता अनुबंध और व्याख्या मार्गदर्शन के लिए [थ्रेट स्कैनिंग डिज़ाइन](https://github.com/warpedatom/offsetinspect/blob/HEAD/docs/THREAT-SCANNING.md), स्कैनर अनुबंध और सर्च कोर को छुए बिना प्रदाता जोड़ने के तरीके के लिए [प्रदाता इंटरफ़ेस](https://github.com/warpedatom/offsetinspect/blob/HEAD/docs/PROVIDER-INTERFACE.md), कार्यान्वयन सीमाओं और श्रेय के लिए [थ्रेट-स्कैनिंग प्रोवेनेंस](https://github.com/warpedatom/offsetinspect/blob/HEAD/docs/PROVENANCE.md), और संस्करणित ऑब्जेक्ट अनुबंध के लिए [आउटपुट स्कीमा](https://github.com/warpedatom/offsetinspect/blob/HEAD/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
कॉर्पस-पैमाने की रिपोर्टों के लिए, -IncludeIoc PowerShell में हर फ़ाइल को फिर से स्कैन करता है, जो धीमा है। साथी नेटिव इंजन OffsetScan स्कीमा-समान IOC JSON को कहीं अधिक तेज़ी से आउटपुट करता है; रिपोर्ट को -IocJsonPath के साथ उसकी ओर इंगित करें और यह प्रत्येक पैनल को उस JSON से प्राप्त करता है (केवल उन फ़ाइलों के लिए जो उसमें अनुपस्थित हैं, लाइव Get-OffsetIOC का सहारा लेते हुए):```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 दो स्कैन परिणामों के बीच अंतर (diff) निकालता है - उदाहरण के लिए सिग्नेचर-डेफिनिशन अपडेट से पहले और बाद की समान फ़ाइल - और परिवर्तन को वर्गीकृत करता है (NewlyDetected, NoLongerDetected, BoundaryEarlier, BoundaryLater, BoundaryUnchanged, BothClean) साथ में बाउंड्री डेल्टा और बदले गए फ़ील्ड्स के साथ।```powershell
$before = Invoke-OffsetThreatScan ./sample.ps1 -Engine Defender -PassThru
$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 सेक्शन की रिपोर्ट करता है जिसमें सीमा आती है, उस तक के रन की एंट्रॉपी (प्लेनटेक्स्ट बनाम पैक्ड/एन्कोडेड), और उस पर समाप्त होने वाले या उसे पार करने वाले निष्कर्षित स्ट्रिंग्स, निकटता के आधार पर क्रमबद्ध - संभावित सिग्नेचर सामग्री - एक-पंक्ति व्याख्या के साथ। यह केवल बाइट्स पढ़ता है और कभी पुनः स्कैन नहीं करता, इसलिए यह सहेजे गए परिणामों पर क्रॉस-प्लेटफ़ॉर्म चलता है।```powershell
Invoke-OffsetThreatScan ./flagged.ps1 -Engine AMSI -PassThru | Get-OffsetDetectionTrigger
Get-OffsetDetectionTrigger -FilePath ./sample.bin -BoundaryOffset 0x4A1 | Select-Object Interpretation, Section, PreBoundaryEntropy -ExpandProperty CandidateStrings
### Detection-drift जर्नल
"यह पहले डिटेक्ट हुआ था और अब नहीं होता" के तीन बहुत अलग कारण हो सकते हैं: फ़ाइल बदल गई, सिग्नेचर बदल गए, या प्रोवाइडर नॉन-डिटरमिनिस्टिक है। `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 गुण (OffsetInspect.TelemetryCorrelation) रिपोर्ट करता है:
AlertGenerated / Alert - क्या स्कैन के लिए Microsoft Defender डिटेक्शन (इवेंट 1116/1117) लॉग किया गया था, और उसका संदर्भ (थ्रेट नाम, गंभीरता, डिटेक्शन स्रोत, प्रोसेस, उपयोगकर्ता)।CorrelationConfidence - High केवल तब जब डिटेक्शन का स्रोत प्रदाता से मेल खाता है और उसकी प्रोसेस स्कैनिंग होस्ट से मेल खाती है, इसलिए एक संयोगवश समवर्ती डिटेक्शन का कभी दावा नहीं किया जाता; अकेले स्रोत पर Medium; दोनों न होने पर Low।SourcesAccessible / SourcesUnavailable - कौन से टेलीमेट्री लॉग पठनीय थे और कौन से अंधे थे (Sysmon अनुपस्थित, सुरक्षा लॉग को एलिवेशन की आवश्यकता)। एक दृश्यता अंतर अपने आप में एक निष्कर्ष है।Findings - सरल भाषा में निष्कर्ष: पूर्ण संदर्भ के साथ एक अलर्ट, थ्रेट नाम के बिना एक अलर्ट, बिल्कुल भी टेलीमेट्री नहीं, या एक लापता स्रोत।प्राथमिक स्रोत Microsoft Defender Operational लॉग है, जो एलिवेशन के बिना पठनीय है; सहसंबंध इवेंट RecordId (मोनोटोनिक और टाइमज़ोन-स्वतंत्र) द्वारा होता है। केवल Windows के लिए, और जब तक -CaptureTelemetry पारित नहीं किया जाता, निष्क्रिय रहता है।
तीन क्रॉस-प्लेटफ़ॉर्म स्थैतिक-विश्लेषण कमांड मैलवेयर ट्राइएज का समर्थन करते हैं और ऑफ़सेट कोर के साथ संयोजित होते हैं:
Get-OffsetEntropy - पैक किए गए या एन्क्रिप्टेड क्षेत्रों का पता लगाने के लिए प्रति-विंडो Shannon एंट्रॉपी (बिट्स/बाइट); फ़्लैग किए गए विंडो को Invoke-OffsetThreatScanRegion डिटेक्शन के साथ क्रॉस-रेफरेंस करें।Get-OffsetString - बाइट ऑफ़सेट के साथ प्रिंट करने योग्य ASCII और UTF-16LE स्ट्रिंग्स; संदर्भ के लिए ऑफ़सेट को Invoke-OffsetInspect में पाइप करें।Get-OffsetPEInfo - PE मशीन/बिटनेस, एंट्री पॉइंट, सेक्शन टेबल, इम्पोर्ट्स और इम्फ़ैश, अपेंडेड-ओवरले डिटेक्शन, और रिसोर्स साइज़, साथ ही -Offset एक बाइट ऑफ़सेट को उसके सेक्शन (.text, .rsrc, ...) से मैप करता है। इम्फ़ैश मानक library.function MD5 का उपयोग करता है और pefile/VirusTotal के साथ बाइट-समान सत्यापित किया जाता है - जिसमें विशेष-लाइब्रेरी ऑर्डिनल रिज़ॉल्यूशन भी शामिल है, इसलिए ws2_32/wsock32/oleaut32 से इम्पोर्ट किया गया ऑर्डिनल अपने वास्तविक फ़ंक्शन नाम में हल हो जाता है; बाकी हर ऑर्डिनल इम्पोर्ट के रूप में प्रस्तुत होता है, बिल्कुल जैसा pefile करता है।### YARA स्कैनिंग
`Invoke-OffsetYaraScan` विश्लेषक-निर्मित YARA नियमों को चलाता है और प्रत्येक मिलान को उसके बाइट ऑफ़सेट के साथ लौटाता है - AMSI/Defender डिटेक्शन-सीमा दृश्य को आपके नियंत्रण वाले सिग्नेचर के साथ पूरक करते हुए, और इसके लिए किसी एंटीवायरस की स्थापना की आवश्यकता नहीं होती (केवल YARA इंजन, जैसे `winget install VirusTotal.YARA`)। ऑफ़सेट सीधे इंस्पेक्टर में चले जाते हैं।```powershell
Invoke-OffsetYaraScan ./sample.bin -RulePath ./rules/malware.yar |
ForEach-Object { Invoke-OffsetInspect $_.File $_.Offset -ContextLines 2 }
Invoke-OffsetClamScan ClamAV के ऑन-डिमांड इंजन से फ़ाइल को स्कैन करता है और एक सामान्यीकृत परिणाम लौटाता है (Clean / Detected / Error, साथ ही सिग्नेचर नाम)। क्योंकि clamscan हर कॉल पर अपना पूरा सिग्नेचर डेटाबेस लोड करता है, यह एक सिंगल-फ़ाइल डिटेक्टर है, बाउंड्री-खोज इंजन नहीं (उसके लिए clamd डेमन की आवश्यकता होती है)। इसके लिए ClamAV स्थापित होना और इसके सिग्नेचर डेटाबेस डाउनलोड होना आवश्यक है - जब तक कॉन्फ़िग फ़ाइल मौजूद न हो, freshclam नहीं चलेगा:```powershell
Copy-Item "$env:ProgramFiles\ClamAV\conf_examples\freshclam.conf.sample" "$env:ProgramFiles\ClamAV\freshclam.conf" (Get-Content "$env:ProgramFiles\ClamAV\freshclam.conf") -notmatch '^\sExample\s$' | Set-Content "$env:ProgramFiles\ClamAV\freshclam.conf" # requires admin to write under Program Files & "$env:ProgramFiles\ClamAV\freshclam.exe"
Invoke-OffsetClamScan ./sample.bin
Use `-DatabasePath` का उपयोग करके किसी लिखने योग्य (गैर-एडमिन) स्थान पर सिग्नेचर निर्देशिका को इंगित करें, और यदि `clamscan` `PATH` पर नहीं है तो `-ClamScanPath` का उपयोग करें।
## परिणाम ऑब्जेक्ट्स
`Invoke-OffsetInspect -PassThru` निम्न से युक्त `OffsetInspect.Result` ऑब्जेक्ट लौटाता है:
- विहित (canonical) फ़ाइल पथ, फ़ाइल आकार, दशमलव और हेक्साडेसिमल ऑफ़सेट।
- अनुरोधित और पता लगाई गई एन्कोडिंग।
- पंक्ति संख्या, स्रोत पूर्वावलोकन, संदर्भ पंक्तियाँ, बाइट स्थिति, और वर्ण स्थिति।
- लक्ष्य बाइट और सीमित हेक्स डंप।
- वैकल्पिक तुलना बाइट और अंतर स्थिति।
- चेतावनियाँ, अवधि, सफलता स्थिति, और त्रुटि संदेश।
`Invoke-OffsetThreatScan -PassThru` निम्न से युक्त `OffsetInspect.ThreatScanResult` ऑब्जेक्ट लौटाता है:
- फ़ाइल SHA-256, UTC स्कैन टाइमस्टैम्प, इंजन, स्कैन मोड, प्रारंभिक प्रदाता स्थिति, और प्रदाता मेटाडेटा।
- ज्ञात-स्वच्छ और ज्ञात-संसूचित प्रीफ़िक्स लंबाइयाँ।
- बाइट और वैकल्पिक वर्ण सीमा।
- स्थिरता, आत्मविश्वास, स्कैन संख्या, दोहराई गई सीमा स्थितियाँ, और उपलब्ध होने पर सिग्नेचर नाम।
- प्रत्येक विशिष्ट प्रदाता प्रोब का एक `ProbeLog` ऑडिट ट्रेल (CSV आउटपुट में `ProbeCount` के रूप में प्रदर्शित, और `-ProbeLogPath` के साथ JSON ट्रांसक्रिप्ट में निर्यात योग्य); [आउटपुट स्कीमा](https://github.com/warpedatom/offsetinspect/blob/HEAD/docs/OUTPUT-SCHEMA.md) देखें।
- मैप की गई सीमा पर नेस्टेड `OffsetInspect.Result` संदर्भ।
## प्रदर्शन मॉडल
v1-शैली का कार्यान्वयन प्रत्येक ऑफ़सेट के लिए पूरी फ़ाइल को पुनः पढ़ता और डिकोड करता था। संस्करण 2 कार्य को फ़ाइल के अनुसार समूहित करता है:```text
Previous approach: approximately O(file size × offset count)
Version 2: approximately O(file bytes scanned once + requested windows)
स्रोत मैपिंग एक स्ट्रीमिंग स्टेट मशीन का उपयोग करती है और अनुरोधित ऑफ़सेट के लिए आवश्यक केवल पिछली/अगली लाइन डिस्क्रिप्टर को बनाए रखती है। अत्यधिक लंबी व्यक्तिगत लाइनें -MaxLineBytes द्वारा नियंत्रित एक सीमित पूर्वावलोकन के माध्यम से प्रदर्शित की जाती हैं।
OffsetInspect.ps1 Thin offset-inspection CLI wrapper OffsetThreatScan.ps1 Thin threat-scan CLI wrapper module/OffsetInspect/ Complete Gallery package OffsetInspect.psd1 OffsetInspect.psm1 OffsetInspect.Format.ps1xml Public/ Private/ tests/ Pester tests benchmarks/ Reproducible performance harness build/ Validation, packaging, signing, publishing .github/workflows/ CI, dependency review, release publishing docs/ Architecture, schemas, provider design, release checklist
## विकास
पिन किए गए सत्यापन उपकरण स्थापित करें:```powershell
Install-Module Pester -RequiredVersion 5.7.1 -Scope CurrentUser
Install-Module PSScriptAnalyzer -RequiredVersion 1.25.0 -Scope CurrentUser
पूर्ण स्थानीय गेट चलाएँ:```powershell ./build/Test-Module.ps1
नियतात्मक बेंचमार्क हार्नेस चलाएँ:```powershell
./benchmarks/Measure-OffsetInspect.ps1 -FileSizeMiB 64 -OffsetCount 5000
बेंचमार्क परिणाम स्टोरेज, होस्ट लोड, PowerShell संस्करण और फ़ाइल आकृति के अनुसार भिन्न होते हैं। कमिट की तुलना करते समय उन इनपुट्स को रिकॉर्ड करें।
एक निर्धारित (deterministic) रिलीज़ आर्काइव और SHA-256 फ़ाइल बनाएँ:```powershell ./build/New-ReleasePackage.ps1
CI विंडोज और लिनक्स पर PowerShell 7, Windows PowerShell 5.1, PSScriptAnalyzer, पृथक मॉड्यूल पैकेजिंग, और रिलीज़ संग्रह को मान्य करता है। रिलीज़ अनुरक्षकों को भी [release checklist](https://github.com/warpedatom/offsetinspect/blob/HEAD/docs/RELEASE-CHECKLIST.md) का पालन करना चाहिए।
## सुरक्षा और जिम्मेदार उपयोग
OffsetInspect अधिकृत रक्षात्मक अनुसंधान, डिटेक्शन इंजीनियरिंग, रिवर्स इंजीनियरिंग, मैलवेयर विश्लेषण, और सुरक्षा परीक्षण के लिए है। थ्रेट-प्रोवाइडर फ़ंक्शन सामग्री का विश्लेषण करते हैं लेकिन एंडपॉइंट सुरक्षाओं को अक्षम, बायपास, या पुन: कॉन्फ़िगर नहीं करते हैं।
`Invoke-OffsetMutationTest` सिग्नेचर-मज़बूती मूल्यांकन के लिए डिटेक्शन-एवेज़न वेरिएंट उत्पन्न करता है। यह पूरी तरह से मेमोरी में कार्य करता है (कोई वेरिएंट डिस्क पर नहीं लिखा जाता), और स्पष्ट `-AuthorizedEngagement` स्वीकृति के बिना चलने से इनकार करता है। इसका उपयोग केवल उन नमूनों और नियंत्रणों पर करें जिन्हें आप परीक्षण करने के लिए अधिकृत हैं।
किसी भेद्यता की रिपोर्ट करने से पहले [SECURITY.md](https://github.com/warpedatom/offsetinspect/blob/HEAD/SECURITY.md) की समीक्षा करें। संवेदनशील नमूनों को सार्वजनिक GitHub issues के माध्यम से सबमिट न करें।
## लाइसेंस
OffsetInspect [MIT License](https://github.com/warpedatom/offsetinspect/blob/HEAD/LICENSE) के अंतर्गत जारी किया गया है।
-CaptureTelemetry): क्या Microsoft Defender अलर्ट उठाया गया, किस संदर्भ में, और कौन-से टेलीमेट्री स्रोत अंधे थे - 'पहले दृश्यता मान लें, फिर उसे मान्य करें' सिद्धांत को एन्कोड करता है। केवल-पठनीय, गैर-एडमिन, केवल Windows।Get-OffsetSignature): प्लेटफ़ॉर्म की वास्तविक ट्रस्ट मान्यता का उपयोग करके रिपोर्ट करता है कि फ़ाइल वैध रूप से हस्ताक्षरित और विश्वसनीय है या नहीं, किसने हस्ताक्षर किया, और यह एम्बेडेड- या कैटलॉग-हस्ताक्षरित है - एक हस्ताक्षरकर्ता संकेत जो imphash और बिल्ड-टूलचेन फ़िंगरप्रिंट (इम्पोर्ट्स बनाम टूलचेन बनाम हस्ताक्षरकर्ता) का पूरक है। केवल Windows।| 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 | समझाएँ कि फ़ाइल की पहचान-क्षमता कैसे बदली: फ़ाइल परिवर्तन बनाम सिग्नेचर अपडेट बनाम गैर-निर्धारणीय | क्रॉस-प्लेटफ़ॉर्म |
Export-OffsetThreatReport | स्कैन परिणामों को Markdown/HTML एंगेजमेंट रिपोर्ट में प्रस्तुत करें | क्रॉस-प्लेटफ़ॉर्म |
Invoke-OffsetYaraScan | किसी फ़ाइल को YARA नियमों से मिलाएँ; बाइट ऑफसेट के साथ हिट लौटाएँ | क्रॉस-प्लेटफ़ॉर्म¹ |
Invoke-OffsetClamScan | ClamAV इंजन से फ़ाइल स्कैन करें; सामान्यीकृत डिटेक्शन परिणाम | क्रॉस-प्लेटफ़ॉर्म¹ |
Get-OffsetEntropy | पैक/एन्क्रिप्टेड क्षेत्रों का पता लगाने के लिए प्रति-विंडो Shannon एंट्रॉपी | क्रॉस-प्लेटफ़ॉर्म |
Get-OffsetString | बाइट ऑफसेट के साथ ASCII/UTF-16LE स्ट्रिंग्स निकालें | क्रॉस-प्लेटफ़ॉर्म |
Get-OffsetPEInfo | PE हेडर, सेक्शन, इम्पोर्ट्स/imphash, ओवरले, ऑफसेट→सेक्शन | क्रॉस-प्लेटफ़ॉर्म |
Get-OffsetIOC | समेकित संकेतक पैनल: हैश, एंट्रॉपी, PE/imphash, स्ट्रिंग्स | क्रॉस-प्लेटफ़ॉर्म |
Get-OffsetSignature | Authenticode हस्ताक्षर: क्या यह वैध रूप से हस्ताक्षरित और विश्वसनीय है, किसके द्वारा, एम्बेडेड बनाम कैटलॉग | Windows |
512| दशमलव 512 |
0x200 or 0X200 | हेक्साडेसिमल 0x200 |
200h | हेक्साडेसिमल 0x200 |
E1AB1 | बिना उपसर्ग वाला हेक्साडेसिमल क्योंकि इसमें A-F है |
| मोड | व्यवहार |
|---|
Auto | UTF-8/UTF-16 BOM का पता लगाता है; अन्यथा UTF-8 का उपयोग करता है |
Default | होस्ट ऑपरेटिंग सिस्टम की डिफ़ॉल्ट एन्कोडिंग का उपयोग करता है |
UTF8 | UTF-8 स्रोत मैपिंग |
UTF16LE | लिटिल-एंडियन UTF-16 स्रोत मैपिंग |
UTF16BE | बिग-एंडियन UTF-16 स्रोत मैपिंग |
ASCII | ASCII स्रोत मैपिंग |
ordNNNGet-OffsetIOC - उपरोक्त को संयोजित करने वाला वन-शॉट इंडिकेटर पैनल: MD5/SHA-1/SHA-256 (सिंगल-पास), समग्र एंट्रॉपी, प्रिंट करने योग्य-स्ट्रिंग गणना, और लागू होने पर PE मशीन/इम्फ़ैश/ओवरले।```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