
PE-sieve कार्यक्षमता का मूल Delphi कार्यान्वयन, जिसमें एक पुन: प्रयोज्य लाइब्रेरी, CLI, और HollowsHunter एकीकरण के लिए PE-sieve-संगत DLL शामिल है।
NativeMirror, PE-sieve कार्यक्षमता का एक स्वतंत्र Object Pascal कार्यान्वयन है, जिसे hasherezade द्वारा PE-sieve से अनुकूलित किया गया है। यह प्रक्रिया मेमोरी को स्कैन करता है, संशोधित या इंजेक्ट किए गए कोड का पता लगाता है, और PE फ़ाइलों को डंप करता है।
यह कार्यान्वयन Delphi-नेटिव API और NativePe को अपने PE इंजन के रूप में उपयोग करता है। इसे सीधे Delphi लाइब्रेरी के रूप में, इसके CLI के माध्यम से, या PE-sieve-संगत DLL इंटरफ़ेस के माध्यम से उपयोग किया जा सकता है। तीनों एक ही स्कैनर कोर साझा करते हैं। संगतता लक्ष्य PE-sieve 0.4.1.5 का बाह्य रूप से देखा जाने वाला व्यवहार है; पूर्ण व्यवहारिक समतुल्यता स्थापित नहीं की गई है।
../NativePe के रूप में रखें, या Delphi खोज पथों को समायोजित करें।NativeMirrorScan.NativeAsm.dproj प्रोजेक्ट USE_NATIVEASM को सक्षम करता है। इसके बिना, NativeMirror Delphi/LDE फ़ॉलबैक का उपयोग करता है। NativeASM खोज पथ को अपनी इंस्टॉलेशन के अनुसार समायोजित करें।py लॉन्चर के साथ Python 3: DLL पोस्ट-बिल्ड चरण और Python परीक्षणों के लिए आवश्यक। स्क्रिप्ट Python मानक लाइब्रेरी का उपयोग करती हैं।कुछ प्रोजेक्ट कॉन्फ़िगरेशन में स्थानीय निर्भरता पथ होते हैं। किसी अन्य मशीन पर बिल्ड करने से पहले खोज पथों की जाँच करें।
Delphi में NativeMirror.groupproj खोलें और आवश्यक प्रोजेक्ट, प्लेटफ़ॉर्म और कॉन्फ़िगरेशन चुनें।
| प्रोजेक्ट | आउटपुट |
|---|---|
tools/NativeMirrorScan/NativeMirrorScan.dproj | NativeMirrorScan.exe |
tools/NativeMirrorDll/pe-sieve.dproj | pe-sieve.dll |
tests/ScannerIntegration/NativeMirrorTestTarget.dproj | Win64 परीक्षण लक्ष्य |
tests/ScannerIntegration/NativeMirrorTestTarget32.dproj | Win32 परीक्षण लक्ष्य |
tests/ScannerIntegration/NativeMirrorScannerTests.dproj | Win64 स्कैनर परीक्षण रनर |
tests/HollowsHunterIntegration/NativeMirrorHollowsHunterTests.dproj | Win64 HollowsHunter परीक्षण रनर |
आवश्यकतानुसार Win32 और Win64 के लिए CLI और DLL बिल्ड करें। इंटीग्रेशन परीक्षण चलाने से पहले दोनों परीक्षण लक्ष्य बिल्ड करें। Win64 के लिए परीक्षण रनर बिल्ड करें।
आउटपुट bin/<Platform>/<Config> में जाते हैं। नीचे दिए गए उदाहरण Debug का उपयोग करते हैं। कंपाइलर यूनिट्स dcu/ में जाते हैं। एक्ज़ीक्यूटेबल्स को tools/ से बाहर रखें।
इन कमांडों को प्रोजेक्ट रूट से चलाएँ। स्कैन करने के लिए प्रोसेस ID के स्थान पर 1234 रखें।
.\bin\Win64\Debug\NativeMirrorScan.exe /help
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /json /quiet /ofilter 2
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /dir output
/ofilter 2 डंप आउटपुट को अक्षम करता है। /dir output रिपोर्ट और डंप के लिए आउटपुट निर्देशिका चुनता है। आवश्यकता होने पर bin/Win32/Debug के अंतर्गत Win32 निष्पादन योग्य फ़ाइल का उपयोग करें। लक्ष्य प्रक्रिया तक पहुँच आपकी Windows अनुमतियों पर निर्भर करती है।
src/ और उसकी यूनिट उपनिर्देशिकाओं को, NativePe के साथ, अपने प्रोजेक्ट के सर्च पाथ में जोड़ें। TNativeMirrorOptions के साथ ScanAndDump को कॉल करें। लाइब्रेरी आपके एप्लिकेशन में संकलित की जाती है; इस उपयोग के लिए न तो NativeMirrorScan.exe और न ही pe-sieve.dll की आवश्यकता होती है। Python केवल अलग DLL बिल्ड और Python परीक्षणों के लिए आवश्यक है।
यह कंसोल उदाहरण PID 1234 को स्कैन करता है और उसकी रिपोर्ट को JSON के रूप में प्रिंट करता है:
program ScanExample;
{$APPTYPE CONSOLE}
uses
System.JSON,
NativeMirror.Core.Types,
NativeMirror.Core.Options,
NativeMirror.Core.Engine;
var
Options: TNativeMirrorOptions;
Report: TNativeMirrorReportEx;
Json: TJSONObject;
begin
Options := TNativeMirrorOptions.Default;
Options.Pid := 1234;
Options.Quiet := True;
Options.OutputFilter := nmOutNoDir;
Report := ScanAndDump(Options);
try
Json := Report.ToJson(Options.ResultsFilter, Options.JsonLevel);
try
Writeln(Json.ToJSON);
finally
Json.Free;
end;
finally
Report.Free;
end;
end.
PID को अपने लक्ष्य से बदलें। nmOutNoDir रिपोर्ट फ़ाइलों और डंप को अक्षम करता है। स्कैन त्रुटियों के लिए Report.ErrorReport और स्कैन परिणामों के लिए Report.ScanReport का निरीक्षण करें। लौटाई गई रिपोर्ट का स्वामित्व कॉलर के पास होता है और उसे इसे मुक्त करना चाहिए।
PE-sieve releases से pe-sieve32.exe और pe-sieve64.exe डाउनलोड करें। मौजूदा तुलना स्क्रिप्ट v0.4.1.1 एक्ज़ीक्यूटेबल्स का उपयोग करती हैं। दोनों को bin/Win64/Debug में रखें; Win64 परीक्षण स्क्रिप्ट अपने संदर्भ स्कैनर को वहीं खोजती हैं। 32 एक्ज़ीक्यूटेबल मूल Win32 संदर्भ है, भले ही यह Win64 परीक्षण टूल के साथ संग्रहीत है।
एक Debug सेटअप ऐसा दिखता है:
bin/
Win64/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
pe-sieve32.exe
pe-sieve64.exe
NativeMirrorTestTarget.exe
NativeMirrorScannerTests.exe
NativeMirrorHollowsHunterTests.exe
hollows_hunter.exe
Win32/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
NativeMirrorTestTarget32.exe
NativeMirror CLI, DLL, export records, targets और test runners उत्पन्न करता है। PE-sieve और HollowsHunter executables अलग डाउनलोड हैं। HollowsHunter की आवश्यकता केवल इसके integration test या manual DLL उपयोग के लिए होती है।
HollowsHunter releases से hollows_hunter64_dll.zip, v0.4.1.1 डाउनलोड करें। DLL पैकेज का उपयोग करें। मेल खाते host architecture और API contract के साथ, NativeMirror का finalized pe-sieve.dll HollowsHunter द्वारा उपयोग किए जाने वाले मूल PE-sieve DLL को प्रतिस्थापित करता है। standalone static executable प्रतिस्थापन DLL का उपयोग नहीं कर सकता। दिया गया integration test v0.4.1.1 Win64 DLL host को कवर करता है।
manual run के लिए, पैकेज के hollows_hunter.exe को bin/Win64/Debug में कॉपी करें, NativeMirror-निर्मित pe-sieve.dll के बगल में। पैकेज की मूल DLL को NativeMirror DLL के ऊपर कॉपी न करें। host और DLL दोनों Win64 होने चाहिए।
.\bin\Win64\Debug\hollows_hunter.exe /pid 1234 /quiet /hooks /ofilter 2 /json /report 7
स्वचालित तुलना के लिए, उसी पैकेज से अपरिवर्तित मूल EXE और DLL को इसमें निकालें:
tests/HollowsHunterIntegration/fixtures/Win64/pe-sieve-C/
hollows_hunter.exe
pe-sieve.dll
manifest.json
मौजूदा manifest.json को बनाए रखें। यह अपेक्षित संस्करणों और SHA-256 हैश को रिकॉर्ड करता है। रनर इन फ़ाइलों की जाँच करता है, उसी होस्ट को अलग reference और NativeMirror निर्देशिकाओं में कॉपी करता है, और प्रत्येक DLL को नियंत्रित परीक्षण प्रक्रियाओं के विरुद्ध परखता है। यह फ़ाइलें डाउनलोड नहीं करता और bin में बिल्ड को अधिलेखित नहीं करता।
PE-sieve PESieve_version को 32-बिट डेटा मान के रूप में निर्यात करता है। संस्करण 0.4.1.5 के लिए, वह मान 0x00040105 है। एक कॉलर अपेक्षा करता है कि निर्यात पता उन चार बाइट्स की ओर इंगित करे, न कि उस संख्या को लौटाने वाले फ़ंक्शन की ओर।
इस प्रोजेक्ट द्वारा उपयोग किया गया Delphi 12 कंपाइलर/लिंकर exports क्लॉज़ के माध्यम से वेरिएबल को सीधे निर्यात नहीं करता है। इसलिए DLL में चिह्नित संस्करण मान होता है और शुरू में आवश्यक नाम के अंतर्गत एक हेल्पर फ़ंक्शन निर्यात करता है।
लिंक करने के बाद, प्रोजेक्ट का पोस्ट-बिल्ड इवेंट चलाता है:
py tools/NativeMirrorDll/finalize_exports.py bin/Win64/Debug/pe-sieve.dll