حالة الموضوع:
مغلق
  1. .:: RSS ::.

    .:: RSS ::. عضوية آلية

    الأنتساب:
    ‏9 سبتمبر 2011
    المشاركات:
    14,005
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    36
    الإقامة:
    IQ-T34M
    بسم الله الرحمن الرحيم::

    السلام عليكم ورحمة الله وبركاته::

    كيف الحال أعضاء ومشرفي وإدارة بيت الهكر إن شاء الله في أتم الصحه والعافية..

    اليوم يا شباب في عندنا مقاله عن أدوات الهندسه العكسية على اللينكس قرأتها من أحد الكتب الموجوده لدي لأني حاولت أدور على النت عن أي مقال لكن للأسف لم أحصل على مثل هذا المقال إلا بداخل الكتاب
    والكتاب باللغه الإنجليزية فترجمت الكتاب حسب ما أعرف والله أعلم وأعذروني على أي تقصير::


    بسم الله نبدأ::

    يشرح هذا المقال حول الأدوات والأوامر التي يمكن استخدامها لعكس مهندس للتنفيذ في بيئة لينكس.


    تعريف بسيط::


    الهندسة العكسية هي فعل معرفة ما يفعل البرمجيات، التي لا يوجد بها شفرة المصدر المتاح.
    قد لا تعطيك الهندسة العكسية التفاصيل الدقيقه للبرنامج. ولكن هل يمكن أن نفهم جيدا حول كيفية تم تنفيذ البرنامج؟

    الهندسة العكسية ينطوي على الخطوات الأساسية الثلاثة التالية:

    **** 1- جمع معلومات
    **** 2- تحديد سلوك البرنامج
    ****3- اعتراض المكالمات المكتبية

    I. جمع معلومات:

    الخطوة الأولى: هي جمع المعلومات عن البرنامج والهدف هو ما يفعل. على سبيل المثال، فإننا سوف تأخذ الأمر 'who'. الأمر 'who' يطبع قائمة حاليا في تسجيل المستخدمين.
    1. سلاسل القيادة:

    كود PHP:
    # strings /usr/bin/who


    * بعض السلاسل الهامه:

    كود PHP:
    users=%lu
    EXIT
    COMMENT
    IDLE
    TIME
    LINE
    NAME
    /dev/
    /var/
    log/wtmp
    /var/run/utmp
    /usr/share/locale
    Michael Stone
    David MacKenzie
    Joseph Arceneaux


    ما نستخرجه من السابق بأنه يمكننا أن نعرف أن 'Who' يستخدم حوالي 3 ملفات وهي:
    (/var/log/wtmp, /var/log/utmp, /usr/share/locale).

    ولقراءة المزيد في أمثلة لينكس لقيادة السلاسل:

    http://www.thegeekstuff.com/2010/11/...mand-examples/

    2. نانومتر القيادة - nm Command:

    الأمر نانومتر، ويستخدم لسرد الرموز من برنامج الهدف. باستخدام نانومتر، يمكننا التعرف على الوظائف المحلية ومكتبة وكذلك المتغيرات العالمية المستخدمة. نانومتر لا تعمل على البرنامج الذي هو مخطط باستخدام الأمر 'strip'.


    ملاحظة: افتراضيا يتم تجريد الأمر 'Who'. على سبيل المثال، أنا جمعت الأمر 'Who' مرة أخرى.

    كود PHP:
    # nm /usr/bin/who


    وهذه القائمة لبعض الرموز:

    كود PHP:
    08049110 t print_line
    08049320 t time_string
    08049390 t print_user
    08049820 t make_id_equals_comment
    080498b0 t who
    0804a170 T usage
    0804a4e0 T main
    0804a900 T set_program_name
    08051ddc b need_runlevel
    08051ddd b need_users
    08051dde b my_line_only
    08051de0 b time_format
    08051de4 b time_format_width
    08051de8 B program_name
    08051d24 D Version
    08051d28 D exit_failure


    ما فعلناه مسبقاً:

    t|T – الرمز موجود في المقطع نصف رمز.
    b|B – الرمز هو في قسم تهيئة البيانات UN-.
    D|d – الرمز هو في تهيئة قسم البيانات.

    - رأس المال أو حرف صغير، يحدد ما إذا كان الرمز المحلي أو العالمي.

    من الإخراج السابق يمكننا أن نعرف ما يلي:

    - المهام العالمية وهي (main,set_program_name,usage,etc..)
    - بعض الوظائف المحليه وهي (print_user,time_string etc..)
    - فقدان المهارات العالمية للتهيئة وهي (Version,exit_failure)
    - يحتوي على متغيرات التهيئة U-N وهي (time_format, time_format_width, etc..)

    * في بعض الأحيان، باستخدام الأسماء الوظيفية يمكننا تخمين ما سوف تفعل الوظائف.

    اقرأ المزيد: 10 نانومتر عملية القيادة لينكس أمثلة

    - الأوامر الأخرى التي يمكن استخدامها للحصول على المعلومات هي:

    - الأمر (* LDD)
    - الأمر ( fuser)
    - الأمر (lsof)
    - ملف النظام بروك ( proc file system)


    * تحديد سلوك البرنامج:

    - القيادة strace :


    يتم تتبع المكالمات إلى وظيفة المكتبة. وينفذ البرنامج في هذه العملية كالتالي:

    كود PHP:
    # ltrace /usr/bin/who




    - يظهر الإخراج أدناه:


    كود PHP:
    utmpxname(0x8050c6c, 0xb77068f8, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0
    setutxent
    (0x8050c6c, 0xb77068f8, 0, 0xbfc5cdc0, 0xbfc5cd78) = 1
    getutxent
    (0x8050c6c, 0xb77068f8, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    realloc
    (NULL, 384) = 0x09ed59e8
    getutxent
    (0, 384, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    realloc
    (0x09ed59e8, 768) = 0x09ed59e8
    getutxent
    (0x9ed59e8, 768, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    realloc
    (0x09ed59e8, 1152) = 0x09ed59e8
    getutxent
    (0x9ed59e8, 1152, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    realloc
    (0x09ed59e8, 1920) = 0x09ed59e8
    getutxent
    (0x9ed59e8, 1920, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    getutxent
    (0x9ed59e8, 1920, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    realloc
    (0x09ed59e8, 3072) = 0x09ed59e8
    getutxent
    (0x9ed59e8, 3072, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    getutxent
    (0x9ed59e8, 3072, 0, 0xbfc5cdc0, 0xbfc5cd78) = 0x9ed5860
    getutxent
    (0x9ed59e8, 3072, 0, 0xbfc5cdc0, 0xbfc5cd78)


    - يمكنك ملاحظة أن هناك مجموعة من الدعوات لــ getutxent وأسرتها من وظيفة المكتبة. يمكنك أيضا أن نلاحظ ltrace يعطي نتائج في النظام تسمى الدالات في البرنامج.

    الآن نحن نعرف أن الأمر 'Who' يعمل عن طريق استدعاء getutxent وأسرتها من الوظيفة للحصول على تسجيل المستخدمين المسجلين.
    4- القيادة في الكوماند:

    يستخدم الأمر strace لتتبع نظام يدعو إلى تقدم البرنامج. إذا كان البرنامج لا يستخدم أي وظيفة من المكتبة، ويستخدم استدعاءات النظام فقط، ثم باستخدام ltrace العادي، لا يمكننا تتبع تنفيذ البرنامج.

    كود PHP:
    # strace /usr/bin/who


    كود PHP:
    [b76e7424] brk(0x887d000) = 0x887d000
    [b76e7424] access("/var/run/utmpx", F_OK) = -1 ENOENT (No such file or directory)
    [
    b76e7424] open("/var/run/utmp", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
    .
    .
    .
    [
    b76e7424] fcntl64(3, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=0, len=0}) = 0
    [b76e7424] read(3, "\10\325"..., 384) = 384
    [b76e7424] fcntl64(3, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0


    - يمكنك ملاحظة أن كل ما يسمى دالة malloc، فإنه يدعو BRK () استدعاء النظام. وظيفة المكتبة.
    - getutxent يدعو فعلا 'open' استدعاء نظام لفتح ‘/var/run/utmp’ وانها وضعت لتأمين قراءة وقراءة محتويات ثم تحرر التأمين.

    والمؤكد الآن أمر Who هو قراءة لملف utmp لعرض الناتج.

    كل من 'strace' و 'ltrace' لديها مجموعة من الخيارات الجيدة التي يمكن استخدامها.

    -p pid – علقها على PID المحدد. إذا كان البرنامج مفيدا بالفعل قيد التشغيل وكنت تريد أن تعرف سلوكها.
    -n 2 – المسافة البادئة لكل مكالمة متداخلة بنسبة 2 مسافات.
    **** -F - اتبع الشوكة.

    اقرأ المزيد: 7 أمثلة لتصحيح Strace في تنفيذ برنامج في لينكس

    - إعتراض المكالمات المكتوبة:
    5. LD_PRELOAD وLD_LIBRARY_PATH

    LD_PRELOAD يسمح لنا لإضافة مكتبة إلى التنفيذ خاصة للبرنامج. فإن وظيفة الكتابة في هذه المكتبة وظيفة المكتبة الفعلية.


    ملاحظة: نحن لا نستطيع استخدام هذه البرامج مع مجموعة مع قليلة من 'SUID'.

    دعونا نرى البرنامج التالي:

    كود PHP:
    #include
    int main() {
    char str1[]="TGS";
    char str2[]="tgs";
    if(
    strcmp(str1,str2)) {
    printf("String are not matched\n");
    }
    else {
    printf("Strings are matched\n");
    }
    }




    - جمع وتنفيذ البرامج:


    كود PHP:
    # cc -o my_prg my_prg.c
    # ./my_prg


    - سيتم طباعة "لا مطابقة سلاسل".

    الآن سوف نكتب مكتبتنا الخاصة وسوف نرى كيف يمكننا اعتراض وظيفة المكتبة.

    كود PHP:
    #include
    int strcmp(const char *s1, const char *s2) {
    // Always return 0.
    return 0;
    }


    - تجميع وتعيين متغير LD_LIBRARY_PATH إلى الدليل الحالي.

    كود PHP:
    # cc -o mylibrary.so -shared library.c -ldl
    # LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH


    - والآن يتم إنشاء ملف اسمه 'library.so'.
    تعيين متغير LD_PRELOAD إلى هذا الملف وتنفيذ برنامج مقارنة سلسلة.

    كود PHP:
    # LD_PRELOAD=mylibrary.so ./my_prg




    - والآن أصبحت طباعة "تتم مطابقة سلاسل 'لأنه يستخدم نسختنا ووظيفة strcmp.


    ملاحظة:
    إذا كنت ترغب في اعتراض أي وظيفة من المكتبة، ثم والوظيفة الخاصة بك في المكتبة يجب أن يكون نفس النموذج والوظيفي للمكتبة الأصلية.

    - لقد غطينا فقط الأشياء الأساسية جدا والتي تحتاج إلى مهندس برنامج في الهندسة العكسية.

    - أما بالنسبة لأولئك الذين يرغبون في اتخاذ الخطوة التالية في الهندسة العكسية، فعليهم فهم تنسيق ملف ELF وتجميع برنامج اللغة تساعد إلى حد كبير...


    ======================​

    تم بحمد الله ....


    أتمنى أن أكون قد وفقت في نقل الفكره ولو بشيء بسيط إلى الأخوه الأعضاء وزملائي في بيت الهكر::


    ملاحظة:


    - كما ذكرت سابقاً فقد قمت بترجمة هاذي المقالة على حسب ما عندي من خبره في اللغة الإنجليزية..
    - لمن أراد هذه المقالة فقد قمت أيضاً بنقلها باللغة الإنجليزية كما وردت من الكتاب ووضعتها في ملف وورد في المرفقات ^^


    ============

    تقبلوآ خآلص تحيتي::
    أخوكم / HACKINYEMEN



    الملفات المرفقة [​IMG] Reverse Engineering Tools in Linux.zip‏ (10.6 كيلوبايت)
     
حالة الموضوع:
مغلق

مشاركة هذه الصفحة