سؤال

كيف يمكنني العثور على المعلمات ل غير موثقة وظيفة دلل؟

لقد بحثت في جميع أنحاء الإنترنت وانتهى بي الأمر إلى العثور على طريقة واحدة:أنها تنطوي على وظائف مزخرفة.ومع ذلك، لا أستطيع العثور على طريقة للحصول على تلك.

سيكون موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

وتحتاج إلى تفكيك التطبيق باستخدام، كما لاحظ بول، شيء من هذا القبيل IDA برو (أو نسخة مجانية من نفسه).

ومورد التمهيدي الجيد هو Wikibook، إلى x86 التفكيك . على وجه التحديد، نلقي نظرة على القسم الخاص href="http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames" وكومة إطارات . يمكن استنتاج المعلمات وظيفة تكون واضحة عن وظائف بسيطة اتخاذ بعض المعلمات من نوع قياسي.

وربما أفضل طريقة للبدء مع هذا النوع من الشيء إلى إنشاء اختبار DLL صغير، وخلق عدد قليل من الوظائف مع المعلمات المعروفة، ومن ثم تفكيك DLL الخاص بك لمعرفة الأنماط. تعلم التفكيك من المهام الخاصة بك (التي لديك شفرة المصدر ومعرفة كاملة التوقيع) بدلا من تغرق في تفكيك الاشياء طرف ثالث.

نصائح أخرى

لقد قمت بإجابة متعمقة إلى حد ما هنا, ، ReactOS هو أفضل رهان لك كما يبدو مرة أخرى، الجميع هنا قليلا خارج القاعدة.

أود تثبيط بقوة محاولة تفكيك ملفات DLL الخاصة بالنظام.

أ كثيراً أكثر عرضية (ولا أعتقد أنها تمت مناقشتها حتى الآن من مظهر الأشياء)، تتمثل التقنية في تعداد محتويات PDB.

ملفات PDB هي رموز تصحيح كما تعلم، ومع ذلك، يتعين على Microsoft، نظرًا للإجراء المتخذ من قضايا محكمة مكافحة الاحتكار، إصدار كميات كبيرة من المعلومات غير الموثقة.

معلومات دقيقة وقابلة للاستخدام ومحدثة تمامًا لكمية هائلة من Windows API فقط موثقة عبر ملف PDB.يتم توثيق اصطلاح الاتصال وعدد الوسائط وحتى أنواع وأسماء الوسائط (ولكن ليس التفاصيل المتعلقة بالاستخدام بالطبع:).

قم بمراجعة DIA SDK، ويعد dia2dump مثالًا جيدًا تم توزيعه مع Visual Studio، لمزيد من التحقيق، كما أنه يوفر حلاً لإلغاء تزيين الوظائف، للتحدث على وجه التحديد عن سؤالك.

كما يوفر kernel32 UnDecorateSymbolName، لذا يمكنك استخدامه أيضًا إذا كنت لا ترغب في الارتباط بمكتبات تصحيح الأخطاء sdk.

والطريقة الوحيدة للقيام بذلك هي من خلال تفكيك وظيفة ورؤية كيف يستخدم السجلات والمكدس. IDA برو هو أفضل وسيلة للقيام بذلك، ولكنها ليست شيئا غير تافهة.

هل COM دلل؟ إذا كانت دلل COM، ثم تسجيله، استخدام طريقة عرض OLE لمعرفة Interafaces والمعلمات.

وأولا وقبل كل شيء، تحميل التبعية ووكر و فتح DLL الخاص في ذلك. سترى حرف المصدرة والمستوردة. إذا كان اسم الدالة يشبه _MyFunction - هو "C" على غرار (وليس زينت)، وليس لديك الكثير لتفعله حيال ذلك (يمكن تفكيك كما قال من قبل)

إذا هو أشبه _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers فمن C ++ - زينت وكنت قد تحاول "undecorate" باستخدام {غير رسمية} معلومات من <لأ href = "http://en.wikipedia.org/wiki / Microsoft_Visual_C٪ 2B٪ 2B_Name_Mangling "يختلط =" نوفولو noreferrer "> هنا

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

إذا كنت جيدة مع التجمع قد يكون من الممكن لتفكيك آلة القانون من أجل وظيفة وعكس مهندس عليه. ولكن هذا من الصعب معقولة للقيام للجميع ولكن أبسط الوظائف.

وأنا لست على دراية حقا مع تنسيق PE التي تستخدم ويندوز، ولكن أنا متأكد من عدم وجود وسيلة حقيقية سهلة للقيام بذلك. إذا لم يتم تجريد جدول الرموز قد تكون قادرة على العثور على بعض المعلومات (غير متأكد من كيفية يخزن Windows معلومات التصحيح في PE) ولكن يكاد يكون من المؤكد لن تساعدك مع أنواع المعلمة. أفضل شيء نفعله هو تحميل DLL في مصحح أخطاء وتجربة معها ... مراقبة ذاكرة الخام على إطارات كومة، وإرسال مختلف أنواع متغيرة، وما إلى ذلك.

وحتى إذا وجدت موردا جيدا على المعلومات التصحيح في ملف PE، هناك من شبه المؤكد أن لا يكون أي معلومات عن وظيفة خاصة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top