أداة 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:
ptrace للتحكم في البرنامج المستهدف وتتبعه.strlen)، يتوقف البرنامج وتلتقط ltrace اسم الدالة والمعاملات (Arguments) المرسلة إليها والقيمة المسترجعة (Return Value)، ثم تطبعها لك على الشاشة وتسمح للبرنامج بمتابعة العمل.في كثير من الأحيان، يقوم مبرمجو التحديات أو البرامج البسيطة بكتابة كود يتحقق من كلمة المرور عبر دالة مقارنة نصوص عادية. استخدام ltrace هنا يعتبر بمثابة "غش قانوني" لأنها تكشف لك البيانات بالخط الواضح:
strcmp أو strncmp أو memcmp؛ فإن ltrace ستعرض لك الدالة وتوضح لك المتغير الأول (الذي أدخلته أنت) والمتغير الثاني (وهي كلمة المرور الصحيحة التي تبحث عنها)!getenv والملفات التي يحاول التعامل معها عبر fopen.لتطويع مخرجات الأداة وجعلها أكثر فائدة، يمكنك استخدام الخيارات التالية (دون تنسيقها في جداول):
ltrace -e <filter> <program>
خيار التصفية (Filter). إذا كانت المخرجات مليئة بالسطور وتريد التركيز على دوال معينة فقط (مثل دالة المقارنة)، يمكنك تحديدها.
مثال: ltrace -e strcmp ./vulnerable_binary
ltrace -s <size> <program>
لتحديد الحد الأقصى لطول النصوص (String Size) التي يتم طباعتها. بشكل افتراضي، تطبع الأداة أول 32 حرفاً فقط من النص، وإذا كان النص طويلًا (مثل مفتاح تشفير أو علم CTF طويل) فستقطعه الأداة. باستخدام هذا الخيار يمكنك تكبير الحجم لترى النص كاملاً.
مثال: ltrace -s 128 ./target_bin
ltrace -S <program>
خيار الدمج. يطلب من الأداة طباعة نداءات المكتبات (Library Calls) ونداءات النظام (System Calls) معاً في نفس الوقت، مما يغنيك عن تشغيل strace بشكل منفصل.
ltrace -i <program>
لطباعة مؤشر التعليمات البرمجية (Instruction Pointer) أو عنوان الذاكرة الذي تم استدعاء الدالة منه، وهو أمر مفيد جداً إذا كنت تريد الانتقال لاحقاً لأداة مثل Ghidra أو objdump والذهاب لذلك العنوان تحديداً.
الاستخدام الأساسي لالتقاط كلمة مرور:
افترض أن لديك تحدي يطلب كلمة مرور، يمكنك تشغيله هكذا:
ltrace ./crackme
عندما يطلب منك البرنامج الإدخال، اكتب أي شيء (مثلاً 12345) واضغط Enter. ستجد في مخرجات الأداة سطراً يشبه هذا:
strcmp("12345", "SuperSecretPassword") = -1
هنا تخبرك الأداة مباشرة أن البرنامج قارن مدخلك 12345 بالكلمة الحقيقية المخفية وهي SuperSecretPassword.