PDA

View Full Version : بازگردانی اسمبلی ها



emad_67
شنبه 17 شهریور 1386, 11:20 صبح
سلام
فرض کنید که فایل DLL دارم که توسط جفت کلید ها قفل شده چه جوری میشه یه فایل DLL رو دوباره باز کرد و کد هاشو edit کرد؟
یه سوال دیگه هم راجع به جفت کلید ها داشتم:
منظور از کلید عمومی و خصوصی چیه ؟ مثلا اگه من Dll رو بخوام با کلید عمومی در اختیار یه کی دیگه بزارم باید چیکار کنم؟ چون وقتی یه جفت کلید میسازم فقط یه فایل در اختیار من به عنوان جفت کلید قرار میگیره حالا من عمومی و خصوصی بودنش رو از کجا بهفهمم؟

emad_67
شنبه 17 شهریور 1386, 14:21 عصر
کسی نمیدونه چیکار باید بکنم؟

omid_Ahmadi
شنبه 17 شهریور 1386, 14:51 عصر
اگر Private Key رو نداشته باشی، نمی تونی اون رو بعد از ویرایش مجدداً قفل و توزیع کنی.
برای رمزگذاری یک فایل از کلید Private استفاده می شه، و بعد از اینکه فایل رمزگذاری شد، کلید Public به همراه اون به گیرنده فرستاده میشه تا بتونه فایل رو باز کنه و بخونه. یعنی کسی که می خواد فایل رو بخونه فقط به Public Key نیاز داره، اما کسی که می خواد اون رو ویرایش کنه باید Private Key هم داشته باشه. معمولاً Private Key فقط دست افرادی هست که امتیازات خاصی روی پروژه دارن، حتی در پروژه های بزرگ این Key دست برنامه نویس هم نیست. بلکه خود برنامه نویس برای تست برنامه از Delay Signing استفاده می کنه.

فکر کنم مقاله ای در این رابطه قبلاً توی سایت آپلود کردم، در هر صورت اگر اطلاعات بیشتری بخوای، می تونی از گوگل استفاده کنی.
موفق باشید.

emad_67
شنبه 17 شهریور 1386, 15:13 عصر
خیلی ممنون از جوابتون
فرض کنید که خودم یه dll رو قفل کردم. حالا با فرض اینکه پروژه Classlibrary اونو ندارم و فقط یه فایل dll و جفت کلید اونو دارم، میشه بگید که برای باز کردن و edit فایل dll باید چی کار کنم؟
در مورد سوال دوم هم بیشتر منظورم این بود که private key و public key رو چه جوری باید به دست بیارم چون وقتی با دستور sn تو command prompt یه کلید می سازم فقط یه فایل ایجاد میشه. اگه بخوام public key فایل dll رو به شحص دیگه ای بدم باید چی کار کنم؟

PC2st
شنبه 17 شهریور 1386, 16:03 عصر
فرض کنید که خودم یه dll رو قفل کردم. حالا با فرض اینکه پروژه Classlibrary اونو ندارم و فقط یه فایل dll و جفت کلید اونو دارم، میشه بگید که برای باز کردن و edit فایل dll باید چی کار کنم؟
فکر نمیکنم با جفت کلید بشه چنین کاری کرد...




در مورد سوال دوم هم بیشتر منظورم این بود که private key و public key رو چه جوری باید به دست بیارم چون وقتی با دستور sn تو command prompt یه کلید می سازم فقط یه فایل ایجاد میشه. اگه بخوام public key فایل dll رو به شحص دیگه ای بدم باید چی کار کنم؟
از پارامتر -p استفاده کنید. یعنی:


sn -p publicPrivateKeyFile publicKeyFile

publicPrivateKeyFile همان فایل جفت کلید که تولید شده. (ورودی)
publicKeyFile کلید public اش رو در این فایل قرار میده. (خروجی)

مثال MSDN:


sn -p keyPair.snk publicKey.snk

emad_67
شنبه 17 شهریور 1386, 18:43 عصر
خیلی ممنون دوست عزیر


فکر نمیکنم با جفت کلید بشه چنین کاری کرد...

منظورتون اینه که نمیشه با جفت کلید یه Dll رو قفل کرد؟ یا اینکه نمیشه با جفت کلید dll رو باز کرد؟
یه سوال دیگه هم اینکه حالا من چه جوری باید با public key اسمبلی رو باز کنم و اطلاعاتش رو بخونم؟

PC2st
یک شنبه 18 شهریور 1386, 10:35 صبح
منظورتون اینه که نمیشه با جفت کلید یه Dll رو قفل کرد؟ یا اینکه نمیشه با جفت کلید dll رو باز کرد؟
منظورم این بود که با جفت کلید نمیشه source یک dll رو بدست آورد (edit فایل dll).
برای خواندن یا استفاده از dll ای که بصورت قوی نامگذاری شده، نیازی به فایل جفت کلید (snk.*) نیست.
چون اون dll همواره public key رو در خودش ذخیره کرده...




یه سوال دیگه هم اینکه حالا من چه جوری باید با public key اسمبلی رو باز کنم و اطلاعاتش رو بخونم؟
باید dll رو به GAC اضافه کنید و اگر میخواید نام dll در قسمت Add Reference هم بیاد، باید یک تغییر کوچولو در registry انجام بدید که در صفحه 482 از کتاب آقای هاشمیان، میتوانید توضیحات مربوطه رو پیدا کنید.

emad_67
یک شنبه 18 شهریور 1386, 11:27 صبح
فکر میکنم منظور شما از خوندن dll، اسفاده از اون هست. یعنی یه refrence به اون ایجاد کنیم و از طریق using اونو به برنامه اضافه کنیم .درسته؟
ولی من تا حالا فکر میکردم که منظور از خوندن dll دیدن source اون هست.(بدون اینکه بتونیم تغییرش بدیم)


منظورم این بود که با جفت کلید نمیشه source یک dll رو بدست آورد (edit فایل dll).

به هر حال پس منظور از اینکه میگن با private key میشه dll رو edit و دوباره قفل کرد چیه؟ و چه جوری باید اینکار رو انجام داد؟

PC2st
یک شنبه 18 شهریور 1386, 13:09 عصر
فکر میکنم منظور شما از خوندن dll، اسفاده از اون هست. یعنی یه refrence به اون ایجاد کنیم و از طریق using اونو به برنامه اضافه کنیم .درسته؟
بله درسته، منظورم همین بود.




به هر حال پس منظور از اینکه میگن با private key میشه dll رو edit و دوباره قفل کرد چیه؟ و چه جوری باید اینکار رو انجام داد؟
جفت کلید حاوی دو کلید public و private است، منظور از اینکه میگن با private key میشه dll رو قفل کرد اینه که قفل شدن براساس الگوریتم hash روی asembly + وجود کلید private صورت میگیره و امضای دیجیتالی ایجاد میشه. برای استفاده از dll ای که بصورت قوی نامگذاری شده، از کلید public استفاده میشه که به همراه فایل dll وجود داره. نحوه ایجاد digital signator در کتاب آقای هاشمیان هست.