مكتبة متعددة النظم لقراءة وتعديل ذاكرة البرامج وخصوصا "الإحتيال" في الألعاب
للهندسة العكسية يوجد scriptable debuggers مثل IDA و ImmunityDbg ذات إنتاجية أكبر بكثير من إستخدم python repl.
الفائدة التي أراها من قراءة الذاكرة بصفة دورية في برنامج منفصل هي لتنفيذ ردود فعل على حسب الحالة (= تلاعب في الألعاب).
الهدف من المكتبة ليس فقط القراءة والكتابة ولكن التعامل مع الـvirtual address spaces عامة على نظم مختلفة. لذلك المشروع لا يحتاج لأي مكتبات خارجية أو برامج عدا مترجم معياري للسي/سي++.
وقت الـconfiguration يتم إختبار النظام للوقوف على الـbackend المناسبة (مثلا على بعض الـBSDs يستخدم ptrace على البعض الأخر procfs. على لينكس حديثة vm_process، على القديم procfs ...إلخ) ويمكنك إختيارهم يدويا كذلك.
ويتم توفير دوال تستخدم إمكانيات خاصة للنظام. مثلا على linux vas_poll تستخدم vas_read. أما على Mach يمكنك الطلب من النواه اتاحة نفس الـmemory page في عدة برامج (remapping) ويوفر ذلك وقت لا بأس به لأن قراءة الذاكرة تتم مباشرة دون الرجوع للنواه ودون TLB flush (في المرات التالية).
للـremapping في نفس البرنامج فوائد كذلك. يمكنك نسخ الذاكرة بـCopy-on-Write semantics. ويكون لديك عنوانين وهميين لكن نفس العنوان الفيزيائي في الذاكرة. يوجد لذلك دالة vas_dup_cow.
يسهل ذلك عمل ring buffers. بدلا من تضييع جزء من الوقت في إختبار إذا ما كنت داخل حدود الـbuffer يمكنك حجز page ثم remapـها بعدها مباشرة وبذلك لا تحتاج لبرمجة الـwrap-around أساسا. يتم كل ذلك في الذاكرة. هذا الموضوع مفيد خصوصا في الـdigital signal processing. يوجد لذلك vas_ringbuf.
يمكنك أن تـmemory map الملفات مباشرة في الذاكرة. يوجد vas_fmap لذلك.
في المستقبل سيتم إضافة إمكانية التعامل مع الـaccess violations الناتجة عن الكتابة الخاطئة، قراءة وتعديل صلاحيات الـpages (مثلا لإنشاء guard pages).
لما Perl؟ لأنها لغة الـscripting التي استخدمها. رغم أني لا إستخدم الـPerl wrapper شخصيا إلا أن وجوده يسمح باختباره مع المكتبة على أجهزة المشتركين في CPAN testers. كل إصدار من المكتبة يتم تجريبه واختباره على عدة مئات من الأجهزة المختلفة للوقوف على المشاكل. ضف إلى ذلك أن كتابة الإختبارات في Perl أكثر سلاسة وأني لا استلطف البايثون.
هل تحب الشروع في كتابة Python Wrapper؟ ;)
التعليقات