Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
peafl64 — Windows x64 निष्पादनयोग्य फ़ाइलों के लिए स्टैटिक बाइनरी इंस्ट्रुमेंटेशन टूल | Kitploit
उपकरण/GitHubGitHub/sentinel-one/peafl64
भेद्यता विश्लेषणगतिशील कोड विश्लेषण (DAST)रिवर्स इंजीनियरिंगफज़िंगबाइनरी विश्लेषणArchived
GitHubsentinel-one/peafl64

peafl64

Windows x64 निष्पादनयोग्य फ़ाइलों के लिए स्टैटिक बाइनरी इंस्ट्रुमेंटेशन टूल

रिपॉजिटरी देखें
20626911 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

अवलोकन

peafl64 विंडोज़ में x64 PE के लिए एक स्थिर इंस्ट्रूमेंटेशन टूल है।
स्थैतिक इंस्ट्रूमेंटेशन निष्पादन योग्य फ़ाइलों को संपादित करने और उनमें विशिष्ट स्थानों पर कोड जोड़ने की प्रथा है।
इंस्ट्रूमेंटेशन बाइनरी में हर बेसिक ब्लॉक की शुरुआत में कोड जोड़ता है, और निष्पादन प्रवाह को AFL-संगत तरीके से लॉग करता है।
यह हमें उनकी स्रोत कोड तक पहुँच के बिना यूज़रमोड (WinAFL का उपयोग करके) और कर्नेलमोड (kAFL का उपयोग करके) में बाइनरी को फ़ज़ करने की अनुमति देता है।

Windows बाइनरी को फ़ज़ करने के और भी तरीके हैं; इस परियोजना में हमने स्थिर इंस्ट्रूमेंटेशन पर ध्यान केंद्रित करना चुना क्योंकि यह सबसे तेज़ तरीका है।

यह परियोजना wmliang के pe-afl टूल पर आधारित है, जिसमें x64 समर्थन जोड़ा गया है।

विशेषताएँ

  • पूर्ण Windows x64 बाइनरी समर्थन
  • उच्च प्रदर्शन
  • प्रोसेस ID या थ्रेड ID फ़िल्टरिंग के साथ इंस्ट्रूमेंटेशन का समर्थन करता है
  • रिलोकेशन, अपवाद तालिकाएँ, सापेक्ष निर्देश, जंप टेबल, इम्पोर्ट, एक्सपोर्ट और बहुत कुछ संभालता है
  • WinAFL (हेडर सहित) और kAFL के साथ संगत

उपयोग

IDA विश्लेषण

इंस्ट्रूमेंटेशन स्क्रिप्ट को IDA विश्लेषण आउटपुट की आवश्यकता होती है।
इसे बनाने के लिए, IDA में दी गई ida_dumper.py स्क्रिप्ट चलाएँ।
स्क्रिप्ट को IDA 7+ और python3.8+ की आवश्यकता है।

इंस्ट्रूमेंटेशन

root@kitploit:~
usage: pe_afl.py [-h] [-n] [-cb] [-tf] [-te THREAD_ENTRY] [-nt NTOSKRNL] [-e ENTRY] [-l ENLARGE] [-v] [-lf] pefile ida_dump

positional arguments:
  pefile                Target PE file for instrumentation
  ida_dump              dump.json from IDA (created by ida_dumper.py)

optional arguments:
  -h, --help            show this help message and exit
  -n, --nop             Instrument with NOPs for testing
  -cb, --callback       Instrument with a callback, which is in the helper driver that's written in C
  -tf, --thread-filter  Driver instrumentation that filters only on thread ID (must use "-te" with this option)
  -te THREAD_ENTRY, --thread-entry THREAD_ENTRY
                        The address (RVA) of the thread's initialization function
  -nt NTOSKRNL, --ntoskrnl NTOSKRNL
                        ntoskrnl.exe path for offset extraction (non-optional if instrumenting a driver)
  -e ENTRY, --entry ENTRY
                        Inject code on entry point, ie. -e9090
  -l ENLARGE, --enlarge ENLARGE
                        Enlarge factor for sections, default=4
  -v, --verbose         Print debug log
  -lf, --logfile        Print log to pe-afl64.log rather than stream

NOPs के साथ यूज़रमोड बाइनरी का इंस्ट्रूमेंटेशन

root@kitploit:~
PS pe-afl-64> python .\pe_afl.py -n C:\Work\cmd.exe C:\Work\cmd.exe.dump.json
[*] User-mode binary is being instrumented
[*] Single-thread instrument is on
[*] Preparing new sections
[*] Added section .text^
[*] Added section .cov
[*] Expanding relative jumps
[*] Expanded 3874 of 14353 branches
[*] Building address map
[*] Updating relative instructions
[*] Updating relocations...
[*] Updating Export table
[*] Updating load config
[*] Updating exception records
[*] Updating the PE headers
[*] Finalizing...
[*] Creating instrumented code
[*] Writing address mapping to C:\Work\cmd.exe.mapping.txt
[*] Updating jump tables
[*] Updated .text
...
[*] Removing temporary PE files
[*] Fixing PE checksum
[*] Instrumented binary saved to: C:\Work\cmd.instrumented.exe

प्रोसेस ID फ़िल्टरिंग के साथ कर्नेलमोड बाइनरी का इंस्ट्रूमेंटेशन

root@kitploit:~
python .\pe_afl.py -l 6 -nt "C:\Work\ntoskrnl.exe" "C:\Work\driver.sys" "C:\Work\driver.sys.dump.json"

थ्रेड ID फ़िल्टरिंग और वर्बोज़ आउटपुट के साथ कर्नेलमोड बाइनरी का इंस्ट्रूमेंटेशन

root@kitploit:~
python .\pe_afl.py -v -tf -te 0x40000 -l 6 -nt "C:\Work\ntoskrnl.exe" "C:\Work\ntoskrnl.exe" "C:\Work\ntoskrnl.exe.dump.json"

Windows ड्राइवरों को कैसे बदलें

सबसे पहले आपको यह जाँचना होगा कि आपकी मशीन BIOS या UEFI का उपयोग करके बूट हो रही है या नहीं।
Hyper-V मशीनों के लिए: Gen 1 मशीनें BIOS-आधारित होती हैं, और Gen 2 UEFI-आधारित होती हैं।
यदि आपकी मशीन BIOS-आधारित है, तो आपको winload.exe को पैच करने की आवश्यकता है:

  • अपने VM से winload.exe की एक प्रति लें और उसमें ImgpValidateImageHash फ़ंक्शन खोजें
  • रिटर्न वैल्यू को पैच करें ताकि वह हमेशा rax में 0 लौटाए। उदाहरण के लिए फ़ंक्शन के अंतिम कोड ब्लॉक में mov eax, edi को xor eax, eax से बदलें
  • पैच की गई winload को system32 फ़ोल्डर में कॉपी करें और bcdedit /set path \Windows\system32\winload2.exe चलाएँ

यदि आपकी मशीन UEFI का उपयोग करके बूट होती है, तो winload.efi को पैच करने के लिए EfiGuard उपयोगिता का उपयोग करें।
Hyper-V Manager का उपयोग करने पर कमांड चीटशीट:

  1. वर्चुअल मशीन के लिए एक नई हार्ड ड्राइव बनाएँ
  2. Tools फ़ोल्डर में दी गई FAT.vhdx का उपयोग करें (या स्वयं एक बनाएँ) जिसमें नई हार्ड ड्राइव के साथ UefiShell+EfiGuard मॉड्यूल हो
  3. मशीन का बूट क्रम बदलें, ताकि नई हार्ड ड्राइव पहले स्थान पर हो
  4. बूट के बाद, UefiShell में रहते हुए निम्नलिखित कमांड चलाएँ:
root@kitploit:~
FS1:
cd EFI/Boot
Load EfiGuard.Dxe.efi
FS0:
\EFI\Boot\bootx64.efi

फिर अपनी पसंद के ड्राइवर को इंस्ट्रूमेंट करें। Windows मशीन पर इंस्ट्रूमेंटेड ड्राइवर लोड करने के लिए उसे हस्ताक्षरित होना चाहिए, और OS की आवश्यकताओं को पूरा करने के लिए एक सेल्फ-साइनिंग प्रमाणपत्र पर्याप्त है:

root@kitploit:~
# In elevated powershell terminal
$c = New-SelfSignedCertificate -Type CodeSigningCert -KeyUsage DigitalSignature -Subject 'CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US'
Set-AuthenticodeSignature .\driver.instrumented.sys -Certificate $c -Force

यदि आपके द्वारा इंस्ट्रूमेंट किया गया ड्राइवर पहले से सिस्टम द्वारा उपयोग में है, तो ड्राइवर की फ़ाइल को बदलने के लिए इन कमांडों का उपयोग करें (एडमिन के रूप में):

root@kitploit:~
set NAME=mydriver.sys
icacls %NAME% /save C:\windows\temp\%NAME%.icacls
takeown /F %NAME%
icacls %NAME% /grant Everyone:F
move %NAME% %NAME%.bak
move instrumented_driver.sys %NAME%
icacls . /restore C:\windows\temp\%NAME%.icacls

फिर चलाएँ:

root@kitploit:~
bcdedit /set recoveryenabled no
bcdedit /set nointegritychecks on
shutdown -t 0 -r

WinAFL फ़ज़िंग

WinAFL के साथ एकीकरण दिए गए हेडरों का उपयोग करके एक हार्नेस संकलित करके होता है।
हेडरों के साथ example.c भी है, जो एक नमूना प्रोग्राम है जो दिखाता है कि उनका उपयोग कैसे करें।
दिए गए हेडर, WinAFL द्वारा पहले से दिए गए हेडरों का एक हल्का संशोधन हैं ताकि Syzygy नामक एक अन्य स्थैतिक बाइनरी इंस्ट्रूमेंटेशन टूल के साथ एकीकरण हो सके।

kAFL फ़ज़िंग

जिस तरह से हम kAFL के साथ एकीकृत होते हैं वह काफी सरल है।
सामान्यतः, एक kAFL हार्नेस वर्चुअल मशीन पर चलता है और विशेष "हाइपरकॉल" का उपयोग करके फ़ज़र के फ्रंटेंड से बात करता है।
ये हाइपरकॉल फ़ज़र को कई काम करने के लिए कहते हैं, जिनमें से एक है IntelPT से कवरेज डेटा लोड करना और उसे AFL बिटमैप के रूप में पार्स करना।
चूँकि peafl64 IntelPT ट्रेसिंग को अप्रचलित बना देता है, हमें फ़ज़र तक कवरेज डेटा पहुँचाने का एक रास्ता तैयार करना होगा।
इसलिए, हमने qemu और kvm को "हाइपरकॉल" के साथ विस्तारित किया जो VM में चल रहे (यूज़रमोड) हार्नेस को हेल्पर ड्राइवर का उपयोग करके एकत्रित कवरेज डेटा भेजने की अनुमति देते हैं।

ESXi सेटअप

यह विशेष रूप से ESXi पर सेटअप के बारे में है, लेकिन AWS जैसे अन्य वर्चुअलाइज़ेशन प्लेटफ़ॉर्म के लिए भी प्रासंगिक होना चाहिए।
सेटअप काफी सरल है:

  • एक Ubuntu मशीन बनाएँ
  • सुनिश्चित करें कि मशीन की CPU कॉन्फ़िगरेशन में "Expose hardware assisted virtualization to the guest OS" सक्षम है
  • sbi_kAFL रिपोजिटरी को क्लोन करें
  • kAFL को सामान्य रूप से स्थापित करें जैसा कि kAFL रिपोजिटरी में निर्देशित है, लेकिन install.sh qemu चरण के बजाय, install.sh qemu_sbi चलाएँ

kAFL और peafl64 का उपयोग करके फ़ज़ करने के लिए, हमें एक फ़ज़िंग मशीन सेटअप करनी होगी:

  • हेल्पर ड्राइवर को संकलित करें और उस पर हस्ताक्षर करें
  • हमारे kAFL फ़ोर्क के साथ दिए गए हेडरों का उपयोग करके एक हार्नेस संकलित करें
  • VM पर - हेल्पर ड्राइवर लोड करें
  • kAFL का लोडर चलाएँ

इसके अलावा, हमारे kAFL फ़ोर्क के साथ फ़ज़िंग सामान्य kAFL फ़ज़िंग के समान ही है।

निष्पादन प्रवाह

चरण अवलोकन:

  1. इंस्ट्रूमेंटेशन कोड के लिए सम्मिलन बिंदु निर्धारित करें
  2. उन निर्देशों और संरचनाओं का पता लगाएँ जिन्हें समायोजन की आवश्यकता होगी
  3. अनुरोधित फ़ंक्शनों में इंस्ट्रूमेंटेशन कोड डालें
  4. समायोजित करें:
    • सापेक्ष निर्देश
    • जंप टेबल
    • अपवाद हैंडलर
    • PE हेडर
    • विभिन्न PE कॉन्फ़िगरेशन (लोड कॉन्फ़िग)
  5. इंस्ट्रूमेंटेड सेक्शनों के साथ PE का पुनर्निर्माण

सबसे पहले, हम रुचि के निर्देशों और स्थानों को खोजने और उनका विश्लेषण करने के लिए IDA का उपयोग करते हैं।
विश्लेषण एक dump.json फ़ाइल बनाता है जिसमें वह सारी जानकारी json प्रारूप में होती है।
instrument.py में इंस्ट्रूमेंटेशन लॉजिक होता है, और प्रवाह स्वयं process_pe फ़ंक्शन में रेखांकित किया गया है।
बाइनरी को इंस्ट्रूमेंट करने के लिए, हम उसके निष्पादन योग्य सेक्शनों की नकल बनाते हैं, जहाँ सभी इंस्ट्रूमेंटेड कोड मिलेंगे।
इसके बाद, हम सभी सापेक्ष निर्देशों को संसाधित करते हैं और निर्धारित करते हैं कि उन्हें कैसे और क्या संभालने की आवश्यकता है। मान लीजिए हमारे पास पते X से पते Y तक एक छोटा jmp है। हम X और Y के बीच इंस्ट्रूमेंटेशन कोड डालते हैं, और अब लक्ष्य पते Z पर है (Z = Y + len(instrumentation)).
इसका मतलब है कि हमें जंप को संशोधित करना होगा। यदि पता Z अब शॉर्ट jmp की सीमा के बाहर स्थित है - तो हमें जंप को short से far में बदलना होगा। (instrument.py:expand_relative_instructions)
उदाहरण के लिए:

  • short jmp 0x57 (eb 55) -> near jmp 0x604 (e9 ff 05 00 00)

यह बात call, loop और कंडिशनल जंप जैसे निर्देशों पर भी लागू होती है।
एक और सामान्य मामला जिसे संभालने की आवश्यकता है वह है x64 असेंबली में पेश किए गए rip-relative निर्देश:

  • call [rip+0x1000]

हम इंस्ट्रूमेंटेड कोड की ओर इंगित करने के लिए निम्नलिखित चीज़ों को अपडेट करते हैं: रिलोकेशन टेबल, एक्सपोर्ट टेबल, लोड कॉन्फ़िगरेशन, TLS निर्देशिका और अपवाद रिकॉर्ड।
अपडेट मूल सेक्शनों से सभी पतों को उनके इंस्ट्रूमेंटेड समकक्षों में अपडेट करके किए जाते हैं। (instrument.py:update_addr)
हेडरों को PE संरचना में हुए परिवर्तनों को दर्शाने के लिए अपडेट किया जाता है - जोड़े गए सेक्शन, बदला हुआ एंट्रीपॉइंट और PE आकार। (instrument.py:update_pe_headers)

इसके अतिरिक्त, peafl64 Windows कर्नेल को इंस्ट्रूमेंट करने में सक्षम है। इसे प्राप्त करने के लिए, यह Dynamic Value Relocation Table (DVRT) और SSDT को पार्स और अपडेट करता है, और PatchGuard विशिष्टताओं को संभालता है।

DVRT एक कंपाइलर-जनरेटेड तालिका है जो उन पतों के स्थानों का वर्णन करती है जिन्हें PE लोड करते समय बदलने की आवश्यकता होती है।
इसका उपयोग KASLR को बेहतर बनाने और Spectre भेद्यता को कम करने में मदद करने के लिए किया जाता है (1, 2, 3).
DVRT को उन कक्षाओं के एक सेट का उपयोग करके पार्स किया जाता है जो तालिका की संरचना की नकल करती हैं (drt.py; instrument.py:get_updated_dynamic_relocs)

SSDT को संभालना और अपडेट करना उतना सीधा नहीं था।
इसका पता निर्यात नहीं किया गया है, इसलिए हमें इसे खोजने के लिए या तो प्रतीकों या ह्यूरिस्टिक्स पर निर्भर रहना पड़ा।
हमारा समाधान एक ह्यूरिस्टिक दृष्टिकोण का उपयोग करता है, जो सभी Windows 10 संस्करणों के लिए एक स्थिर मार्कर के रूप में NtWaitForSingleObject का उपयोग करता है और इसके सापेक्ष SSDT का पता खोजता है। (instrument.py:ntoskrnl_update_KiServiceTable)
यह दृष्टिकोण सभी Windows 10 कर्नेल के लिए काम करता है, लेकिन अन्य कर्नेल संस्करणों के लिए इसे समायोजित करने की आवश्यकता होगी।

TODO

  • x64 समर्थन
  • नए अपवाद हैंडलर (cxx4)
  • IDA डंपर के प्रदर्शन में सुधार
  • LOAD_CONFIG संरचना को पूरी तरह पार्स करें
  • परीक्षण जोड़ें
  • अधिक Windows कर्नेल संस्करणों का आउट ऑफ़ द बॉक्स समर्थन
  • Nyx (नया kAFL) के साथ एकीकृत करें
टूल डाउनलोड करें