JAAS

نبش الأكواد من الملفات التنفيذية EXE

12 ردود في هذا الموضوع

السلام عليكم ورحمة الله ,,,

في مثالنا اليوم سنتعرف على كيفية إستخراج الأوامر من الملف التنفيذي , وسنتعرف

على طريقة إستخدام الدوال بداخل البرامج ,,,

مثال : هل شاهدت برنامج تنفيذي يحتوي على زر أمر وعند الضغط علية فإنة يقوم بعمل ما ؟!

مثلا فتح السيدي ,, إظهار نافذة معينة , إغلاق الجهاز , إظهار معلومة معينة ,, والكثير..

هل تريد معرفة الكود أو فكرة الكود المكتوب بداخل هذا الأمر ؟!

هل تريد إحتراف النبش في أكواد الملف التنفيذي ؟!

في الملف المرفق ستجد ملف تنفيذي , وهو الملف الذي سنطبق علية الدرس

وستجد أيضاً ملف مضغوط آخر بالإسم Scode هذا الملف يحتوي على الشفرة

المصدرية للملف التنفيذي لكي نقارن بين ماحصلنا علية بالبرمجة العكسية , وبين الكود الأصلي

نبدأ في الموضوع :

شغل الملف التنفيذي , وجرب الأوامر الموجودة في النافذة , وبعد ذلك أغلق البرنامج

ثم قم بإخراج الملف التنفيذي من الملف المضغوط إلى أي مجلد ,

شغل برنامج olly ومن قائمة file ثم Open , تجول في الجهاز وإختر الملف التنفيذي

وبعد أن ينتهي olly من فك التجميع شغل البرنامج المراقب عن طريق المفتاح F9

والآن سنقوم بطريقة جديدة في إستخراج الأوامر , لم تكن موضحة في الأمثلة السابقة ,

بعد أن ترى نافذة البرنامج المراقب قد ظهرت , إرجع إلى olly وإضغط على حرف W

أو من قائمة View ثم Windows

ستظهر لك نافذة جديدة تحتوي على أسماء الأوامر والنوافذ الموجودة في البرنامج , بهذا الشكل

AAwin.gif

والآن إختر النافذة الأولى وهي النافذة الرئيسية , ثم إضغط على الزر الأيمن للماوس

ستظهر لك قائمة إختر الأمر الخامس Message breakpoint on Classproc

ستظهر لك نافذة لإختيار نقطة توقف على رسائل النظام , بهذا الشكل

BBpwin.gif

بالتأكيد فإننا سنقوم بإختيار الرسالة WM _COMMAND ورقمها 111

وتعني نقطة توقف على أي زر أمر في البرنامج , وتستطيع أن تراقب أي رسالة في النظام

المهم بعد تحديد الرسالة , إضغط على زر OK , لتعود إلى قائمة النوافذ

ستلاحظ تغير لون عنوان النافذة الأولى إلى اللون الوردي , بهذا الشكل

CCwcl.gif

والآن إرجع إلى نافذة البرنامج المراقب , ثم إضغط على أول أمر CMD 01

هذا الأمر يقوم بعرض حافظة الشاشة الموقتة

وعند الضغط علية ستلاحظ توقف التنفيذ عند العنوان address 004010E0

هذا العنوان يمثل عنوان بداية دالة معالجة الرسائل للنافذة الرئيسية ,

DDint.gif

عرفنا بداية ونهاية الكود للأمر CMD 1 من خلال switch و case وهذة أوامر مقارنة

يعرفها المبرمجين , وإذا كنت لا تعرفها , الحل بسيط عن طريق مفتاح F8

بمجرد إستمرار الضغط ستجد أن البرنامج يقارن الأوامر ثم ينفذ CMD 1 وينتقل التنفيذ

بعد أن حددنا كود الأمر الأول بقي أن نحدد طريقة إستخدام الدوال ,, والطريقة أسهل

في البداية نجد بأنة في كود الأمر CMD 1 إستخدم دالتين , كما هو موضح في الصورة

والدالتين هما : SendMessage و GetActiveWindow

وتلاحظ بأن برنامج olly يبين لك من خلال الخطوط بأن دالة مستخدمة داخل دالة أخرى

ويبين لك بارمترات الدالة SendMessage , بهذا التخطيط

ملاحظة الدالة sendmessage لها أربع بارمترات , وفي لغة الإسمبلي تكتب بالعكس

لاحظ الكود الموضح في الصورة :

0040112B :PUSH 0                               البارمتر الرابع // =0   or = NULL
0040112D :PUSH 0F140                    البارمتر الثالث  // =0x0F140
…………..
0040113B :PUSH 112             الثاني   //=112 or = WM_SYSCOMMAND
00401140  :CALL GetActiveWindow
00401146  :PUSH EAX                    البارمتر الأول      // hWnd   //
00401147  :CALL  SendMessageA

لو فتحت الكود المصدري للبرنامج لوجدت أن كود الأمر بلغة السي هو

SendMessage(GetActiveWindow(),WM_SYSCOMMAND,SC_SCREENSAVE,NULL);

وإذا كتبت الكود الموضح بالأرقام كما هو موضح في olly فإن الأمر لن يختلف

لأن المترجم في النهاية يكتب الأرقام , مثال نفس الكود يمكن أن يكتب بلغة السي :

SendMessage(GetActiveWindow(),0x112,x0F140,0x0);

ويمكن أن يكتب نفس الكود حتى في برامج الفيجول بيسك , مع ملاحظة تغيير الرمز

للأرقام الهكس , مثلا الرقم 0x112 يكتب في الفيجول بيسك 112h

وتستطيع إيجاد البارمترات مرتبة وجاهزة عن طريق المكدس ؟!

إستمر في الضغط على F8 إلى أن تصل إلى العنوان address 00401147

وهو أمر الإستدعاء للدالة sendmessageA وبعد أن يصل التنفيذ إلى هذا العنوان

فقط إطلع على قسم المكدس , وهو القسم الموضح في النافذة اليمنى في الأسفل

لتجد البارمترات مرتبة كما كتبت في الكود المصدري

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

وهذة الطريقة تعتبر من أهم الفوائد في البرمجة العكسية ( معرفة أكواد البرامج )

-----------------------

لو قمت بإكمال إستخراج الأكواد لبقية الأوامر , سيصادفك شكل آخر من الدوال وهي

الدوال الخاصة في البرنامج .. تنقل التنفيذ ليتم تفيذ مجموعة من الدوال

وسنأخذ مثال ,,,

الأمر الثاني CMD 02 مشابهة للأول مع إختلاف البارمتر الثالث

ويستخدم لعرض قائمة إبدأ start

الأمر الثالث CMD 03 :

هذا الأمر يشغل نافذة إعدادات العرض عن طريق لوحة التحكم ,, كيف؟

قد تكون هذة الدالة طويلة ,, لأنها تتصل بدالة داخل البرنامج تقوم بدورها بالإتصال بعدة دوال

وهذا هو الشكل الثاني للأوامر ,, ولكن الشغلة بسيط !

بما أننا في بداية الموضوع حددنا نقطة توقف على كل الأوامر , فلا نحتاج لأمر آخر

شغل البرنامج المراقب عن طريق F9 , بعد ذلك نفذ الأمر CMD 03

ليتوقف التنفيذ عند بداية معالجة الرسائل ,, اللون الوردي

بعد ذلك إستمر في التنفيذ F8 لتتجاوز دوال المقارنة للرسائل , وسينقلك التنفيذ

إلى بداية كود الأمر CMD 03 عند العنوان address 00401152

وهو يمثل دالة خاصة في البرنامج وتستخدم بارمتر واحد

00401152   :PUSH  ASCII "Desk.cpl";
00401157   :CALL    004014F0

هذة الأوامر تمثل في الشفرة المصدرية الإنتقال للدالة الداخلية الخاصة في البرنامج

وهي LaunchControlPanelApplet

المهم علّم على العنوان 00401157 وهو يمثل التعليمة CALL

ثم إضغط الزر الأيمن للماوس وإختر الأمر Follow لينقلك البرنامج إلى عنوان جديد

وهو العنوان address 004014F0 , ضع نقطة توقف على العنوان

بإستخدام F2 , ثم نفذ البرنامج بإستخدام F9 , ليتوقف التنفيذ في بداية الدالة

ستلاحظ بأن الدالة تبدأ بدوال خاصة بترتيب النصوص , ما يهمنا هي دالة

التشغيل , إستمر في تنفيذ الكود إلى أن تصل إلى الدالة CreateProcess

لترى كيف كتبت الدالة , والبارمترات في مسجل المكدس

EEpro.gif

أعتقد بأن بارمترات الدالة واضحة , وبنفس الترتيب الموجود في الكود المصدري

بقي آخر بارمترين في الدالة وهما , pStartupInfo و pProcessInfo

هذة البارمترات عبارة عن إتحاد لمجموعة من المتغيرات

ولعرض قيم المتغيرات المستخدمة في الدالة ,,

إختر البنية أو الإتحاد , ثم إضغط مفتاح Enter

أو من خلال الضغط للزر الأيمن للماوس وإختيار Follow in stack

-------------

وبهذا نكون قد أنهينا الثلاث أوامر ,, وتعلمنا شيء مهم في البرمجة العكسية

إستخراج أفكار ودوال البرامج

هذة الشغلة لو إستمريت عليها وحاولت نبش أكواد أي برنامج تراة ,,, بعد فترة

ستصبح خبير في بنية البرامج وطريقة عمل الأنظمة ,, وأي شيء يحدث أمامك على الشاشة صدقني ستعرف مصدرة ,, وكيف تم عملة دون الحاجة لفك التجميع ؟!!

وإلى اللقاء

ProAPI.zip

تم تعديل بواسطه jaas
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

موضوع ولا أحلى..بس جاري القراءه بدقة

الله يعافيك ياستاذي الكريم

al_aman

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ..

جميل جدا أخي ... بس شوي شوي علينا :)

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شخصياً لا أحب المدح لكن لكل مقام مقال ...

أنت فعلا تطبق المقولة

Art for art's sake

عمل رائع فعلاً !

أتمنى أنك تحافظ على هذه الروح المعنوية التي أغبطك عليها .

شكلك حتتضطرني ارجع أكتب مواضيع بعد ما ينتهي العمل الذي انا مشغول فيه لمدة شهر تقريبا ...

أهم شئ أنك لا تستسلم ولا تيأس , سيأتي يوم بعد كم سنة وتجد أشخاص في مواقع عربية تكتب في مواضيع مشابهة و تشير الى مواضيع jaas كمرجع عربي .

على فكره العنوانين الرنانة -ياحبذا بالانجليزية - لها تأثير في شد الجمهور ( لاتنسى هذه النقطه :D ) .

Just keep on

CIONO1

تم تعديل بواسطه tmaaa
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

زاد عدد المهتمين في البرمجة العكسية ,,,,,,, الحمد لله

في أمل يرجع المنتدى كما كان

أشكر كل الأعضاء الذين شاركو

ومنتظرين مواضيعك أخي tmaaa , فأنت تملك موهبة في النبش من الملفات التنفيذية

فلا تحرمنا من تجاربك :)

وبالتوفيق ,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ..

أخي JAAS اشكرك كثيراً على هذا الموضوع الجميل والمفيد ..

صراحة ، انا قمت بتحميل الملف والموضوع دون ان أقرأها وذلك لانشغالي بموضوع الحماية .. ولكني قرأته اليوم .. وبصراحة ندمت على عدم قرأتي له في السابق :)

ولكن ، هل من موقع يمكننا ايجاد فيه دورس شاملة لـ OLLYDBG ؟؟

لأننا كل يوم نكتشف شيئاً جديدا .. ولو كنت اعرف هذه المعلومة قبل ايام لساعدتني كثيراً .. ومن المؤكد لو اتعلم بقية الطرق لساعدني ذلك أكثر ..

وادعوك للاستمرار .. ونحن نتظر

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مرحبتين ( الإحتراف )

في الحقيقية لا أعلم بوجود مواقع لشرح Olly , حاول البحث يمكن تلاقي

أما عن إمكانياتة ,, تستطيع أن تكشفها بكثرة إستخادمك للبرنامج

المهم أني سؤحاول كتابت طرق جديدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

اذا عندك اي كتاب مفيد عربي او انجليزي ممكن تحطه هني علشان نستفيد اكثر

و شكرا جزيلا على هالموضوع الرائع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أين أنت يا Jaas

من 2005 لم نرك في المنتدى

هل أحد يعلم معلومة عن الأخ Jaas أو حتى يبلغوا سلامي له

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كلمته منذ بضع سنين, كان عنده بعض المشاكل (مع الاجهزة الأمنية) لعله يكون بخير الآن.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .