Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
barf-project — BARF : إطار عمل مفتوح المصدر متعدد المنصات لتحليل الثنائيات وهندسة البرمجيات العكسية | Kitploit
أدوات/GitHubGitHub/programa-stic/barf-project
التحليل الثابتالتحليل الديناميكي (عزل)أطر الاستغلالالهندسة العكسيةالاختبار العشوائيتحليل الملفات الثنائيةالتعلم والتعليمتطوير الحمولات
GitHubprograma-stic/barf-project

barf-project

BARF : إطار عمل مفتوح المصدر متعدد المنصات لتحليل الثنائيات وهندسة البرمجيات العكسية

عرض المستودع
1.5k171منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

BARF : إطار تحليل ثنائي وهندسة عكسية

Build Status

يُعد تحليل الشفرة الثنائية نشاطًا حاسمًا في العديد من مجالات علوم الكمبيوتر وهندسة البرمجيات، بدءًا من أمن البرمجيات وتحليل البرامج وصولاً إلى الهندسة العكسية. التحليل اليدوي للشفرة الثنائية مهمة صعبة وتستغرق وقتًا طويلاً، وتوجد أدوات برمجية تسعى إلى أتمتة أو مساعدة المحللين البشريين. ومع ذلك، فإن معظم هذه الأدوات لها قيود تقنية وتجارية تحد من الوصول إليها واستخدامها من قبل جزء كبير من المجتمعات الأكاديمية والممارسين. BARF هو إطار عمل مفتوح المصدر لتحليل الشفرة الثنائية يهدف إلى دعم مجموعة واسعة من مهام تحليل الشفرة الثنائية الشائعة في تخصص أمن المعلومات. إنها منصة قابلة للبرمجة تدعم رفع التعليمات من معماريات متعددة، والترجمة الثنائية إلى تمثيل وسيط، وإطار عمل قابل للتوسع لمكونات تحليل الكود، والتفاعل مع الأدوات الخارجية مثل المصححات وحلول SMT وأدوات التتبع. صُمم الإطار بشكل أساسي للتحليل بمساعدة الإنسان ولكنه يمكن أتمتته بالكامل.

يشمل مشروع BARF BARF والأدوات والحزم ذات الصلة. حتى الآن، يتكون المشروع من العناصر التالية:

  • BARF : إطار عمل مفتوح المصدر متعدد المنصات لتحليل الشفرة الثنائية والهندسة العكسية.
  • PyAsmJIT : JIT لمعمارية Intel x86_64 و ARM.
  • أدوات مبنية على BARF:
    • BARFgadgets : يتيح لك البحث عن أدوات ROP داخل برنامج ثنائي وتصنيفها والتحقق منها.
    • BARFcfg : يتيح لك استعادة رسم بياني لتدفق التحكم لوظائف برنامج ثنائي.
    • BARFcg : يتيح لك استعادة رسم بياني للاستدعاءات لوظائف برنامج ثنائي.

لمزيد من المعلومات، انظر:

  • BARF: A multiplatform open source Binary Analysis and Reverse engineering Framework (ورقة بيضاء) [en]
  • BARFing Gadgets (عرض ekoparty2014) [es]

الحالة الحالية:

أحدث إصدارv0.6.0
الرابطhttps://github.com/programa-stic/barf-project/releases/tag/v0.6.0
سجل التغييراتhttps://github.com/programa-stic/barf-project/blob/v0.6.0/CHANGELOG.md

تم اختبار جميع الحزم على Ubuntu 16.04 (x86_64).

BARF

BARF هي حزمة Python لتحليل الشفرة الثنائية والهندسة العكسية. يمكنها:

  • تحميل البرامج الثنائية بتنسيقات مختلفة (ELF, PE, إلخ)،
  • دعم معمارية Intel x86 لـ 32 و 64 بت،
  • دعم معمارية ARM لـ 32 بت،
  • العمل على لغة وسيطة (REIL) وبالتالي فإن جميع خوارزميات التحليل مستقلة عن المعمارية،
  • التكامل مع حلول SMT Z3 و CVC4 مما يعني أنه يمكنك التعبير عن أجزاء من الكود كصيغ والتحقق من القيود عليها.

إنها حاليًا قيد التطوير.

التثبيت

يعتمد BARF على حلول SMT التالية:

  • Z3 : مُثبت نظريات عالي الأداء تم تطويره في Microsoft Research.
  • CVC4 : مُثبت نظريات آلي مفتوح المصدر وفعال لمشاكل القابلية للإشباع في النظريات (SMT).

يقوم الأمر التالي بتثبيت BARF على نظامك:

root@kitploit:~
$ sudo python setup.py install

يمكنك أيضًا تثبيته محليًا:

root@kitploit:~
$ sudo python setup.py install --user

ملاحظات

  • تحتاج إلى واحد فقط من حلول SMT ليعمل. يمكنك الاختيار بين Z3 و CVC4 أو تثبيت كليهما.
  • لتشغيل بعض الاختبارات، تحتاج إلى تثبيت PyAsmJIT أولاً: sudo pip install pyasmjit
  • قد تحتاج إلى تثبيت Graphviz: sudo apt-get install graphviz

بداية سريعة

هذا مثال بسيط يوضح كيفية فتح ملف ثنائي وطباعة كل تعليمة مع ترجمتها إلى اللغة الوسيطة (REIL).

root@kitploit:~
from barf import BARF

# Open binary file.
barf = BARF("examples/misc/samples/bin/branch4.x86")

# Print assembly instruction.
for addr, asm_instr, reil_instrs in barf.translate():
    print("{:#x} {}".format(addr, asm_instr))

    # Print REIL translation.
    for reil_instr in reil_instrs:
        print("\t{}".format(reil_instr))

يمكننا أيضًا استعادة CFG وحفظه في ملف .dot.

root@kitploit:~
# Recover CFG.
cfg = barf.recover_cfg()

# Save CFG to a .dot file.
cfg.save("branch4.x86_cfg")

يمكننا التحقق من القيود على الكود باستخدام حل SMT. على سبيل المثال، افترض أن لديك الكود التالي:

root@kitploit:~
 80483ed:       55                      push   ebp
 80483ee:       89 e5                   mov    ebp,esp
 80483f0:       83 ec 10                sub    esp,0x10
 80483f3:       8b 45 f8                mov    eax,DWORD PTR [ebp-0x8]
 80483f6:       8b 55 f4                mov    edx,DWORD PTR [ebp-0xc]
 80483f9:       01 d0                   add    eax,edx
 80483fb:       83 c0 05                add    eax,0x5
 80483fe:       89 45 fc                mov    DWORD PTR [ebp-0x4],eax
 8048401:       8b 45 fc                mov    eax,DWORD PTR [ebp-0x4]
 8048404:       c9                      leave
 8048405:       c3                      ret

وتريد معرفة القيم التي يجب تعيينها لمواقع الذاكرة ebp-0x4 و ebp-0x8 و ebp-0xc للحصول على قيمة محددة في مسجل eax بعد تنفيذ الكود.

أولاً، نضيف التعليمات إلى مكون المحلل.

root@kitploit:~
from barf import BARF

# Open ELF file
barf = BARF("examples/misc/samples/bin/constraint1.x86")

# Add instructions to analyze.
for addr, asm_instr, reil_instrs in barf.translate(0x80483ed, 0x8048401):
    for reil_instr in reil_instrs:
        barf.code_analyzer.add_instruction(reil_instr)

ثم، نقوم بتوليد تعبيرات لكل متغير مهم ونضيف القيود المطلوبة عليها.

root@kitploit:~
ebp = barf.code_analyzer.get_register_expr("ebp", mode="post")

# Preconditions: set range for variable a and b
a = barf.code_analyzer.get_memory_expr(ebp-0x8, 4, mode="pre")
b = barf.code_analyzer.get_memory_expr(ebp-0xc, 4, mode="pre")

for constr in [a >= 2, a <= 100, b >= 2, b <= 100]:
    barf.code_analyzer.add_constraint(constr)

# Postconditions: set desired value for the result
c = barf.code_analyzer.get_memory_expr(ebp-0x4, 4, mode="post")

for constr in [c >= 26, c <= 28]:
    barf.code_analyzer.add_constraint(constr)

أخيرًا، نتحقق مما إذا كان يمكن حل القيود التي وضعناها.

root@kitploit:~
if barf.code_analyzer.check() == 'sat':
    print("[+] Satisfiable! Possible assignments:")

    # Get concrete value for expressions
    a_val = barf.code_analyzer.get_expr_value(a)
    b_val = barf.code_analyzer.get_expr_value(b)
    c_val = barf.code_analyzer.get_expr_value(c)

    # Print values
    print("- a: {0:#010x} ({0})".format(a_val))
    print("- b: {0:#010x} ({0})".format(b_val))
    print("- c: {0:#010x} ({0})".format(c_val))

    assert a_val + b_val + 5 == c_val
else:
    print("[-] Unsatisfiable!")

يمكنك رؤية هذه الأمثلة والمزيد في دليل examples.

نظرة عامة

ينقسم الإطار إلى ثلاثة مكونات رئيسية: النواة و المعمارية و التحليل.

النواة

يحتوي هذا المكون على وحدات أساسية:

  • REIL: يوفر تعريفات للغة REIL. كما ينفذ محاكيًا و محللًا لغويًا.
  • SMT: يوفر وسائل للتفاعل مع حلي SMT Z3 و CVC4. كما يوفر وظائف لترجمة تعليمات REIL إلى تعبيرات SMT.
  • BI: وحدة الواجهة الثنائية مسؤولة عن تحميل الملفات الثنائية للمعالجة (تستخدم PEFile و PyELFTools).

المعمارية

كل معمارية مدعومة تُقدم كمكون فرعي يحتوي على الوحدات التالية:

  • Architecture: تصف المعمارية، أي المسجلات، حجم عنوان الذاكرة.
  • Translator: يوفر مترجمات إلى REIL لكل تعليمة مدعومة.
  • Disassembler: يوفر وظائف فك التجميع (يستخدم Capstone).
  • Parser: يحول التعليمة من سلسلة نصية إلى شكل كائن.

التحليل

يتكون هذا المكون حتى الآن من وحدات: رسم بياني لتدفق التحكم و رسم بياني للاستدعاءات و محلل الكود. الأولان يوفران وظائف لاستعادة CFG و CG على التوالي. الأخير هو واجهة عالية المستوى لوظائف حل SMT ذات الصلة.

الأدوات

BARFgadgets

BARFgadgets هو سكربت Python مبني على BARF يتيح لك البحث عن أدوات ROP داخل برنامج ثنائي وتصنيفها والتحقق منها. مرحلة البحث تجد جميع الأدوات المنتهية بـ ret و jmp و call داخل الثنائي. مرحلة التصنيف تصنف الأدوات التي تم العثور عليها سابقًا وفقًا للأنواع التالية:

  • No-Operation,
  • Move Register,
  • Load Constant,
  • Arithmetic/Logical Operation,
  • Load Memory,
  • Store Memory,
  • Arithmetic/Logical Load,
  • Arithmetic/Logical Store و
  • Undefined.

يتم ذلك من خلال محاكاة التعليمات. أخيرًا، تتكون مرحلة التحقق من استخدام حل SMT للتحقق من المعنى المخصص لكل أداة في المرحلة الثانية.

root@kitploit:~
usage: BARFgadgets [-h] [--version] [--bdepth BDEPTH] [--idepth IDEPTH] [-u]
                   [-c] [-v] [-o OUTPUT] [-t] [--sort {addr,depth}] [--color]
                   [--show-binary] [--show-classification] [--show-invalid]
                   [--summary SUMMARY] [-r {8,16,32,64}]
                   filename

Tool for finding, classifying and verifying ROP gadgets.

positional arguments:
  filename              Binary file name.

optional arguments:
  -h, --help            show this help message and exit
  --version             Display version.
  --bdepth BDEPTH       Gadget depth in number of bytes.
  --idepth IDEPTH       Gadget depth in number of instructions.
  -u, --unique          Remove duplicate gadgets (in all steps).
  -c, --classify        Run gadgets classification.
  -v, --verify          Run gadgets verification (includes classification).
  -o OUTPUT, --output OUTPUT
                        Save output to file.
  -t, --time            Print time of each processing step.
  --sort {addr,depth}   Sort gadgets by address or depth (number of
                        instructions) in ascending order.
  --color               Format gadgets with ANSI color sequences, for output
                        in a 256-color terminal or console.
  --show-binary         Show binary code for each gadget.
  --show-classification
                        Show classification for each gadget.
  --show-invalid        Show invalid gadget, i.e., gadgets that were
                        classified but did not pass the verification process.
  --summary SUMMARY     Save summary to file.
  -r {8,16,32,64}       Filter verified gadgets by operands register size.

لمزيد من المعلومات، انظر README.

BARFcfg

BARFcfg هو سكربت Python مبني على BARF يتيح لك استعادة رسم بياني لتدفق التحكم لبرنامج ثنائي.

root@kitploit:~
usage: BARFcfg [-h] [-s SYMBOL_FILE] [-f {txt,pdf,png,dot}] [-t]
               [-d OUTPUT_DIR] [-b] [--show-reil]
               [--immediate-format {hex,dec}] [-a | -r RECOVER]
               filename

Tool for recovering CFG of a binary.

positional arguments:
  filename              Binary file name.

optional arguments:
  -h, --help            show this help message and exit
  -s SYMBOL_FILE, --symbol-file SYMBOL_FILE
                        Load symbols from file.
  -f {txt,pdf,png,dot}, --format {txt,pdf,png,dot}
                        Output format.
  -t, --time            Print process time.
  -d OUTPUT_DIR, --output-dir OUTPUT_DIR
                        Output directory.
  -b, --brief           Brief output.
  --show-reil           Show REIL translation.
  --immediate-format {hex,dec}
                        Output format.
  -a, --recover-all     Recover all functions.
  -r RECOVER, --recover RECOVER
                        Recover specified functions by address (comma
                        separated).

BARFcg

BARFcg هو سكربت Python مبني على BARF يتيح لك استعادة رسم بياني للاستدعاءات لبرنامج ثنائي.

root@kitploit:~
usage: BARFcg [-h] [-s SYMBOL_FILE] [-f {pdf,png,dot}] [-t] [-a | -r RECOVER]
              filename

Tool for recovering CG of a binary.

positional arguments:
  filename              Binary file name.

optional arguments:
  -h, --help            show this help message and exit
  -s SYMBOL_FILE, --symbol-file SYMBOL_FILE
                        Load symbols from file.
  -f {pdf,png,dot}, --format {pdf,png,dot}
                        Output format.
  -t, --time            Print process time.
  -a, --recover-all     Recover all functions.
  -r RECOVER, --recover RECOVER
                        Recover specified functions by address (comma
                        separated).

PyAsmJIT

PyAsmJIT هي حزمة Python لتوليد وتنفيذ كود التجميع لـ x86_64/ARM.

تم تطوير هذه الحزمة لاختبار ترجمة تعليمات BARF من x86_64/ARM إلى REIL. الفكرة الرئيسية هي القدرة على تشغيل أجزاء من الكود بشكل أصلي. ثم تُترجم نفس القطعة إلى REIL وتُنفذ في آلة REIL افتراضية. أخيرًا، تُقارن السياقات النهائية (تلك التي تم الحصول عليها من التنفيذ الأصلي وتلك من المحاكاة) لمعرفة الاختلافات.

لمزيد من المعلومات، انظر PyAsmJIT.

الترخيص

رخصة BSD ثنائية البنود. لمزيد من المعلومات، انظر LICENSE.

تنزيل الأداة