• أهلا وسهلاً بكم في :: IQ-TeaM FORUM :: .
    إذا كانت هذه الزيارة الأولى أو لديك الرغبة بالانضمام لأعضاء شبكة عراق تيم فيجب الاطلاع على خصوصية الشبكه فربما بقائك زائر افضل لك من الانضمام بحيث أن قوانين شبكة عراق تيم لا تتناسب مع اهتماماتك .
    • للأطلاع على الخصوصية وسياسة الاستخدام - التفاصيل
    • بعد الاطلاع على سياسة الموقع وقوانين شبكة عراق تيم يمكنك التسجيل معنا - تسجيل عضو جديد
  • بادئ الموضوع .:: RSS ::.
  • تاريخ البدء
الحالة
مغلق و غير مفتوح للمزيد من الردود.
غير متصل

.:: RSS ::.

عضوية آلية

إنضم
9 سبتمبر 2011
المشاركات
13,987
الإعجابات
0
النقاط
250
العمر
30
الإقامة
IQ-T34M
الإجابات المقدمة: 0
#1
بسم الله الرحمن الرحيم::

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

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

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


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

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


تعريف بسيط::


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

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

**** 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).

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

الروابط تضهر للاعضاء فقط سجل دخولك أو قم بالتسجيل الآن.


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..)

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

الروابط تضهر للاعضاء فقط سجل دخولك أو قم بالتسجيل الآن.


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

- الأمر (* 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 - اتبع الشوكة.

الروابط تضهر للاعضاء فقط سجل دخولك أو قم بالتسجيل الآن.


- إعتراض المكالمات المكتوبة:
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



الملفات المرفقة
الروابط تضهر للاعضاء فقط سجل دخولك أو قم بالتسجيل الآن.
(10.6 كيلوبايت)
 


الحالة
مغلق و غير مفتوح للمزيد من الردود.
شرح الهندسة العكسية تحت بيئة للينكس - سلاسل، نانومتر، ltrace، strace...