ويندوز: كيفية إنشاء APPCompat Custom Shims (إصلاحات التطبيق)؟

StackOverflow https://stackoverflow.com/questions/1711665

  •  19-09-2019
  •  | 
  •  

سؤال

ويندوز لديه القدرة على التطبيق الحشوات لتطبيقات التصرف. وبعد تستخدم الحشوات لاعتراض مكالمات API وتغييرها. على سبيل المثال، يمكن استخدام الحشوات إلى:

  • تغيير المعلقات الواردة
  • كذبة حول قيم العودة
  • تغييره للاتصال بشيء آخر

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

alt text

أحتاج إلى شيم ليس أحد مئات الحشوات كتبت مايكروسوفت بالفعل. أحتاج إلى شيم مخصص.

في حالتي، أريد اعتراض المكالمات على:

GetSystemMetrics(0x1000)

بحيث يعود 0. وبعد لا يمكنني العثور على أي معلومات حول كيفية إعطاء Windows DLL الخاص بي الذي سيكون لديك الإصلاح الذي أحتاجه. أنا لا أعرف حتى إذا كنت يمكن إنشاء حواف مخصصة.

هل يدعم ويندوز الحشوات المخصصة؟

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

المحلول

أنا لست على علم بأي طريقة لشخص آخر غير Microsoft بتنفيذ SHIM AppCompat.

قد ترغب في التحقيق التحف, قد يوفر الوظيفة التي تريدها.

نصائح أخرى

عليك أن تفكر في هذا من وجهة نظر ريموند تشن. تخيل ما إذا كان من الممكن لشخص آخر غير مايكروسوفت تكتب الحشوات التوافق. ثم كلما تقدم Microsoft تغييرا كبيرا، بالإضافة إلى جميع أعمال التوافق الأخرى الخاصة بهم، سيتعين عليهم أيضا كتابة الحشوات على الحشوات الثالثة التي فعلت الشيء الذي فعل الشيء الخطأ. الحفاظ على التوافق المعفاة أمر صعب بما فيه الكفاية كما هو.

هذا ممكن، لكنه يتطلب بعض العمل.

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

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

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

يمكنك دائما استخدام الهندسة العكسية لإصلاحها :)، اسمحوا لي أن أعرف إذا كنت بحاجة إلى أي مساعدة في ذلك

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