PDA

نسخه کامل مشاهده نسخه کامل : تغییر در Resource هایی که با تابع LockResource قفل شده اند !



jj13
26-03-2007, 10:37
سال نو مبارک
در مورداین مشکل دوستان کرکر نتوانستند کمکی بکنند لذا از شما خواهشمندم مرا یاری کنید
چگونه می توان در Resource هایی که با تابع LockResource(kernel32.dll ) قفل شده اند تغییراتی را ایجاد کرد؟
برنامه با 6++VC نوشته شده است
در نظر دارم نرم افزاری را فارسی سازی کنم و برای اینکاراکثر پنجره ها و کنترلها را راست چین کرده ام
اما Resource های پنجره اصلی برنامه با تابع فوق قفل شده اند و در هنگام اجرای برنامه با تابع loadresource از قفل خارج شده و فراخوانی می شوند

چگونه این منابع قابل مشاهده و تغییر هستند؟
با تشکر از همه کدنویسان عزیز

someone
27-03-2007, 04:59
سلام.
از UpdateResource استفاده کنین. که به این شکل تعریف میشه :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

jj13
29-03-2007, 10:16
با تشکر از شما
چگونه می توانم این تابع رابه فایل dll مربوطه اضافه کنم و چگونه می توانم این تابع را در مورد منابع مورد نظر بکار برم؟
من در نظر دارم مقدار Extended Style منابع را از 00000000 به 00007000 تغییر دهم تا کنترلها و اجزا برنامه راست چین شوند.
در مورد api windows و نحوه استفاده از ان منبع مشروح و کاملی را می توانی به من معرفی کنید؟

متشکرم ، دوست عزیز

someone
30-03-2007, 03:14
دوباره سلام.
برای اینکه در منابع تغییری ایجاد کنین دو API وجود داره که بعد از بار کردن فایل Dll مورد نظر در حافظه
تغییرات رو در فایل مورد نظر ایجاد میکنه.
BeginUpdateResource و EndUpdateResource.
برای پیدا کردن توضیحات میتونین به این مبحث از MSDN مراجعه کنین : Resource Overview
برای انجام کار فایل مورد نظر رو load می کنین. resource مورد نظرتون رو پیدا میکنین. lock می کنینش
و از UpdateResource برای تغییر استفاده میکنین. که البته بین دو API بالایی قرار میگیرند.
برای پیدا کردن resource هایی که در فایل مورد نظرتون وجود داره میتونین از این توابع استفاده کنین :
EnumResNameProc و EnumResourceNames و نمونه های دیگه ای که البته اسمشون دقیقا یادم نیست.
در حقیقت شما دوباره فایل مورد نظرتون رو مینویسین. کار زیاد ساده نیست. بستگی به برنامه داره.
تا چه اندازه با برنامه نویسی آشنا هستین؟
با Resource Hacker آشنا هستین؟ تاحالا باهاش کار کردین؟

jj13
05-04-2007, 11:10
سلام به شما دوست خوب
در مورد توابعی که در بالا معرفی کردید مطالعه کردم بسیار مفید بود ، مدت زیادی است کد نویسی نکردم ( سخت افزار هستم ) ، با Resource Hacker و نرم افزار های مشابه کاملا اشنا هستم و زیاد ازش استفاده کردم .
من عکسی را از اجرای برنامه را که در برنامه Traceplus/win32 لود کردم ،در لینک زیر قرار دادم ،
با توجه به تصویر چگونه باید توابع بالا را در فایل Dll برنامه جای دهم؟

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

امیدوارم توضیحات خوب شما گره مشکل مرا باز کند
باز هم متشکرم

someone
06-04-2007, 03:20
دوباره سلام.
فرض کنیم یک module داریم شامل چند resource (مثلا DLL) و یه Interface که از این resource ها
استفاده میکنه. وقتی Interface این module رو در حافظه بار میکنه همونطور که گفتین با استفاده از
LoadResource یه Handle از resource مورد نظر برمیگردونه و با استفاده از Lockresource در حافظه Lock میشه
و یه pointer از اولین بایت اون برمیگرده. تا اینجا که مراحل دسترسی یه Interface به resource .( البته بدون
در نظر گرفتن FindResource ).
تا زمانی که Interface مورد نظر اجرا نشه تابع Lock صدا نمیشه و تابع Lock در Interface قرار داره نه Module
شما باید module مورد نظرتون رو پیدا کنین و با یه Interface دیگه که مینویسن (که در اون UpdateResource
, باقی API های مورد استفاده ) module مورد نظر رو تغییر میدین.

jj13
07-04-2007, 14:13
دوست خوبم سلام
از توضیح شما متشکرم ، اون دستورالعملی که شما فرمودید از توانایی من خارج است ولی با توجه به اینکه من چهار ماه روی این پروژه وقت گذاشته ام و باید انرا به اتمام برسانم ، ایا راه ساده تری برای اینکار وجود دارد؟
ایا نمی توان تابع LockResource را غیر فعال کرد ؟
اگر راه دیگری وجود ندارد ،خواهش می کنم مرا بیشتر راهنمایی کنید ، تا با کمک شما این مسئله راحل کنیم.

بسیار متشکرم

rouhallah
07-04-2007, 17:15
دوست خوبم سلام
از توضیح شما متشکرم ، اون دستورالعملی که شما فرمودید از توانایی من خارج است ولی با توجه به اینکه من چهار ماه روی این پروژه وقت گذاشته ام و باید انرا به اتمام برسانم ، ایا راه ساده تری برای اینکار وجود دارد؟
ایا نمی توان تابع LockResource را غیر فعال کرد ؟
اگر راه دیگری وجود ندارد ،خواهش می کنم مرا بیشتر راهنمایی کنید ، تا با کمک شما این مسئله راحل کنیم.

بسیار متشکرم
سلام دوست عزيز
نميدونم شايد اين مطلب كمكت كنه بروبه [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

rouhallah
10-04-2007, 21:37
دلیلش اینه که Notepad از نوع single Document هست و پنجره ی اصلی run-time ایجاد میشه.
به عبارت دیگه resource ی براش وجود نداره و با کد ساخته میشه.

سلام
بازم سوال پيش اومد
گفتين كه برنامه notepad پنجره اصلي اش run time ميباشد
حالا سوال من اينه كدوم برنامه ها و فايلهاي ديگه ويندوز اين طوريند آيا همشون اين گونه طراحي شدند اگه ممكنه اون دست اي رو كه تعدادشون كمتره رو بهم بگوييد اگه هم از هر دونوع تعدادشون زياده چند تا از اون نمونه هايي رو كه پنجره اصلي run time نسيت برام مثال بزنيد
راستي روم نميشه سوال دوم رو بپرسم ، ولي اميد دارم جوابم رو بدهيد . گفتين كه پنجره اصلي notepad به صورت كد ميباشد ميخواستم بدونم چطور ميشه محل شروع اين كدها رو پيدا كرد مثلاً تو كدوم آفست قرار دارند و اينكه چطور ميشه تغييرات لازم رو روي اونها انجا م داد
باز هم منو ببخشيد
واقعاً متشكرم

someone
11-04-2007, 10:38
دوباره سلام.
برای اینکه بیشتر با چیزی که گفتم آشنا بشین کافیه یه پروژه ی Win32 ایجاد کنین.
میبینین که struct ی وجود داره به نام WNDCLASS ویا WNDCLASSEX که توسط RegisterClass از کلاس
های خود Windows استفاده میشه. برنامه رو اجرا کنین و کدش رو ببینین.
هر برنامه ای میتونه از این کلاس ها استفاده کنه. اما بیشتر برنامه های Document Type مثل WordPad
و خیلی های دیگه از این کلاس استفاده میکنن. (multiDoc)
میتونم بدونم منظورتون از تغییر دادن چیه؟ بادستکاری در Offset یه فایل exe میخواین این کار رو انجام بدین؟

rouhallah
11-04-2007, 16:37
دوباره سلام.
برای اینکه بیشتر با چیزی که گفتم آشنا بشین کافیه یه پروژه ی Win32 ایجاد کنین.
میبینین که struct ی وجود داره به نام WNDCLASS ویا WNDCLASSEX که توسط RegisterClass از کلاس
های خود Windows استفاده میشه. برنامه رو اجرا کنین و کدش رو ببینین.
هر برنامه ای میتونه از این کلاس ها استفاده کنه. اما بیشتر برنامه های Document Type مثل WordPad
و خیلی های دیگه از این کلاس استفاده میکنن. (multiDoc)
میتونم بدونم منظورتون از تغییر دادن چیه؟ بادستکاری در Offset یه فایل exe میخواین این کار رو انجام بدین؟

منظورم از تغيير دادن اينه كه ميخوام محل عنوان برنامه در title bar رو با نماد ضربدر پنجره عوض كنم و ضربدر بستن
( close) را به سمت چپ و عنوان برنامه رو ه سمت راست ببرم
چون گفتيد به صورت كد ميباشند ميخواستم محل كدشون رو پيدا كرده و با تغييراتي محل آنها رو عوض كنم
براي همين گفتم شايد تو همون آفستها ميشه اين تغيير رو انجام داد
اگه شما راه بهتري هم ميشناسيد راهنماييم كنيد. آيا با باز كردن برنامه اي، تحت پروژه ي win32 كه ميخوام تغييراتي توش بدم ميتونم كدهاي مربوطه برنامه رو مشاهده كنم و نيازي به برنامه هاي hexadesimal نداشته باشم؟
با تشكر