Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
clr — जीवनकाल और अन्य शोधन प्रकारों के लिए जांचकर्ता | Kitploit
उपकरण/GitHubGitHub/ityonemo/clr
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणफज़िंगबाइनरी विश्लेषणलर्निंग और शिक्षा
GitHubityonemo/clr

clr

जीवनकाल और अन्य शोधन प्रकारों के लिए जांचकर्ता

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

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

सभी देखें →

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

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

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

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

CLR

Checkers of

Lifetimes and other

Refinement types

Zig के लिए

वीडियो: https://www.youtube.com/watch?v=mf0WzTOe-40 प्रायोजन: https://buymeacoffee.com/dnautics

hn पर चर्चा करें: https://news.ycombinator.com/item?id=42923829

lobste.rs पर चर्चा करें: https://lobste.rs/s/9sitsj/clr_checker_for_lifetimes_other

लाइव डेमो वीडियो: https://www.youtube.com/watch?v=ZY_Z-aGbYm8

अवलोकन

यह प्रोजेक्ट Zig कम्पाइलर के लिए एक Zig ट्रांसपाइलर बनाता है, जो AIR (एब्स्ट्रैक्ट इंटरमीडिएट रिप्रेज़ेंटेशन) को Zig सोर्स कोड में रूपांतरित करता है जो कम्पाइल टाइम पर स्थैतिक विश्लेषण करता है। जनरेटेड विश्लेषक मेमोरी सुरक्षा समस्याओं जैसे कि उपयोग-से-पहले असाइनमेंट, उपयोग-के-बाद-मुक्त, स्टैक पॉइंटर एस्केप, साथ ही Zig-विशिष्ट UB जैसे गैर-शून्यता अभिकथन, टैग किए गए यूनियन उल्लंघन, या fieldParentPtr दुरुपयोग को पकड़ता है।

लक्ष्य Zig में Rust-स्तरीय मेमोरी सुरक्षा गारंटी को AIR के स्थैतिक विश्लेषण के माध्यम से लाना है, बिना भाषा में ही बदलाव किए।

CLR Zig कम्पाइलर के एक फोर्क किए गए संस्करण पर निर्भर करता है (जो zig/ में एक सबमॉड्यूल के रूप में शामिल है) जो AIR को बाहरी प्लगइन्स पर रूट करने का समर्थन जोड़ता है। जब -ofmt=air -fair-out=<plugin.so> के साथ आमंत्रित किया जाता है, तो कम्पाइलर निर्दिष्ट शेयर्ड लाइब्रेरी को लोड करता है और उत्पन्न AIR को प्रसंस्करण के लिए उस पर भेजता है।

सुरक्षा-उन्मुख आर्किटेक्चर

CLR का उद्देश्य प्रोग्राम को ऐसे जीवनचक्र पैटर्न की ओर धकेलना है जो स्पष्ट और स्थानीय रूप से सत्यापनीय हों, न कि केवल हर तकनीकी रूप से मान्य Zig प्रोग्राम को पहचानना। जब दो निरूपण संभव हों, तो CLR उसे प्राथमिकता देता है जो संसाधन की स्थिति को प्रकार और नियंत्रण-प्रवाह संरचना में दृश्यमान बनाता है।

उदाहरण के लिए, किसी गैर-वैकल्पिक फ़ाइल डिस्क्रिप्टर को सशर्त रूप से बंद करने से बचें:

const file = try std.fs.cwd().openFile(path, .{});
if (should_close) {
    file.close(); // Bad: file is ambiguously open after this branch.
}

सशर्त स्वामित्व को एक वैकल्पिक के साथ प्रस्तुत करना पसंद करें:

var file: ?std.fs.File = null;
if (should_open) {
    file = try std.fs.cwd().openFile(path, .{});
}

if (file) |open_file| {
    open_file.close();
}

एक गैर-वैकल्पिक डिस्क्रिप्टर को सशर्त रूप से बंद करना शाखा के बाद उसके जीवनचक्र को अस्पष्ट छोड़ देता है। CLR की अभिप्रेत नीति इस पैटर्न को अस्वीकार करना है, बजाय एक स्थायी "शायद बंद" स्थिति ले जाने के।

यही सिद्धांत आवंटित पॉइंटर्स पर भी लागू होता है। व्युत्पन्न पॉइंटर से मुक्त न करें:

const allocation = try allocator.alloc(u8, size);
const payload = allocation[header_size..];
allocator.free(payload); // Bad: payload is not the allocation base.

आवंटन-आधार पॉइंटर को डीलोकेशन के लिए उपलब्ध रखें, और व्युत्पन्न पॉइंटर का उपयोग केवल एक्सेस के लिए करें:

const allocation = try allocator.alloc(u8, size);
defer allocator.free(allocation);

const payload = allocation[header_size..];
use(payload);

एक फ़ील्ड पॉइंटर, सबस्लाइस, या अंकगणित द्वारा उत्पादित पॉइंटर को मुक्त करना अस्वीकार कर दिया जाता है जब तक कि एक दस्तावेजित आंतरिक नियम आवंटन-आधार प्रोवेनेंस को पुनर्स्थापित न करे।

ये नीतियाँ डिफ़ॉल्ट रूप से सख्त हैं क्योंकि वे सरल, अधिक समीक्षा योग्य संसाधन जीवनचक्र वाला कोड उत्पन्न करती हैं। भविष्य में एक असुरक्षित एनोटेशन तंत्र चयनित GIDs या संचालन को व्यक्तिगत विश्लेषणों से बाहर निकलने की अनुमति देगा। यह ऐसे कोड का समर्थन करेगा जो प्रदर्शन के लिए जानबूझकर कमजोर जाँच स्वीकार करता है, बिना शेष प्रोग्राम के लिए डिफ़ॉल्ट मॉडल को कमजोर किए।

स्थिति

यह Zig में मूल Elixir-आधारित प्रूफ-ऑफ-कॉन्सेप्ट का एक सक्रिय पुनर्लेखन है। Zig कार्यान्वयन एक कम्पाइलर प्लगइन के रूप में लोड होता है और सीधे AIR का विश्लेषण करता है।

वर्तमान में कार्यान्वित:

  • अपरिभाषित मान ट्रैकिंग (असाइनमेंट से पहले उपयोग, स्ट्रक्ट्स के लिए फ़ील्ड-स्तरीय ट्रैकिंग)
  • मेमोरी सुरक्षा विश्लेषण (उपयोग-के-बाद-मुक्त, दोहरा-मुक्त, मेमोरी लीक, आवंटनकर्ता बेमेल, स्टैक एस्केप)
  • पूर्ण std.mem.Allocator इंटरफ़ेस कवरेज:
    • create/destroy - एकल आइटम आवंटन
    • alloc/free - स्लाइस आवंटन (alignedAlloc, allocSentinel आदि सहित)
    • realloc/remap - पुरानी-स्लाइस-मुक्त ट्रैकिंग के साथ स्लाइस पुनःआवंटन
    • dupe/dupeZ - स्लाइस डुप्लिकेशन
    • आवंटनकर्ता बेमेल पहचान (गलत आवंटनकर्ता के साथ मुक्त करना, create/destroy बनाम alloc/free)
    • जटिल आवंटनकर्ता प्रकार (GPA, ArenaAllocator, FixedBufferAllocator)
  • ArenaAllocator जीवनचक्र ट्रैकिंग:
    • init/deinit/allocator - पूर्ण एरीना जीवनचक्र
    • एरीना आवंटन deinit पर मुक्त (कोई झूठी सकारात्मक लीक नहीं)
    • उपयोग-के-बाद-deinit, दोहरा-deinit, आवंटन-के-बाद-deinit पहचान
    • क्रॉस-आवंटनकर्ता बेमेल (एरीना बनाम page_allocator)
  • व्युत्पन्न पॉइंटर ट्रैकिंग (फ़ील्ड पॉइंटर, सबस्लाइस को मुक्त नहीं कर सकते - केवल रूट आवंटन)
  • पॉइंटर अंकगणित सुरक्षा (एकल-आइटम पॉइंटर पर ptr_add/ptr_sub को ब्लॉक करता है)
  • शून्य सुरक्षा (अनियंत्रित वैकल्पिक अनरैप पहचान)
  • वेरिएंट सुरक्षा (निष्क्रिय यूनियन फ़ील्ड्स तक पहुँचना, शाखाओं के बाद अस्पष्ट वेरिएंट)
  • FieldParentPtr सुरक्षा (फ़ील्ड पॉइंटर से अमान्य कंटेनर पुनर्प्राप्ति का पता लगाना)
  • अंतर-प्रक्रियात्मक विश्लेषण (पॉइंटर तर्कों के माध्यम से फ़ंक्शन कॉल में मानों को ट्रैक करना)
  • फ़ंक्शन पॉइंटर ट्रैकिंग (अप्रत्यक्ष कॉल संभावित लक्ष्यों पर भेजती हैं)
  • स्ट्रक्ट और यूनियन फ़ील्ड ट्रैकिंग (पॉइंटर फ़ील्ड्स, नेस्टेड प्रकार)
  • स्लाइस ट्रैकिंग (क्षेत्रों के साथ आवंटन/मुक्त, सबस्लाइस व्युत्पत्ति)
  • त्रुटि यूनियन समर्थन (try एक्सप्रेशन, पेलोड रैप/अनरैप)
  • स्विच स्टेटमेंट समर्थन (वेरिएंट ट्रैकिंग के साथ n-वे मर्जिंग)
  • लेबल किया गया स्विच/डफ़्स डिवाइस समर्थन
  • स्रोत स्थान और चर नाम ट्रैकिंग त्रुटि संदेशों के लिए
  • शाखाकरण/नियंत्रण प्रवाह स्थिति मर्जिंग के साथ
  • लूप विश्लेषण (for, while, for-else, while-else फिक्स्ड-पॉइंट पुनरावृत्ति के साथ)
  • वैश्विक चर ट्रैकिंग (अपरिभाषित, वेरिएंट, और मेमोरी सुरक्षा)
  • पुनरावर्ती डेटाटाइप्स (लिंक्ड लिस्ट, ट्री, पुनरावर्ती यूनियन)
  • सामान्य पैटर्न जैसे std.process.args, std.mem.asBytes, std.HashMap, और आवंटनकर्ता/फ़ाइल API के लिए स्टैण्डर्ड लाइब्रेरी बाउंड्री कमी
  • विशेषाधिकारित std.HashMap परिशोधन कैनोनिकल मेटाडेटा/कुंजी/मान भंडारण पहचान के साथ put, get, getPtr, और मान पुनरावृत्ति में
  • फ़ाइल डिस्क्रिप्टर सुरक्षा:
    • posix.open/close/dup/dup2/socket/accept/epoll_create/pipe ट्रैकिंग
    • उपयोग-के-बाद-बंद पहचान (बंद fd पर read/write/dup)
    • दोहरा-बंद पहचान
    • फ़ंक्शन निकास और मॉड्यूल फाइनलाइज़ेशन पर Fd लीक पहचान
    • Descoped स्थानीय-हैंडल ट्रैकिंग ताकि जीवित रहने वाले उपनाम समय से पहले लीक रिपोर्ट को दबाएँ
    • कवर किए गए डिस्क्रिप्टर पैटर्न के लिए रिटर्न और एग्रीगेट प्रसार
    • अपरिभाषित fd तर्क पहचान (undefined fd के साथ close/read/write)

योजनाबद्ध (विवरण के लिए LIMITATIONS.md देखें):

  • async/await
  • उपनाम सुरक्षा (परस्पर विरोधी उत्परिवर्तनीय संदर्भों का पता लगाना)
  • विलय या अप्रत्यक्ष पॉइंटर प्रोवेनेंस के लिए बहु-स्रोत पॉइंटर परिशोधन
  • वर्तमान में कवर किए गए fd प्रसार पैटर्न से परे डिस्क्रिप्टर उपनाम विश्लेषण
  • अधिक पूर्ण अंतर-प्रक्रियात्मक/वैश्विक उत्परिवर्तन सारांश
  • संरेखण-कास्ट लोअरिंग पहचान
  • म्यूटेक्स सुरक्षा (लॉक/अनलॉक जोड़ी, डेडलॉक पहचान)
  • कस्टम कोर्सन क्षमता (उपयोगकर्ता-परिभाषित परिशोधन नियम)

पूर्वापेक्षाएँ

  • Zig 0.15.2 (LLVM समर्थन के साथ सिस्टम इंस्टॉलेशन)
  • लिनक्स (वर्तमान में केवल लिनक्स, प्रत्यक्ष syscall उपयोग के कारण)
  • BATS (एकीकरण परीक्षणों के लिए): sudo apt install bats

निर्माण

वेंडर्ड Zig कम्पाइलर और libclr प्लगइन को समान ऑप्टिमाइज़ेशन स्तरों के साथ बनाया जाना चाहिए। बेमेल ऑप्टिमाइज़ेशन स्तर segfaults का कारण बनेंगे।

# कस्टम Zig कम्पाइलर को ReleaseFast के साथ बनाएं (पहली बार, या सबमॉड्यूल बदलने के बाद)
cd zig && zig build --zig-lib-dir lib -Doptimize=ReleaseFast && cd ..

# CLR प्लगइन को मैचिंग ऑप्टिमाइज़ेशन के साथ बनाएं
zig build -Doptimize=ReleaseFast

डेवलपमेंट/डीबगिंग के लिए, दोनों के लिए ReleaseSafe या Debug का उपयोग करें:

# ReleaseSafe (सुरक्षा जाँच के साथ, थोड़ा धीमा)
cd zig && zig build --zig-lib-dir lib -Doptimize=ReleaseSafe && cd ..
zig build -Doptimize=ReleaseSafe

# Debug (पूर्ण डीबग जानकारी, सबसे धीमा)
cd zig && zig build --zig-lib-dir lib && cd ..
zig build

उपयोग

टूल डाउनलोड करें