أداة ltrace (اختصار لـ Library Call Trace) هي أداة سطر أوامر ممتازة ومخصصة لإجراء التحليل الديناميكي (Dynamic Analysis) على أنظمة Linux. إذا كانت أداة strace تقف عند حدود نظام التشغيل لتراقب نداءات النظام موجهة إلى النواة، فإن ltrace متخصصة في مراقبة وتتبع النداءات التي يوجهها البرنامج للمكتبات المشتركة (Shared Libraries)، مثل مكتبة لغة السي الأساسية (libc).

عند تشغيل برنامج ما، فإنه نادراً ما يقوم بكل شيء بنفسه؛ بل يعتمد على دوال جاهزة داخل النظام مثل دالة الطباعة printf أو دالة المقارنة strcmp أو دالة حجز الذاكرة malloc. أداة ltrace تتيح لك رؤية هذه الدوال وهي تُستدعى في الوقت الفعلي (Real-time)، ورؤية المدخلات والمخرجات الخاصة بكل دالة.

كيف تعمل أداة ltrace تحت الغطاء؟

البرامج التي يتم تجميعها بشكل ديناميكي (Dynamically Linked Binaries) لا تحتوي على كود الدوال الخاصة بالمكتبات المشتركة بداخلها، بل تبحث عنها داخل النظام أثناء التشغيل عبر جدول يسمى جدول الربط الإجرائي (Procedure Linkage Table - PLT).

عندما تقوم بتشغيل البرنامج باستخدام ltrace:

  1. تقوم الأداة باستخدام نداء النظام الشهير ptrace للتحكم في البرنامج المستهدف وتتبعه.
  2. تضع الأداة نقاط توقف مؤقتة (Breakpoints) عند العناوين الخاصة بالدوال داخل جدول الـ PLT.
  3. في كل مرة يحاول البرنامج استدعاء دالة خارجية (مثل strlen)، يتوقف البرنامج وتلتقط ltrace اسم الدالة والمعاملات (Arguments) المرسلة إليها والقيمة المسترجعة (Return Value)، ثم تطبعها لك على الشاشة وتسمح للبرنامج بمتابعة العمل.

لماذا تعتبر الأداة جوهرية في تحديات الـ CTF واختبار الاختراملاحظات ونصائح هامة للمستقبل (Notes & Tips)ق؟

في كثير من الأحيان، يقوم مبرمجو التحديات أو البرامج البسيطة بكتابة كود يتحقق من كلمة المرور عبر دالة مقارنة نصوص عادية. استخدام ltrace هنا يعتبر بمثابة "غش قانوني" لأنها تكشف لك البيانات بالخط الواضح:

أشهر خيارات ومعاملات الأداة (Command Flags)

لتطويع مخرجات الأداة وجعلها أكثر فائدة، يمكنك استخدام الخيارات التالية (دون تنسيقها في جداول):

أمثلة عملية (Practical Examples)