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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
libmempool — Heap analysis tooling for mempool | Kitploit
उपकरण/GitHubGitHub/nccgroup/libmempool
Embedded Systems SecurityMemory ForensicsReverse EngineeringDebuggersBinary AnalysisFirmware Analysis
GitHubnccgroup/libmempool

libmempool

Heap analysis tooling for mempool

रिपॉजिटरी देखें
1374 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

libmempool

प्रारंभिक नोट: हम अनुशंसा करते हैं कि आप इसे asatools के भाग के रूप में उपयोग करें, लेकिन इसे स्टैंडअलोन भी उपयोग किया जा सकता है।

libmempool एक पायथन स्क्रिप्ट और GDB विश्लेषण उपकरण है जो Cisco ASA डिवाइसों पर विभिन्न हीप्स के भीतर पाए जाने वाले mempool-संबंधित डेटा संरचनाओं के विश्लेषण में सहायता करता है। सामान्यतः यह जानकारी एक हीप चंक में एम्बेडेड होती है, या किसी अन्य सामान्य हीप संरचना जैसे dlmalloc mstate संरचना का एक कस्टम विस्तार होती है।

Cisco विभिन्न उद्देश्यों जैसे सामान्य आवंटन, DMA, आदि के लिए मैप की गई मेमोरी के क्षेत्रों का वर्णन करने के लिए mempool शब्द का उपयोग करता है। इन क्षेत्रों में आमतौर पर उनका हीप, जैसे dlmalloc, होता है। इन mempools पर आवंटन दिनचर्या आमतौर पर अंतर्निहित हीप आवंटक के चारों ओर रैपर का उपयोग करके की जाती है, और ये रैपर परिणामी आवंटन में mempool-विशिष्ट मेटाडेटा इंजेक्ट करते हैं। हम इस मेटाडेटा को mempool header या संक्षेप में mh कहते हैं। इसी तरह हम नियमित रूप से mempool को mp कहेंगे। mempool header का वर्णन करने के लिए mh का उपयोग Cisco ASA lina बाइनरी में पाए जाने वाले विभिन्न स्ट्रिंग्स के साथ भी संगत है।

यद्यपि libmempool को mempool हेडर और डेटा संरचनाओं से संबंधित कुछ चीजों के विश्लेषण के लिए एक स्टैंड-अलोन उपकरण के रूप में उपयोग किया जा सकता है, इसका सबसे बड़ा मूल्य अन्य पुस्तकालयों जैसे libdlmalloc या libptmalloc से कॉलबैक के रूप में उपयोग किए जाने से आता है।

यह ध्यान देने योग्य है कि mempool के कुछ पहलू, जैसे कि उपयोग में आने वाले चंक्स को ट्रैक करने के लिए उपयोग किए जाने वाले bins, dlmalloc 2.8.x mstate संरचना के अंदर एम्बेडेड होते हैं और समान bin आकार का पालन करते हैं। इसका मतलब है कि लगभग अनिवार्य रूप से आपको libdlmalloc का उपयोग करके mempool डेटा को समाहित करने वाले कम से कम mstate के आसपास खोजबीन करनी पड़ सकती है।

समर्थित संस्करण

libmempool का परीक्षण 32-बिट / 64-बिट Cisco ASA संस्करणों (ASA5500-X श्रृंखला और GNS3 दोनों) के साथ किया गया है जो dlmalloc2.8 या glibc के ptmalloc2-आधारित आवंटक का उपयोग करते हैं। इसका परीक्षण कई ASA संस्करणों पर किया गया है, जिनमें कई 8.x.y और 9.x.y शाखाएँ शामिल हैं। हालाँकि, यह पूरी तरह से संभव है कि यह किसी संस्करण पर विफल हो जाए।

स्थापना

libmempool को स्टैंड-अलोन उपयोग करने के लिए आपको बस अपने प्रोजेक्ट में libmempool.py फ़ाइल को import करना होगा। यह आपको कुछ सीमित क्रियाएँ करने की अनुमति देता है, जैसे mpcallback ऑब्जेक्ट को पंजीकृत करना, आदि। यह उपयोगी हो सकता है यदि आप लॉग किए गए हीप कार्यक्षमता का ऑफ़लाइन विश्लेषण कर रहे हैं।

GDB में import करने के लिए, स्क्रिप्ट को केवल पायथन समर्थन के साथ GDB की आवश्यकता होती है। हालाँकि अधिकांश आधुनिक GDB संस्करण पायथन 3 की ओर बढ़ गए हैं, कुछ अभी भी 2.7 की अपेक्षा करते हैं। स्क्रिप्ट का परीक्षण दोनों पर किया गया है, लेकिन मुख्य रूप से विकास और परीक्षण पायथन 3 के साथ किया जाता है।

root@kitploit:~
(gdb) source libmempool_gdb.py

हम अधिकांश gdb-संबंधित तर्क को libmempool.py से अलग करके libmempool_gdb.py में रखते हैं, केवल चीजों को अमूर्त करने का परीक्षण करने के लिए और ताकि आप GDB के बाहर आसानी से libmempool.py का उपयोग कर सकें। यह संभवतः भविष्य में बदलेगा, क्योंकि हम अंततः libheap और shadow जैसे अन्य हीप विश्लेषण उपकरणों द्वारा उपयोग किए जाने वाले समान डीबग इंजन अमूर्तन को लागू करना चाहेंगे।

उपयोग

यद्यपि libmempool का अधिकांश मूल्य इसके द्वारा उजागर किए गए mpcallback कॉलबैक फ़ंक्शन से आता है, फिर भी कई अंतर्निहित GDB कमांड हैं जिन्हें हम देख सकते हैं।

root@kitploit:~
(gdb) mphelp 
[libmempool] mempool commands for gdb
[libmempool] mpheader -v -x <addr>           : show chunk contents (-v for verbose, -x for data dump)
[libmempool] mpbinwalk [-v] [-p <addr>] <sz> : walk an mpbin and operate on each chunk in a bin
[libmempool] mpbin <addr>                    : determine to which bin an mp_header is associated to
[libmempool] mpmstate <addr>                 : display and cache a mempool mstate address
[libmempool] mphelp

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

root@kitploit:~
(gdb) mpheader 0x7fffbc1c1ca0
struct mp_header @ 0x7fffbc1c1ca0 {
mh_magic      = 0xa11c0123
mh_len        = 0x3
mh_refcount   = 0x10000
mh_unused     = 0x0
mh_fd_link    = 0x7fffbc1c19e0 (OK)
mh_bk_link    = 0x7ffff7ff7540 (-)
alloc_pc      = 0x55555849e260 (-)
free_pc       = 0x0 (-)

हम -x का उपयोग करके चंक की हेक्स सामग्री भी डंप कर सकते हैं।

root@kitploit:~
(gdb) mpheader -x 0x7fffbc1c1ca0 
struct mp_header @ 0x7fffbc1c1ca0 {
mh_magic      = 0xa11c0123
mh_len        = 0x3
mh_refcount   = 0x10000
mh_unused     = 0x0
mh_fd_link    = 0x7fffbc1c19e0 (OK)
mh_bk_link    = 0x7ffff7ff7540 (-)
alloc_pc      = 0x55555849e260 (-)
free_pc       = 0x0 (-)
0x3 bytes of chunk data:
0x7fffbc1c1cd0:	0x55	0x04	0x03

Mempools में bins की अवधारणा होती है, जो dlmalloc bins के समान आकार की दोहरी लिंक्ड सूचियाँ होती हैं, लेकिन इनका उपयोग मुक्त चंक्स के बजाय उपयोग में आने वाले चंक्स को ट्रैक करने के लिए किया जाता है। यह Cisco डिवाइसों पर मेमोरी उपयोग बहीखाता के लिए किया जाता है। अक्सर आपको एक चंक मिल सकता है जिसमें mempool हेडर होता है, लेकिन आप अभी तक नहीं जानते कि हीप पर mstate संरचना कहाँ रहती है। अपनी स्थिति समझने के लिए, आप mpbin कमांड का उपयोग कर सकते हैं, जो आपको उस mempool bin का पता देगा जिसमें एक उपयोग में आने वाला चंक वर्तमान में रहता है। उदाहरण के लिए:

root@kitploit:~
(gdb) mpbin 0x7fffbc1c1ca0 
[libmempool] Found bin start at 0x7ffff7ff7540
[libmempool] Cached new mp_mstate @ 0x7ffff7ff73c0
[libmempool] mp_smallbin[08] - sz: 0x00000040 cnt: 0x00d3, mh_fd_link: 0x7fffbc1c1ca0

यह नोट केवल mstate के mempool भाग की शुरुआत नहीं खोजता, बल्कि इसे कैश भी करता है, और उस विशिष्ट bin को सूचीबद्ध करता है जिसमें चंक मौजूद है। हम वैकल्पिक रूप से mpbinwalk कमांड का उपयोग इस bin से सभी 0xd3 चंक्स को सूचीबद्ध करने के लिए कर सकते हैं, या केवल एक विशिष्ट संख्या तक:

root@kitploit:~
(gdb) mpbinwalk 0x40
[libmempool] mp_header @ 0x7ffff7ff7540 - mh_len: 0x00000000, alloc_pc: 0x00000000 [BIN HEAD]
[libmempool] mp_header @ 0x7fffbc1c1ca0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1c19e0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1c1750 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1bffa0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1bff60 - mh_len: 0x00000003, alloc_pc: 0x5555584a1288
[libmempool] mp_header @ 0x7fffbc1c0050 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[...]

अब यदि हम mstate संरचना के पूरे mempool भाग को डंप करना चाहते हैं (अर्थात सभी bins और संबंधित आँकड़े) तो हम mpmstate कमांड का उपयोग कर सकते हैं:

root@kitploit:~
(gdb) mpmstate 0x7ffff7ff73c0
struct mp_mstate @ 0x7ffff7ff73c0 {
mp_smallbin[00] - sz: 0x00000000 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[01] - sz: 0x00000008 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[02] - sz: 0x00000010 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[03] - sz: 0x00000018 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[04] - sz: 0x00000020 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[05] - sz: 0x00000028 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[06] - sz: 0x00000030 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[07] - sz: 0x00000038 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[08] - sz: 0x00000040 cnt: 0x00d3, mh_fd_link: 0x7fffbc1c1ca0
mp_smallbin[09] - sz: 0x00000048 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[10] - sz: 0x00000050 cnt: 0x0429, mh_fd_link: 0x7fffa4000d10
mp_smallbin[11] - sz: 0x00000058 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[12] - sz: 0x00000060 cnt: 0x335d, mh_fd_link: 0x7fffb80064b0
mp_smallbin[13] - sz: 0x00000068 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[14] - sz: 0x00000070 cnt: 0x073a, mh_fd_link: 0x7fffbc1c7260
mp_smallbin[15] - sz: 0x00000078 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[16] - sz: 0x00000080 cnt: 0x0301, mh_fd_link: 0x7fffbc1c72d0
mp_smallbin[17] - sz: 0x00000088 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[18] - sz: 0x00000090 cnt: 0x0c98, mh_fd_link: 0x7fffc9488920
mp_smallbin[19] - sz: 0x00000098 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[20] - sz: 0x000000a0 cnt: 0x0161, mh_fd_link: 0x7fffa40009a0
mp_smallbin[21] - sz: 0x000000a8 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[22] - sz: 0x000000b0 cnt: 0x0092, mh_fd_link: 0x7fffa4000a40
mp_smallbin[23] - sz: 0x000000b8 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[24] - sz: 0x000000c0 cnt: 0x0120, mh_fd_link: 0x7fffbc1c1270
mp_smallbin[25] - sz: 0x000000c8 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[26] - sz: 0x000000d0 cnt: 0x00ba, mh_fd_link: 0x7fffbc1b51a0
mp_smallbin[27] - sz: 0x000000d8 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[28] - sz: 0x000000e0 cnt: 0x005b, mh_fd_link: 0x7fffc9485020
mp_smallbin[29] - sz: 0x000000e8 cnt: 0x0000, mh_fd_link: 0x0
mp_smallbin[30] - sz: 0x000000f0 cnt: 0x016e, mh_fd_link: 0x7fffbc1c7040
mp_smallbin[31] - sz: 0x000000f8 cnt: 0x0000, mh_fd_link: 0x0
mp_treebin[00] - sz: 0x00000180 cnt: 0x050f, mh_fd_link: 0x7fffbc1c7130
mp_treebin[01] - sz: 0x00000200 cnt: 0x00ce, mh_fd_link: 0x7fffbc1c2610
mp_treebin[02] - sz: 0x00000300 cnt: 0x011a, mh_fd_link: 0x7fffa40053c0
mp_treebin[03] - sz: 0x00000400 cnt: 0x013e, mh_fd_link: 0x7fffa4000f80
mp_treebin[04] - sz: 0x00000600 cnt: 0x016f, mh_fd_link: 0x7fffbc1c2a80
mp_treebin[05] - sz: 0x00000800 cnt: 0x009a, mh_fd_link: 0x7fffbc1b4880
mp_treebin[06] - sz: 0x00000c00 cnt: 0x0081, mh_fd_link: 0x7fffbc1b38b0
mp_treebin[07] - sz: 0x00001000 cnt: 0x002b, mh_fd_link: 0x7fffbc1b2330
mp_treebin[08] - sz: 0x00001800 cnt: 0x0326, mh_fd_link: 0x7fffc9368e10
mp_treebin[09] - sz: 0x00002000 cnt: 0x0038, mh_fd_link: 0x7fffc92e9c60
mp_treebin[10] - sz: 0x00003000 cnt: 0x00b9, mh_fd_link: 0x7fffa4003380
mp_treebin[11] - sz: 0x00004000 cnt: 0x006d, mh_fd_link: 0x7fffc9457720
mp_treebin[12] - sz: 0x00006000 cnt: 0x023b, mh_fd_link: 0x7fffbc1ac000
mp_treebin[13] - sz: 0x00008000 cnt: 0x0018, mh_fd_link: 0x7fffc946f850
mp_treebin[14] - sz: 0x0000c000 cnt: 0x0030, mh_fd_link: 0x7fffc935fcc0
mp_treebin[15] - sz: 0x00010000 cnt: 0x0019, mh_fd_link: 0x7fffb44262b0
mp_treebin[16] - sz: 0x00018000 cnt: 0x0073, mh_fd_link: 0x7fffc93fe020
mp_treebin[17] - sz: 0x00020000 cnt: 0x0018, mh_fd_link: 0x7fffc94368f0
mp_treebin[18] - sz: 0x00030000 cnt: 0x000c, mh_fd_link: 0x7fffb0665010
mp_treebin[19] - sz: 0x00040000 cnt: 0x001c, mh_fd_link: 0x7fffa836d010
mp_treebin[20] - sz: 0x00060000 cnt: 0x000d, mh_fd_link: 0x7fffa8c55010
mp_treebin[21] - sz: 0x00080000 cnt: 0x001d, mh_fd_link: 0x7fffa9009010
mp_treebin[22] - sz: 0x000c0000 cnt: 0x0006, mh_fd_link: 0x7fffa9081010
mp_treebin[23] - sz: 0x00100000 cnt: 0x000a, mh_fd_link: 0x7fffb025f010
mp_treebin[24] - sz: 0x00180000 cnt: 0x000b, mh_fd_link: 0x7fffa8b38010
mp_treebin[25] - sz: 0x00200000 cnt: 0x000e, mh_fd_link: 0x7fffb008a010
mp_treebin[26] - sz: 0x00300000 cnt: 0x0007, mh_fd_link: 0x7fffb0323010
mp_treebin[27] - sz: 0x00400000 cnt: 0x0002, mh_fd_link: 0x7fffa87f5010
mp_treebin[28] - sz: 0x00600000 cnt: 0x0003, mh_fd_link: 0x7fffa83e9010
mp_treebin[29] - sz: 0x00800000 cnt: 0x0001, mh_fd_link: 0x7fffab328010
mp_treebin[30] - sz: 0x00c00000 cnt: 0x0001, mh_fd_link: 0x7fffd706d010
mp_treebin[31] - sz: 0xffffffff cnt: 0x0003, mh_fd_link: 0x7fffa9326010 [UNSORTED]

कॉलबैक एकीकरण

हम libmempool के अंदर एक dlmalloc और ptmalloc "जागरूक" कॉलबैक लागू करते हैं, जिसे libdlmalloc या libptmalloc द्वारा कॉल करने का इरादा है ताकि उनके चंक एनोटेशन को अतिरिक्त mempool-विशिष्ट डेटा के साथ बढ़ाया जा सके। उदाहरण के लिए, यदि libdlmalloc का उपयोग dlmalloc चंक की विस्तृत सूची मुद्रित करने के लिए किया जाता है, और उस चंक के अंदर एक mempool हेडर है, तो mempool कॉलबैक इसे प्रिंट करेगा।

अन्य उपकरणों के माध्यम से उपयोग किए जाने पर यह कैसा दिखता है, इसकी जानकारी के लिए कृपया libdlmalloc और libptmalloc दोनों में README फ़ाइलें देखें।

भविष्य का विकास

हम आवश्यकता पड़ने पर या भविष्य के Cisco ASA अनुसंधान के दौरान libmempool में कार्यक्षमता जोड़ने की संभावना रखते हैं। वर्तमान में नियोजित परिवर्धन हैं:

  • डीबग इंजन तर्क को अमूर्त करना ताकि यह libheap या shadow के नए डिज़ाइनों की तरह अधिक हो
  • हम वर्तमान में यह जाँचते समय कि कोई चंक ठीक दिखता है, फुटर को मान्य नहीं करते हैं, लेकिन इसे जोड़ा जाना चाहिए।

संपर्क

हमें इस उपकरण के बारे में प्रतिक्रिया सुनना अच्छा लगेगा और हम pull requests पाकर भी खुश होंगे।

  • Aaron Adams

    • ईमेल: aaron<dot>adams<at>nccgroup<dot>trust
    • ट्विटर: @fidgetingbits
  • Cedric Halbronn

    • ईमेल: cedric<dot>halbronn<at>nccgroup<dot>trust
    • ट्विटर: @saidelike
टूल डाउनलोड करें