
Llef (وضوحا ɬɛf - "Hlyeff") هو مكون إضافي LLDB لجعله أكثر قابلية للاستخدام في RE و VR منخفضة المستوى. على غرار GEF ، ولكن ل LLDB.
يستخدم API Python API من LLDB لإضافة إخراج الحالة الإضافي وعدد قليل من الأوامر الجديدة ، بحيث يمكن للباحثين الأمنية استخدام LLDB بسهولة أكبر لتحليل البرامج أثناء تشغيله.
ستقوم الإرشادات أدناه بتثبيت LLEF بحيث يتم استخدامها بواسطة LLDB افتراضيًا.
cd <repo>./install.sh~/.lldbinit ) أو التثبيت اليدوي.يستخدم LLDB بناء جملة AT&T التفكيك للثنائيات X86 افتراضيًا. يوفر المثبت خيارًا لتجاوز هذا.
lldb-15 < optional binary to debug >أوامر مختلفة لإعداد أوامر LLEF محددة:
(lldb) llefsettings --help
list list all settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF settings
يتم تخزين الإعدادات في ملف .llef llef الموجودة في الدليل المنزلي الخاص بك تم تنسيقه على النحو التالي:
[LLEF]
<llefsettings> = <value>
| جلسة | يكتب | وصف |
|---|---|---|
| color_output | منطقية | تمكين/تعطيل إخراج محطة اللون |
| register_coloring | منطقية | تمكين/تعطيل التلوين السجل |
| show_legend | منطقية | تمكين/تعطيل إخراج الأسطورة |
| show_regiters | منطقية | تمكين/تعطيل السجلات الإخراج |
| show_stack | منطقية | تمكين/تعطيل الإخراج المكدس |
| show_code | منطقية | تمكين/تعطيل إخراج الكود |
| show_threads | منطقية | تمكين/تعطيل الإخراج المواضيع |
| show_trace | منطقية | تمكين/تعطيل الناتج التتبع |
| force_arch | خيط | هندسة عرض سجل القوة (التجريبية) |
| rebase_addresses | منطقية | تمكين/تعطيل إخراج Rebase العنوان |
| rebase_offset | int | اضبط إزاحة Rebase (الافتراضي 0x100000) |
| show_all_registers | منطقية | تمكين/تعطيل إخراج السجل الموسع |
يسمح بإعداد ألوان واجهة المستخدم الرسومية Llef:
(lldb) llefcolorsettings --help
list list all color settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF color settings
الألوان المدعومة: الأزرق ، الأخضر ، الأصفر ، الأحمر ، الوردي ، السماوي ، الرمادي
| لون |
|---|
| register_color |
| modified_register_color |
| code_color |
| heap_color |
| Stack_Color |
| String_Color |
| stack_address_color |
| function_name_color |
| تعليمات _color |
| تسليط الضوء على _instruction_color |
| line_color |
| Rebased_address_color |
| section_header_color |
| تسليط الضوء على _index_color |
| index_color |
| dereferend_value_color |
| dereferend_register_color |
| Frame_argument_name_color |
| read_memory_address_color |
عرض محتويات الذاكرة مع:
(lldb) hexdump type address [--size SIZE] [--reverse]
على سبيل المثال
(lldb) hexdump byte 0x7fffffffecc8 --size 0x38
0x7fffffffecc8 3d 2f 75 73 72 2f 6c 6f 63 61 6c 2f 73 62 69 6e =/usr/local/sbin
0x7fffffffecd8 3a 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e 3a :/usr/local/bin:
0x7fffffffece8 2f 75 73 72 2f 73 62 69 6e 3a 2f 75 73 72 2f 62 /usr/sbin:/usr/b
0x7fffffffecf8 69 6e 3a 2f 73 62 69 6e in:/sbin
(lldb) hexdump word 0x7fffffffecc8 --reverse
0x7fffffffece6│+001e: 0x4654
0x7fffffffece4│+001c: 0x4361
0x7fffffffece2│+001a: 0x746f
0x7fffffffece0│+0018: 0x4e23
0x7fffffffecde│+0016: 0x3f73
0x7fffffffecdc│+0014: 0x6968
0x7fffffffecda│+0012: 0x742d
0x7fffffffecd8│+0010: 0x6564
0x7fffffffecd6│+000e: 0x6f63
0x7fffffffecd4│+000c: 0x6564
0x7fffffffecd2│+000a: 0x2d75
0x7fffffffecd0│+0008: 0x6f79
0x7fffffffecce│+0006: 0x2d64
0x7fffffffeccc│+0004: 0x6964
0x7fffffffecca│+0002: 0x2d79
0x7fffffffecc8│+0000: 0x6857
تحديث واجهة المستخدم الرسومية Llef مع:
(lldb) context
تحديث مكونات LLEF GUI مع:
(lldb) context [{registers,stack,code,threads,trace,all} ...]
(lldb) pattern create 10
[+] Generating a pattern of 10 bytes (n=4)
aaaabaaaca
[+] Pattern saved in variable: $8
(lldb) pattern create 100 -n 2
[+] Generating a pattern of 100 bytes (n=2)
aabacadaea
[+] Pattern saved in variable: $9
(lldb) pattern search $rdx
[+] Found in $10 at index 45 (big endian)
(lldb) pattern search $8
[+] Found in $10 at index 0 (little endian)
(lldb) pattern search aaaabaaac
[+] Found in $8 at index 0 (little endian)
(lldb) pattern search 0x61616161626161616361
[+] Found in $8 at index 0 (little endian)
هذا أوتوماتيكي ويطبع جميع المعلومات التي تم تنفيذها حاليًا عند نقطة الاستراحة.
قابلة للتكوين مع rebase_addresses إعداد ميزة إعادة Rebasing العنوان تؤدي بحثًا عن كل عنوان رمز معروض في الإخراج لعرض العنوان الثنائي والنسبي المرتبط به. يتم تعويض هذا العنوان النسبي بالقيمة المحددة في إعداد rebase_offset الذي يعرض الافتراضي لعنوان قاعدة Ghidra من 0x100000 . والنتيجة هي إخراج العنوان الذي يمكن نسخه بسهولة ولصقه في ميزة "Go to address" IDE دون الحاجة إلى القيام بالرياضيات للتحويل من عنوان وقت التشغيل.
تظهر العناوين المُرثقة بين قوسين بعد عنوان وقت التشغيل: 
يأتي LLDB مع وحدات Python المطلوبة لـ LLEF لتشغيلها. إذا كنت عند إطلاق LLDB مع LLEF ، فستواجه رسائل ModuleNotFoundError ، فمن المحتمل أن تحتاج إلى إضافة وحدات LLDB Python يدويًا على مسار Python الخاص بك.
للقيام بذلك ، قم بتشغيل ما يلي لإنشاء موقع حزم موقعك:
python3 -m site --user-site ثم حدد موقع وحدات LLDB Python. هذا عادة في موقع مثل /usr/lib/llvm-15/lib/python3.10/dist-packages ولكنه يعتمد على إصدار Python الخاص بك.
أخيرًا ، قم بتعديل وتنفيذ ما يلي لإضافة مسار وحدة LLDB أعلاه إلى ملف جديد lldb.pth في موقع حزم الموقع المكتشفة أعلاه.
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth وقد لوحظ أن تقديم خرج LLEF في كل نقطة توقف بطيئة على بعض المنصات. تم تتبع السبب الجذري لهذا إلى استدعاء API GetMemoryRegions LLDB. لحسن الحظ ، يتم استخدام هذا فقط لتحديد ما إذا كانت قيم التسجيل تشير إلى عناوين الكود أو المكدس أو الكومة.
لتعطيل تسجيل التلوين ، ومن المحتمل أن يحسن أداء LLEF بشكل كبير ، قم بتعطيل ميزة register_coloring باستخدام أمر llefsettings التالي.
llefsettings set register_coloring False
من الواضح أننا نقف على أكتاف العمالقة هنا - نود أن نضغط على Hugsy لـ GEF على وجه الخصوص ، والتي تستخلص منها هذه الأداة الإلهام الشديد ! يرجى النظر في هذا التقليد على أنه إطراء؟
إذا كنت ترغب في قراءة المزيد عن LLEF ، فيمكنك زيارة منشور مدونة الإطلاق.