بسم الله الرحمن الرحيم
لدي طريقة لمعرفة التوابع والإجراءات الموجودة في مكتبة DLL أو OCX فهل يوجد طريقة لمعرفة وسطاء (باراميترات) هذه الإجراءات وتلك التوابع وإذا سمحتم أرجو أن تكون الإجابة متعلقة بدلفي حصرياً.
بسم الله الرحمن الرحيم
لدي طريقة لمعرفة التوابع والإجراءات الموجودة في مكتبة DLL أو OCX فهل يوجد طريقة لمعرفة وسطاء (باراميترات) هذه الإجراءات وتلك التوابع وإذا سمحتم أرجو أن تكون الإجابة متعلقة بدلفي حصرياً.
يمكن معرفة اسماء الدوال فقط
اما Parameter فتعرفها بتنقيح البرنامج الذي يستعمل تلك DLL
حسب ما اعرف والله اعلم
يمكن معرفة نوع البارامتر الخاص بالدالة بتنقيح الـ DLL
لكن لنفرض انك تملك DLL خارجي ليس مرتبط باي برنامج تريد معرفه البارامترات الخاصة به (كما سؤل أحدهم مرة ولم يجب عن السؤال حتى الآن :rolleyes:)
اتصور ان عليك كتابة تطبيق صغير يستدعي هذه الدالة وتمرير بارامترات بحجم بايت, ثم بواسطة debugger تنظر كيف يتم التعامل مع هذا البايت وما الحجم المخصص للبارامتر لتحديد حجم ونوع المتغير.
أتمنى أن يكون هذا الجواب كاف عما لم أجب عنه أحدهم من قبل :rolleyes:
السلام عليكم
« 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/
الرجاء التوضيح أكثر أقصد كيف يتم التنقيح وبأية الأدوات يتم
اكتب برنامج, باي لغة شئت
ضمن برنامجك تستخدم LoadLibrary + GetProcAddress لتستدعي دوال الملف (يمكن الحصول على اسماء الدوال المصدرة منه من خلال LordPE)
الدالة قم تملك اكثر من بارامتر (يمكن الاستعانة بـ IDA لتحديد هذا)
مرر بايت لكل بارامتر لكي لا تتجاوز الحجم المخصص للبارامتر
نقح التطبيق بـ olly ليس بالضرورة ان يعمل بشكل صحيح, باي حال انت تمرر بايتات عشوائية لبارامترات ذات وظيفة معينة.
انقل التنفيذ بشكل عشوائي حسب رغبتك لتقوم بعملية التمرير دون الحاجة لاغلاقه واعادة تنفيذه.
انظر كل بارامتر ما الحجم المخصص له (بايت, كلمة, كلمة مضاعفة, كلمة رباعية, عشارية.. سلسلة بطول معين)
حددت اسم الدالة, البارامترات باسماء غير مهمة تستطيع ان تكتب اي اسم تريد في شفرتك, حجم كل بارامتر.
تستطيع الان استخدام تلك المكتبة وكأنها مكتبتك.
السلام عليكم
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
قرأت في المنتدى أنه لا ينجح طالب علم مستحي أو متكبر وفكرت كثيرا قبل أن أكتب هذا الرد ولذا طالت المسافة بينه وبين الردود الأخرى السابقة
أرجو من الأعضاء الزملاء التوضيح أكثر بالأمثلة فقد طرحت الموضوع ولم أستفد منه بأية إجابة وصلت إليّ.عفوا....
حسنا بصورة أخرى مع صور لمزيد من التوضيح ومزيد من التبسيط باستخدام IDA
عليك الحصول على IDA أولاً
قم بتشغيله بعد التنصيب (للإصدار 5) واختر new > windows > PE Dynamic Library
ثم اختر ملف المكتبة المطلوبة (ساقوم باختبار ملف WZ32.DLL التابع لبرنامج WinZip)
ثم next > next > finish > yes :P معلومات لا يهمني التدقيق بها في هذه الحالة
الان اختر exports ثم الدالة zip من تلك المكتبة
هل ترى var_4, هذا بارامتر واحد لهذه الدالة, طبعا لا علاقة للاسم باسم الدالة الفعلي, هو مجرد اسم عشوائي, arg_0 يدل على نهاية البارامترات وهو ليس بارامتر تابع لها.
انقر على var_4 ثم انقر Enter وسترى هذا
البارامتر بطول 4 بايتات (LONG) (هل ترى dd = declare/define dword)
s و r محجوزة لا تهمك
و arg_0 لا تهمك أيضا
جرب نفس الأمر على دالة اخرى unzip مثلا لتثبت ما قرأت.
السلام عليكم
تم تعديل هذه المشاركة بواسطة Xacker في 7 أغسطس 2007 في 19:14
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
هذا الموضوع مغلق.