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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
aotopsy — Flutter/Dart AOT स्नैपशॉट के लिए स्थैतिक विश्लेषक — Dart VM को एम्बेड या निष्पादित किए बिना libapp.so से फ़ंक्शन नाम, क्लास पदानुक्रम, कॉल ग्राफ़ और व्यवहारिक संकेत पुनर्प्राप्त करता है। ARM64 और x86_64, Dart 2.10–3.12 का समर्थन करता है। | Kitploit
उपकरण/GitHubGitHub/bronils/aotopsy
स्थैतिक विश्लेषणमोबाइल ऐप पेंटेस्टिंगरिवर्स इंजीनियरिंगमोबाइल सुरक्षाबाइनरी विश्लेषण
GitHubbronils/aotopsy

aotopsy

Flutter/Dart AOT स्नैपशॉट के लिए स्थैतिक विश्लेषक — Dart VM को एम्बेड या निष्पादित किए बिना libapp.so से फ़ंक्शन नाम, क्लास पदानुक्रम, कॉल ग्राफ़ और व्यवहारिक संकेत पुनर्प्राप्त करता है। ARM64 और x86_64, Dart 2.10–3.12 का समर्थन करता है।

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

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

सभी देखें →

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

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

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

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

AOTopsy

CI Release License

एक Dart AOT स्नैपशॉट विश्लेषक। libapp.so — Flutter रिलीज़ APK के अंदर संकलित Dart कोड — को फ़ंक्शन नामों, क्लास लेआउट, कॉल ग्राफ़, व्यवहारिक संकेतों और पठनीय स्यूडोकोड में बदलता है। कोई Dart VM नहीं, कोई SDK संकलन नहीं, कोई रनटाइम फ़ॉलबैक नहीं।

फ़ोर्क सूचना: AOTopsy, unflutter का एक फ़ोर्क है, जिसे मूल रूप से Anthony Zboralski ने बनाया था। मूल zboralski/unflutter रिपॉज़िटरी अब उपलब्ध नहीं है (लेखक द्वारा हटा दी गई); एक सामुदायिक निरंतरता KristijanZic/unflutter पर मौजूद है। मूल स्नैपशॉट पार्सर, क्लस्टर डीसीरियलाइज़र, ARM64 डिसअसेम्बली पाइपलाइन और Ghidra/IDA एकीकरण का सारा श्रेय मूल लेखक को जाता है। AOTopsy इसे x86_64 समर्थन, एक नेटिव डीकंपाइलर, संपूर्ण-प्रोग्राम टाइप अनुमान, Frida स्क्रिप्ट जनरेशन और व्यापक दस्तावेज़ीकरण के साथ विस्तारित करता है।

यह क्या पुनर्प्राप्त करता है

आउटपुटयह क्या है
फ़ंक्शन नामप्रत्येक संकलित फ़ंक्शन के लिए मूल Dart नाम
क्लास संरचनाएँफ़ील्ड नाम, बाइट ऑफ़सेट, विरासत श्रृंखलाएँ
कॉल ग्राफ़प्रोवेनेंस के साथ प्रत्यक्ष (BL) और अप्रत्यक्ष (BLR/dispatch) कॉल किनारे
स्ट्रिंग संदर्भकौन से फ़ंक्शन ऑब्जेक्ट पूल से कौन से स्ट्रिंग लिटरल लोड करते हैं
व्यवहारिक संकेतक्रिप्टो, नेटवर्क, जुआ, SIM, स्थान, WebView, ब्लॉकचेन कीवर्ड वर्गीकरण
स्यूडोकोडARM64 या x86_64 मशीन कोड से आर्किटेक्चर-न्यूट्रल डीकंपाइल्ड आउटपुट
Dart स्रोत निर्यातक्लास, फ़ील्ड और मेथड्स के साथ पुनर्निर्मित संपूर्ण-प्रोजेक्ट मॉड्यूलर .dart फ़ाइलें

ARM64 और x86_64 का समर्थन करता है। Dart 2.10 से 3.13 तक कवर करता है (3.13.2 वर्तमान स्थिर सीमा है) — प्रत्येक मॉडल किया गया संस्करण दोनों आर्किटेक्चर पर साफ़ तरीके से पार्स होता है, देखें COVERAGE.md (93 नमूना बिल्ड, 0 विफलताएँ)।

सटीकता और ईमानदारी

AOTopsy को ग्राउंड ट्रुथ के विरुद्ध मापा जाता है, दावा नहीं किया जाता। प्रत्येक परिवर्तन पर टेस्ट सूट द्वारा दो गुण लागू किए जाते हैं:

मीट्रिकमानइसका क्या अर्थ है
नाम-पुनर्प्राप्ति सहमति44 ग्राउंड-ट्रुथ बिल्ड्स में समग्र रूप से 90.2% (81.3% सबसे खराब बैंड, ≥ 0.81 गेट फ़्लोर)पुनर्प्राप्त फ़ंक्शन नामों की तुलना प्रत्येक बिल्ड के अपने ELF .symtab से की गई, जो बाहरी ग्राउंड ट्रुथ है — TestSymtabDifferential। प्रति-बिल्ड पूरा स्कोरबोर्ड: BENCHMARK.md (make bench)।
डीकंपाइलर सिंटैक्स वैधता100% वैध Dartप्रत्येक उत्सर्जित स्यूडोकोड फ़ंक्शन Dart के रूप में पार्स होता है — TestDecompileQualityCorpus।
निर्माण दर0%§2 नियम: किसी अनुमानित नाम, प्रकार या कॉल लक्ष्य को कभी तथ्य के रूप में उत्सर्जित न करें। अज्ञात चीज़ें ईमानदारी से प्रस्तुत होती हैं (indirectCall, <unknown>, dynamic)।

ग्राउंड-ट्रुथ ट्विन्स वास्तविक प्रोडक्शन बिल्ड हैं जिन्हें हम पुनर्वितरित नहीं कर सकते, इसलिए वे डिफ़रेंशियल गेट्स स्थानीय रूप से चलते हैं; सार्वजनिक CI बिल्ड, vet, gofmt, staticcheck, यूनिट टेस्ट (शफ़ल किए गए) और प्लेटफ़ॉर्म मैट्रिक्स में कवरेज फ़्लोर को मान्य करता है। samples/ पुनर्वितरित करने योग्य नहीं है और gitignored है, इसलिए नमूना-निर्भर टेस्ट वहाँ छोड़ दिए जाते हैं — लेकिन केवल तब जब कॉर्पस पूरी तरह अनुपस्थित हो; एक कॉर्पस जो मौजूद है और एक पंजीकृत नमूना गुम है, विफल हो जाता है, क्योंकि इनका अर्थ विपरीत है। यहाँ प्रत्येक संख्या कैसे मापी जाती है (ग्राउंड ट्रुथ, मीट्रिक परिभाषाएँ, पुनरुत्पादन): METHODOLOGY.md। रिलीज़-बाइनरी सत्यापन और नीचे दिए गए ईमानदार दायरे के लिए SECURITY.md देखें।

त्वरित शुरुआत

make build
./aotopsy libapp.so                    # full pipeline
./aotopsy doctor libapp.so             # quick diagnostic
./aotopsy export-dart --lib libapp.so --out ./lib  # reconstruct entire Dart source project
./aotopsy _debug decompile-native --lib libapp.so --find MyClass  # find and decompile a function

वास्तविक स्नैपशॉट पर पाँच मिनट के वॉकथ्रू के लिए DEMO.md देखें, या जब आपके पास एक कच्चा APK हो और आपको पता न हो कि कहाँ से शुरू करें, तो चरण-दर-चरण कार्यप्रणाली के लिए WORKFLOW.md देखें।

यह कैसे काम करता है

AOTopsy, Dart AOT स्नैपशॉट को एक नियतात्मक बाइनरी व्याकरण के रूप में मानता है। सही बाधाओं (ELF संरचना, स्नैपशॉट मैजिक, वर्ज़न हैश, CID तालिका, क्लस्टर एन्कोडिंग) दिए जाने पर प्रत्येक बाइट का ठीक एक सही अर्थ होता है। पार्सर बाधाओं को तब तक लागू करता है जब तक केवल एक ही व्याख्या शेष न रहे — कोई अनुमानी तरीका नहीं, कोई अंदाज़ा नहीं।

पाइपलाइन चरणों में चलती है, प्रत्येक चरण बाइट्स से संरचित डेटा तक एक शुद्ध फ़ंक्शन है:

flowchart TD
    A[libapp.so] --> B[ELF parse]
    B --> C[snapshot region extraction]
    C --> D[version detection]
    D --> E[cluster alloc<br/>object census]
    E --> F[cluster fill<br/>field values, names, strings]
    F --> G[instructions table<br/>code ranges, stub boundaries]
    G --> H{architecture?}
    H -->|ARM64| I[ARM64 disassembly]
    H -->|x86_64| J[x86_64 disassembly]
    I --> K[CFG + call edges<br/>register provenance]
    J --> K
    K --> L[type inference<br/>BLR receiver type resolution]
    L --> M[signal classification<br/>behavioral keyword matching]
    M --> N[JSONL + HTML + DOT<br/>pseudocode output]

दो स्वतंत्र बैकएंड एक ही फ्रंट हाफ (ELF से क्लस्टर फिल तक) साझा करते हैं, फिर आर्किटेक्चर के आधार पर विभाजित होते हैं: ARM64 के लिए internal/disasm, x86_64 के लिए internal/disasm/x86.go। डीकंपाइलर (internal/decompiler) एकीकृत IR के माध्यम से दोनों आर्किटेक्चर को संभालता है।

flowchart LR
    subgraph "Shared front half"
        A[elfx] --> B[snapshot]
        B --> C[cluster]
    end
    subgraph "ARM64 backend"
        C --> D1[disasm ARM64]
        D1 --> E1[callgraph]
        E1 --> F1[signal]
    end
    subgraph "x86_64 backend"
        C --> D2[disasm x86_64]
        D2 --> E2[callgraph]
        E2 --> F2[signal]
    end
    subgraph "Decompiler (both archs)"
        C --> G[decompiler IR]
        G --> H[pseudocode]
    end

Blutter के साथ तुलना

flowchart LR
    subgraph Blutter
        direction TB
        B1[libapp.so] --> B2[Compile matching<br/>Dart SDK]
        B2 --> B3[Embed Dart VM]
        B3 --> B4[Deserialize via<br/>VM internal APIs]
        B4 --> B5[Perfect fidelity]
    end
    subgraph AOTopsy
        direction TB
        A1[libapp.so] --> A2[Parse binary format<br/>directly]
        A2 --> A3[No VM, no SDK]
        A3 --> A4[Version-specific<br/>format modeling]
        A4 --> A5[Portability + speed]
    end

Blutter स्नैपशॉट को अपने स्वयं के कोड पथों के माध्यम से डीसेरियलाइज़ करने के लिए Dart VM को एम्बेड करता है। पूर्ण निष्ठा, लेकिन हर लक्ष्य संस्करण के लिए एक मेल खाता Dart SDK संकलित करना आवश्यक है — और यह केवल ARM64 के लिए है, स्थिर x86_64 समर्थन के बिना। AOTopsy एकमात्र स्थिर, संस्करण-स्वतंत्र विश्लेषक है जिसमें एक मूल स्यूडोकोड डीकंपाइलर और प्रकाशित ग्राउंड-ट्रुथ सटीकता है।

AOTopsy बाइनरी प्रारूप को सीधे पार्स करता है। कोई VM नहीं, कोई SDK नहीं। समझौता: Dart संस्करणों में हर प्रारूप परिवर्तन को स्पष्ट रूप से मॉडल किया जाना चाहिए। इसे स्वचालित रूप से संभालने के लिए कोई रनटाइम नहीं है।

कमांड

पूर्ण पाइपलाइन

aotopsy libapp.so              # disasm + call edges + signal + metadata (ARM64: + Ghidra/IDA)
aotopsy signal libapp.so       # same, skip metadata
aotopsy libapp.so --graph      # also build call graph DOT files
टूल डाउनलोड करें