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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
fickling — Python pickling डीकंपाइलर और स्थैतिक विश्लेषक | Kitploit
उपकरण/GitHubGitHub/trailofbits/fickling
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणमालवेयर विश्लेषणबाइनरी विश्लेषणआपूर्ति श्रृंखला सुरक्षामशीन लर्निंगAI सुरक्षा
GitHubtrailofbits/fickling

fickling

Python pickling डीकंपाइलर और स्थैतिक विश्लेषक

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

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

सभी देखें →

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

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

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

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

Fickling

फिकलिंग छवि

Fickling, Python pickle ऑब्जेक्ट सीरियलाइज़ेशन के लिए एक डीकंपाइलर, स्थैतिक विश्लेषक और बाइटकोड रीराइटर है। आप फिकलिंग का उपयोग दुर्भावनापूर्ण pickle या pickle-आधारित फ़ाइलों, जिनमें PyTorch फ़ाइलें शामिल हैं, का पता लगाने, विश्लेषण करने, रिवर्स इंजीनियरिंग करने या यहाँ तक कि बनाने के लिए कर सकते हैं।

Fickling को python लाइब्रेरी और CLI दोनों के रूप में उपयोग किया जा सकता है।

  • स्थापना
  • AI/ML वातावरण को सुरक्षित करना
  • सामान्य दुर्भावनापूर्ण फ़ाइल पहचान
  • उन्नत उपयोग
    • pickle निष्पादन का अनुरेखण
    • pickle कोड इंजेक्शन
    • pickle डीकंपाइलेशन
    • PyTorch पॉलीग्लॉट्स
  • अधिक जानकारी
  • संपर्क

स्थापना

Fickling का परीक्षण Python 3.9 से Python 3.13 तक किया गया है और इसकी बहुत कम निर्भरताएँ हैं। लाइब्रेरी और कमांड लाइन उपयोगिता दोनों को pip या uv के माध्यम से स्थापित किया जा सकता है:

root@kitploit:~
# Using pip
python -m pip install fickling

# Using uv
uv pip install fickling

PyTorch, Fickling की एक वैकल्पिक निर्भरता है। इसलिए, Fickling के pytorch और polyglot मॉड्यूल का उपयोग करने के लिए, आपको यह चलाना चाहिए:

root@kitploit:~
# Using pip
python -m pip install fickling[torch]

# Using uv
uv pip install fickling[torch]

AI/ML वातावरण को सुरक्षित करना

Fickling, मॉडल में निहित pickle फ़ाइलों को स्वचालित रूप से स्कैन करके AI/ML कोडबेस को सुरक्षित करने में मदद कर सकता है। Fickling pickle मॉड्यूल को हुक करता है और मॉडल लोड करते समय किए गए इम्पोर्ट्स को सत्यापित करता है। यह केवल ML लाइब्रेरीज़ के उन इम्पोर्ट्स की अनुमति सूची (allowlist) के विरुद्ध इम्पोर्ट्स की जाँच करता है जिन्हें सुरक्षित माना जाता है, और अन्य इम्पोर्ट्स वाली फ़ाइलों को ब्लॉक कर देता है।

निम्न पंक्तियों को यथासंभव पहले जोड़ें, torch, numpy, या किसी अन्य लाइब्रेरी को इम्पोर्ट करने से पहले जो pickle का उपयोग करती है:

root@kitploit:~
import fickling

# This sets global hooks on pickle
fickling.hook.activate_safe_ml_environment()

सुरक्षा हटाने के लिए:

root@kitploit:~
fickling.hook.deactivate_safe_ml_environment()

यह संभव है कि आप जिन मॉडलों का उपयोग कर रहे हैं उनमें ऐसे इम्पोर्ट्स हों जिन्हें Fickling द्वारा अनुमति नहीं दी गई है। यदि आप फिर भी मॉडल को लोड करना चाहते हैं, तो आप also_allow तर्क के साथ अपने विशिष्ट उपयोग-मामले के लिए अतिरिक्त इम्पोर्ट्स को आसानी से अनुमति दे सकते हैं:

root@kitploit:~
fickling.hook.activate_safe_ml_environment(
    also_allow=[
        "some.import",
        "another.allowed.import",
    ]
)

महत्वपूर्ण: आपको हमेशा यह सुनिश्चित करना चाहिए कि मैन्युअल रूप से जोड़े गए इम्पोर्ट्स वास्तव में सुरक्षित हैं और हमलावरों को मनमाना कोड निष्पादित करने में सक्षम नहीं बना सकते। यदि आप अनिश्चित हैं कि यह कैसे करना है, तो आप Fickling के Github रिपॉजिटरी पर एक issue खोल सकते हैं जिसमें संबंधित इम्पोर्ट्स/मॉडल का उल्लेख हो, और हमारी टीम उनकी समीक्षा कर सकती है और यदि संभव हो तो उन्हें अनुमति सूची में शामिल कर सकती है।

सामान्य दुर्भावनापूर्ण फ़ाइल पहचान

Fickling को आपके कोडबेस में सहजता से एकीकृत किया जा सकता है ताकि रनटाइम पर दुर्भावनापूर्ण फ़ाइलों के लोडिंग का पता लगाया जा सके और उसे रोका जा सके।

नीचे हम विभिन्न तरीके दिखाते हैं जिनसे आप pickle फ़ाइलों पर सुरक्षा जाँच लागू करने के लिए fickling का उपयोग कर सकते हैं। अंदर से, यह सुरक्षा जाँच जोड़ने के लिए pickle लाइब्रेरी को हुक करता है, ताकि यदि फ़ाइल में दुर्भावनापूर्ण सामग्री का पता चलता है, तो pickle फ़ाइल लोड करने पर UnsafeFileError अपवाद उत्पन्न हो।

विकल्प 1 (अनुशंसित): लोड किए गए सभी pickle फ़ाइलों की सुरक्षा जाँचें

root@kitploit:~
# This enforces safety checks every time pickle is used to deserialize
fickling.always_check_safety()

# Attempt to load an unsafe file now raises an exception
with open("file.pkl", "rb") as f:
    try:
        pickle.load(f)
    except fickling.UnsafeFileError:
        print("Unsafe file!")

विकल्प 2: कॉन्टेक्स्ट मैनेजर का उपयोग करें

root@kitploit:~
with fickling.check_safety():
    # All pickle files loaded within the context manager are checked for safety
    try:
        with open("file.pkl", "rb") as f:
            pickle.load("file.pkl")
    except fickling.UnsafeFileError:
        print("Unsafe file!")

# Files loaded outside of context manager are NOT checked
pickle.load("file.pkl")

बाहर निकलने पर, कॉन्टेक्स्ट मैनेजर प्रवेश के समय जो भी स्थापित था उसे पुनर्स्थापित कर देता है, इसलिए पहले से मौजूद हुक प्रभावी रहता है, बजाय इसके कि pickle बिना हुक के छोड़ दिया जाए।

विकल्प 3: एकल फ़ाइल की जाँच करें और लोड करें

root@kitploit:~
# Use fickling.load() in place of pickle.load() to check safety and load a single pickle file
try:
    fickling.load("file.pkl")
except fickling.UnsafeFileError as e:
    print("Unsafe file!")

विकल्प 4: लोड किए बिना केवल pickle फ़ाइल सुरक्षा की जाँच करें

root@kitploit:~
# Perform a safety check on a pickle file without loading it
if not fickling.is_likely_safe("file.pkl"):
    print("Unsafe file!")

सुरक्षा विश्लेषण परिणामों तक पहुँच

आप उठाए गए अपवाद के भीतर से fickling के सुरक्षा विश्लेषण के विवरण तक पहुँच सकते हैं:

root@kitploit:~

>>> try:
...     fickling.load("unsafe.pkl")
... except fickling.UnsafeFileError as e:
...     print(e.info)

{
    "severity": "OVERTLY_MALICIOUS",
    "analysis": "Call to `eval(b'[5, 6, 7, 8]')` is almost certainly evidence of a malicious pickle file. Variable `_var0` is assigned value `eval(b'[5, 6, 7, 8]')` but unused afterward; this is suspicious and indicative of a malicious pickle file",
    "detailed_results": {
        "AnalysisResult": {
            "OvertlyBadEval": "eval(b'[5, 6, 7, 8]')",
            "UnusedVariables": [
                "_var0",
                "eval(b'[5, 6, 7, 8]')"
            ]
        }
    }
}

यदि आप Python के अलावा कोई अन्य भाषा उपयोग कर रहे हैं, तो भी आप pickle फ़ाइलों की सुरक्षा-जाँच के लिए fickling की CLI का उपयोग कर सकते हैं:

root@kitploit:~
fickling --check-safety -p pickled.data

उन्नत उपयोग

pickle निष्पादन का अनुरेखण

Fickling की CLI किसी भी दुर्भावनापूर्ण कोड को निष्पादित किए बिना Pickle वर्चुअल मशीन के निष्पादन को सुरक्षित रूप से अनुरेखित करने की अनुमति देती है:

root@kitploit:~
fickling --trace file.pkl

pickle कोड इंजेक्शन

Fickling एक pickle फ़ाइल में मनमाना कोड इंजेक्ट करने की अनुमति देता है जो फ़ाइल के लोड होने पर हर बार चलेगा

root@kitploit:~
fickling --inject "print('Malicious')" file.pkl > malicious.pkl

pickle डीकंपाइलेशन

Fickling का उपयोग आगे के विश्लेषण के लिए pickle फ़ाइल को डीकंपाइल करने के लिए किया जा सकता है

root@kitploit:~
>>> import ast, pickle
>>> from fickling.fickle import Pickled
>>> fickled_object = Pickled.load(pickle.dumps([1, 2, 3, 4]))
>>> print(ast.dump(fickled_object.ast, indent=4))
Module(
    body=[
        Assign(
            targets=[
                Name(id='result', ctx=Store())],
            value=List(
                elts=[
                    Constant(value=1),
                    Constant(value=2),
                    Constant(value=3),
                    Constant(value=4)],
                ctx=Load()))],
    type_ignores=[])

PyTorch पॉलीग्लॉट्स

PyTorch में कई फ़ाइल प्रारूप होते हैं जिनके साथ पॉलीग्लॉट फ़ाइलें बनाई जा सकती हैं, अर्थात ऐसी फ़ाइलें जिन्हें एक से अधिक फ़ाइल प्रारूपों के रूप में मान्य रूप से व्याख्यायित किया जा सकता है। Fickling निम्नलिखित PyTorch फ़ाइल प्रारूपों के साथ पॉलीग्लॉट्स की पहचान, निरीक्षण और निर्माण का समर्थन करता है:

  • PyTorch v0.1.1: sys_info, pickle, स्टोरेज और टेंसर वाली Tar फ़ाइल
  • PyTorch v0.1.10: स्टैक्ड pickle फ़ाइलें
  • TorchScript v1.0: model.json वाली ZIP फ़ाइल
  • TorchScript v1.1: model.json और attributes.pkl वाली ZIP फ़ाइल
  • TorchScript v1.3: data.pkl और constants.pkl वाली ZIP फ़ाइल
  • TorchScript v1.4: data.pkl, constants.pkl और version 2 या उच्चतर पर सेट (2 pickle फ़ाइलें और एक फ़ोल्डर) वाली ZIP फ़ाइल
  • PyTorch v1.3: data.pkl युक्त ZIP फ़ाइल (1 pickle फ़ाइल)
  • PyTorch मॉडल आर्काइव प्रारूप[ZIP]: ZIP फ़ाइल जिसमें Python कोड फ़ाइलें और pickle फ़ाइलें शामिल हैं
root@kitploit:~
>> import torch
>> import torchvision.models as models
>> from fickling.pytorch import PyTorchModelWrapper
>> model = models.mobilenet_v2()
>> torch.save(model, "mobilenet.pth")
>> fickled_model = PyTorchModelWrapper("mobilenet.pth")
>> print(fickled_model.formats)
Your file is most likely of this format:  PyTorch v1.3
['PyTorch v1.3']

फिकलिंग का उपयोग करने के बारे में अधिक जानने के लिए हमारे उदाहरण देखें!

अधिक जानकारी

पिकल किए गए Python ऑब्जेक्ट वास्तव में बाइटकोड होते हैं जिनकी व्याख्या Python में निर्मित एक स्टैक-आधारित वर्चुअल मशीन द्वारा की जाती है जिसे "Pickle Machine" कहा जाता है। Fickling पिकल किए गए डेटा स्ट्रीम ले सकता है और उन्हें मानव-पठनीय Python कोड में डीकंपाइल कर सकता है, जो निष्पादित होने पर मूल सीरियलाइज़्ड ऑब्जेक्ट को डिसीरियलाइज़ करेगा। यह Fickling के PM के कस्टम कार्यान्वयन द्वारा संभव हुआ है। Fickling को संभावित रूप से दुर्भावनापूर्ण फ़ाइलों पर चलाना सुरक्षित है क्योंकि इसका PM कोड को प्रत्यक्ष रूप से निष्पादित करने के बजाय प्रतीकात्मक रूप से निष्पादित करता है।

लेखक Fickling में “F” का कोई अर्थ निर्धारित नहीं करते; यह “fickle,” … या कुछ और के लिए हो सकता है। इसका अर्थ जानना विवेक की एक व्यक्तिगत यात्रा है और इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया है।

हमारे ब्लॉग पोस्ट और DEF CON AI Village 2021 वार्ता में fickling के बारे में अधिक जानें।

संपर्क

यदि आप बग रिपोर्ट या फीचर अनुरोध दर्ज करना चाहते हैं, तो कृपया हमारे issues पृष्ठ का उपयोग करें। Fickling का उपयोग या विस्तार करने में सहायता के लिए बेझिझक हमसे संपर्क करें या Empire Hacking में पहुँचें।

लाइसेंस

यह उपयोगिता Trail of Bits द्वारा विकसित की गई थी। यह GNU Lesser General Public License v3.0 के अंतर्गत लाइसेंस प्राप्त है। यदि आप शर्तों के अपवाद की तलाश में हैं तो हमसे संपर्क करें।

© 2021, Trail of Bits.

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