الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل يتم إنشاء نوافذ وعناصر تحكم في runtime ؟؟

مغلق
بدأه aboanas990 في 13 مايو 2006 · 3 رد · 553 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

1- عندما أدخل البرنامج وأذهب إلى نافذة إدخال اسم المستخدم والشركة والسيريال تظهر لي رسالة عند الخطأ في ادخال المعلومات حفظت الرسالة بشكلها النصي والتي تظهر في مربع رسالة يحتوي على زر OK إلى الآن الأمور في نطاقها الصحيح ...

2- عندما أبحث عن هذه الرسالة في برامج كثيرة وحديثة لاأجدها ....من البرامج المستعملة : PE Explorer - Wdasm - OllyDbg - IDA Pro

3- عندما أبحث عن نافذة إدخال المعلومات لاأجدها أيضا في Dialogs

4-وبعد البحث الطويل والمضني وتتبع البرنامج شككت في بعض التعليمات والتي وجدت شرحها وهي :

CallWindowProc و CreateWindowEx وهذه التعليمات على ماأظن أنها تنشئ نوافذ وعناصر تحكم مثل مربع النص والزر button في runtime إذن على هذه النظرية فإن نافذة المعلومات وماتحويه من عناصر هي موجودة فقط في وقت تشغيل البرنامج على ماأظن ...

5-أيضا وجدت أن البرنامج تم برمجته بلغة VisualC++ 7.0 وليس مضغوطا بأي برامج ولامشفر إذن لماذا لايظهر النص الذي يصدره البرنامج عندما أكتب معلومات خاطئة في نافذة تسجيل البرنامج ؟؟؟ هل هناك تغيير في حروف النص عن طريق دالة معينه ... أرجوا المناقشة للفائدة

وشكرا للجميع

#2

قد يكون النص مشفر و يتم تشفيره عند الحاجة ثم إعادة تشفيره مرة ثانية

و نعم، يمكن إنشاء النوافذ و غيرها برمجيا بدون إستعمال Dialog

الحل الوحيد هو تتبع أوامر البرنامج خطو خطوة - قد تستغرق وقتا- لفهم ألية عمله

تم تعديل هذه المشاركة بواسطة dj-siba في 13 مايو 2006 في 18:11

قطرة الماء تـثـقب الحجر.. لا بالعنف. لكن بتكرار المحاولة

at4re.gif

منتديات الفريق العربي للهندسة العكسية 不喜欢的勿入! www.at4re.com

#3

شكرا على المرور ...

#4

لا اضافة اكثر مما اجاب به الاخ djsiba سوى امرين. ليس بالضرورة ان تتبع الطريقة التقليدية في البحث عن نص الرسالة فهناك طريقة افضل وهي ان تقوم بوضع نقطة توقف على الدوال التي تعلم او تشك في استخدامها وهي مثلا من اجل الوصول الى المكان الذي يتم استدعاء الرسالة منه, MessageBoxA / MessageBoxW / MessageBoxIndirectA / MessageBoxIndirectW ومن ثم تقوم بعمل back trace للوصول الى المكان الذي قام بنقلك الى المنطقة التي يتم فيها طلب الرسالة. طبعا هذه الطريقة تنجح جدا في حالة البرامج ذات النصوص المشفرة او البرامج التي لا تقوم بطلب الدالة بدءا من مرحلة التجميع اي ان الدالة ليست موجودة في IAT وانما تطلب من خلال GetProcAddress.

انشاء النوافذ وملحقاتها يتم من خلال CreateWindowExA CreateWindowExW CreateDialogParamA CreateDialogParamW CreateDialogIndirectParamA CreateDialogIndirectParamW

العناصر تنشئ باستخدام CreateWindowExA/W والنوافذ اما من خلال كل ما ورد اعلاه.

ايضا قد يتم طلب النافذة من خلال LoadResource ان كانت موجودة ضمن الـ resources, تحديدا مشار اليها بكتلة IRD و IRDE

IRD = IMAGE_RESOURCE_DIRECTORY

IRDE = IMAGE_RESOURCE_DIRECTORY_ENTRY

« Everything looks different from another cracker point of view »

« There are 11 types of people, those who understand binary, those who don't, well I'm the rest »

« ?Do you speak Binary »

me W4R3ZD00D/

هذا الموضوع مغلق.

مواضيع مشابهة