
x86-64 बाइनरी लूप्स को स्ट्राइडेड अंतराल विश्लेषण के माध्यम से क्लोज़्ड-फॉर्म SMT बाधाओं में परिवर्तित करता है, जिससे O(1) प्रतीकात्मक निष्पादन और crackme कुंजी पुनर्प्राप्ति संभव होती है।
x86_64 बाइनरी विश्लेषण के लिए उच्च-प्रदर्शन $O(1)$ SMT लूप लिफ्टिंग और स्ट्राइडेड इंटरवल डोमेन
पारंपरिक प्रतीकात्मक निष्पादन और डायनेमिक बाइनरी इंस्ट्रुमेंटेशन (DBI) इंजन (जैसे angr, Triton, या KLEE) कुख्यात पथ और लूप विस्फोट समस्या से ग्रस्त हैं। जब किसी l[...]
Strilight लूपों को स्ट्राइडेड इंटरवल डोमेन के भीतर क्लोज़्ड-फ़ॉर्म बीजगणितीय पुनरावृत्तियों के रूप में मानकर इस समस्या को मौलिक रूप से हल करता है:
$$\vec{\mathbf{R}}(N) = \vec{\mathbf{R}}_0 + \vec{\boldsymbol{\Delta}} \cdot N$$
$N$ पुनरावृत्तियों का अनुकरण करने के बजाय, Strilight पुनरावृत्त निष्पादन ट्रेस को पदानुक्रमित LoopBlock संरचनाओं में संपीड़ित करता है, उनके अमूर्त affine और पॉलीसाइक्लिक चरणों का मूल्यांकन करता है, और e[...] को लिफ्ट करता है।
graph LR
A[Raw Machine Code / Trace] --> B[sl.disassemble & sl.compress]
B --> C[sl.evaluate / LoopEvaluator]
C -->|Strided Interval Domain| D[LoopSummary + Invariant Contract]
D -->|O1 Closed-Form Lifting| E["Z3 SMT-LIB2 Solver"]
E --> F[Instant Solution in less than 100 ms]
LoopBlock ग्राफ़ में संपीड़ित करता है।Strilight को स्वतंत्र मॉड्यूलर प्रोफ़ाइल के रूप में पैक किया गया है, ताकि आप केवल उन्हीं घटकों को ले जाएँ जिनकी आपके पाइपलाइन को आवश्यकता है:
# Profile 1: Core Engine (Pure Compressor + Embedded Def-Use Slicer + Capstone)
pip install strilight
# Profile 2: Symbolic Engine (Core Compressor + Z3 O(1) SMT Lifter)
pip install strilight[solver]
# Profile 3: Dynamic Slicing Suite (Core Compressor + Full PathTree Backward/Forward Tracker)
pip install strilight[tracker]
# Profile 4: Complete Bundle (All Engines + Full Tracker + Z3 Solver)
pip install strilight[all]
परीक्षण सूट, डिकपल्ड परतों में प्रत्येक मॉड्यूल को 100% परीक्षण पास दर के साथ मान्य करता है:
strilight की आवश्यकता है)कोई भारी सॉल्वर निर्भरता नहीं। किसी भी प्लेटफ़ॉर्म पर $<1\text{ second}$ में चलता है:
strilight[tracker] की आवश्यकता है)पूर्ण डायनेमिक डेटा-फ़्लो और कंट्रोल-डिपेंडेंसी ट्रैकिंग को मान्य करता है:
strilight[solver] की आवश्यकता है)BitVector समीकरण जनरेशन, शैडो प्रतिस्थापन और Z3 कॉन्स्ट्रेंट समाधान को मान्य करता है:
sl.analyze)किसी भी रॉ x86-64 मशीन कोड लूप का विश्लेषण करें और एक ही पंक्ति में उसका क्लोज़्ड-फ़ॉर्म ट्रांसफ़ॉर्मेशन निकालें:
import strilight as sl
# Loop bytecode: add eax, 8; sub ebx, 3; inc ecx; cmp ecx, 100000; jl 0x1000
loop_bytes = bytes.fromhex("83c008 83eb03 ffc1 81f9a0860100 7ced")
# ONE-LINE ANALYSIS:
summary = sl.analyze(loop_bytes, iterations=100000)
print(summary.deltas)
# Output: {'eax': 8, 'ebx': -3, 'ecx': 1}
# View the mathematical invariant contract:
print(summary.invariant_contract.to_dict())
import strilight as sl
# 1. Disassemble machine code bytes
instructions = sl.disassemble(loop_bytes, base_address=0x1000)
# 2. Package into a symbolic loop block
block = sl.LoopBlock(body=instructions, iterations=100000)
# 3. Extract closed-form mathematical steps (Deltas & Exit Predicates)
summary = sl.evaluate(block)
print(f"Exit Condition: {summary.exit_condition}")
लक्ष्य स्थिति को संतुष्ट करने के लिए आवश्यक पुनरावृत्तियों ($N$) की संख्या या इनपुट कुंजी को $<100\text{ ms}$ में हल करें:
import strilight as sl
import z3
# Disassemble and evaluate
summary = sl.analyze(loop_bytes, iterations=100000)
# Initialize Z3 translator
translator = sl.Z3Translator()
translator.solver.add(translator.get_register('eax') == 0)
translator.solver.add(translator.get_register('ebx') == 500000)
translator.solver.add(translator.get_register('ecx') == 0)
# Lift loop summary in O(1) into Z3
translator.translate_loop_summary(summary, max_iterations=100000)
# Goal: When does EAX reach 800,000?
translator.solver.add(translator.get_register('eax') == 800000)
# Solve in milliseconds!
if translator.solver.check() == z3.sat:
model = translator.solver.model()
solved_N = model.eval(summary.loop_counter_var).as_long()
print(f"[+] Solved N = {solved_N:,} iterations in O(1) time!")
नेस्टेड लूप, सब-रजिस्टर स्लाइसिंग और ऑब्स्क्यूरेटेड स्ट्राइड पैटर्न वाले जटिल 64-बिट विंडोज़ एक्ज़ीक्यूटेबल (CrackMe Suite) के विरुद्ध परीक्षण किया गया:
ग्राउंड-ट्रुथ सत्यापन: सभी पुनर्प्राप्त कुंजियों को subprocess के माध्यम से नेटिव संकलित बाइनरी (
.exe) को निष्पादित करके औरACCESS GRANTEDप्रतिक्रिया की पुष्टि करके सत्यापित किया जाता है।
sl.analyze(code_bytes, iterations=1000, ...): वन-लाइनर डिसअसेम्बली + मूल्यांकन।sl.disassemble(code_bytes, base_address=0x1000, bit_mode=64): Capstone के माध्यम से रॉ बाइट डिसअसेम्बलर।sl.compress(trace, min_iterations=3): पदानुक्रमित ट्रेस कंप्रेसर।sl.evaluate(block_or_trace, k_passes=100): अमूर्त स्थिति और इनवेरिएंट मूल्यांकनकर्ता।sl.Instruction: एकीकृत असेंबली निर्देश प्रतिनिधित्व।sl.LoopBlock: पुनरावृत्ति सीमाओं के साथ पदानुक्रमित लूप नोड।sl.LoopSummary: डेल्टा, चक्रीय पैटर्न और स्थिर सेट युक्त क्लोज़्ड-फ़ॉर्म ट्रांसफ़ॉर्मेशन सारांश।sl.LoopInvariantContract: औपचारिक संरचनात्मक निकास इनवेरिएंट वर्णनकर्ता और SMT सीमा नियम जनरेटर।sl.StridedInterval: स्ट्राइड संरेखण और मॉड्यूलर कॉन्ग्रुएंस के साथ गणितीय इंटरवल प्रतिनिधित्व।sl.Z3Translator: लूप सारांश को Z3 BitVector कॉन्स्ट्रेंट में परिवर्तित करने वाला सिम्बोलिक SMT लिफ्टर।डुअल लाइसेंस: MIT / Proprietary। उच्च-प्रदर्शन रिवर्स इंजीनियरिंग और बाइनरी विश्लेषण के लिए ❤️ के साथ विकसित।
| परीक्षण फ़ाइल | विवरण | परीक्षित घटक |
|---|
test_facade.py | उच्च-स्तरीय डेवलपर API (sl.analyze, sl.disassemble, sl.compress, sl.evaluate) | strilight फ़ेसेड |
test_capstone_decoupling.py | रॉ मशीन कोड बाइट्स डिसअसेम्बली और कस्टम ट्रेसर ब्रिज पंजीकरण | Instruction, [...] |
test_invariant_contract.py | गणितीय इनवेरिएंट कॉन्ट्रैक्ट और $N-1$ आयरन कॉन्स्ट्रेंट सीमा वर्णनकर्ता | LoopInvari[...] |
test_interval.py | कोर इंटरवल बाउंडिंग, इंटरवल अरिथमेटिक और संचालन | Interval |
test_disjoint_set.py | डिस्जॉइंट मेमोरी सेट, नॉन-कॉन्टिग्युअस रेंज अरिथमेटिक और यूनियन | DisjointIntervalSet |
test_strided_interval_notion.py | स्ट्राइडेड इंटरवल डोमेन, GCD कॉन्ग्रुएंस ब्रिज और सब-रजिस्टर बिटमास्क | Stri[...] |
test_circular_theorems.py | सर्कुलर मॉड्यूलर अरिथमेटिक रैप-अराउंड प्रमेय ($x \pmod{2^w}$) | StridedInterval गणित |
test_loop_compressor.py | LoopBlock ट्री में ट्रेस फोल्डिंग और लूप बैक-एज डिटेक्शन | TraceCompressor |
test_nested_loops.py | मल्टी-लेवल नेस्टेड लूप संपीड़न ($O(N \cdot M)$ पदानुक्रमित फोल्डिंग) | TraceCompressor ट्री |
test_vsa_evaluator.py | वैल्यू-सेट विश्लेषण सिमुलेशन पास और affine डेल्टा निष्कर्षण | LoopEvaluator |
test_polycyclic.py | मेमोरी और रजिस्टरों में पॉलीसाइक्लिक आवधिक पैटर्न ($P > 1$) | LoopEvaluator |
| परीक्षण फ़ाइल | विवरण | परीक्षित घटक |
|---|
test_tracker.py | बैकवर्ड/फॉरवर्ड निर्देश स्लाइसिंग, रजिस्टर/मेमोरी def-use चेन | Tracker, BackwardTracker |
test_lazy_tracker.py | लेज़ी इवैल्यूएशन और अप्रासंगिक लूप ब्लॉक को स्किप करना | Tracker ऑप्टिमाइज़ेशन |
test_loop_taint.py | लूप टेंट प्रसार और लूप-निकास कंट्रोल डिपेंडेंसी ट्रैकिंग | Tracker टेंट |
test_path_tree.py | ब्रांच निर्णय कैशिंग और डेड-एंड पथ उन्मूलन | PathTree |
test_stop_dict.py | API टेंट सीमा परिभाषाएँ | stop_dict |
test_hooks.py | निर्देश और मेमोरी एक्सेस इंटरसेप्शन कॉलबैक | hooks |
| परीक्षण फ़ाइल | विवरण | परीक्षित घटक |
|---|
test_translator.py | x86-64 निर्देशों का Z3 BitVectors में पूर्ण अनुवाद (अरिथमेटिक, फ्लैग, जंप, मेमोरी) | Z3Translator |
test_translator_edge_cases.py | गहरा AST निष्कासन, मेमोरी अलियासिंग चेन और सीमा कॉन्स्ट्रेंट | Z3Translato[...] |
test_deep_doubts.py | साइन्ड रैप-अराउंड, डिग्री-3 क्यूबिक न्यूटन इंडक्शन और Bezout कॉन्ग्रुएंस | गणितीय प्रमाण |
| # | लक्ष्य बाइनरी | स्लाइस आकार | Z3 स्थिति | खोजी गई कुंजी | नेटिव निष्पादन | समय | परिणाम |
|---|
| 1 | crackme_boss.exe | 662 | SAT | 1729 | ACCESS GRANTED | ~60 ms | [PASS] |
| 2 | crackme_subregs.exe | 671 | SAT | 1337 | ACCESS GRANTED | ~75 ms | [PASS] |
| 3 | crackme_nested_loops.exe | 1369 | SAT | 1337 | ACCESS GRANTED | ~110 ms | [PASS] |
| 4 | crackme_pointers.exe | 859 | SAT | 1337 | ACCESS GRANTED | ~85 ms | [PASS] |
| 5 | crackme_license.exe | 657 | SAT | 1337 | ACCESS GRANTED | ~65 ms | [PASS] |
| 6 | crackme_strided_circular.exe | 829 | SAT | 1337 | ACCESS GRANTED | ~95 ms | [PASS] |