PDA

View Full Version : .snk چیست



limpizik
پنج شنبه 03 اردیبهشت 1394, 07:10 صبح
سلام دوستان.
میخاستم بدونم کاربرد فایلهای snk. در C#‎‎ چی هست و چه استفاده ای ازش میشه.
که به این شکل هم در پروژه قرار داده میشه

[assembly: AssemblyKeyFile("PublicPrivateKeyFile.snk")]

fafa_n6190
پنج شنبه 03 اردیبهشت 1394, 14:58 عصر
فایل Snk. برای ساخت Strong-Named Assemblies (http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx) استفاده میشه که این فایل تشکیل شده از نام اسمبلی ، ورژن برنامه ، یک کلید عمومی و یک کلید خصوصی که با عکس الگوریتم های رمزنگاری نامتقارن ، امضای دیجیتالی برای فایل شما تولید میشه که این امضا به انتهای فایل باینری شما اضافه خواهد شد تا برخی مسائل امنیتی رو در راستای عدم سو استفاده از فایل چک بکنه

limpizik
جمعه 04 اردیبهشت 1394, 12:57 عصر
فایل Snk. برای ساخت Strong-Named Assemblies (http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx) استفاده میشه که این فایل تشکیل شده از نام اسمبلی ، ورژن برنامه ، یک کلید عمومی و یک کلید خصوصی که با عکس الگوریتم های رمزنگاری نامتقارن ، امضای دیجیتالی برای فایل شما تولید میشه که این امضا به انتهای فایل باینری شما اضافه خواهد شد تا برخی مسائل امنیتی رو در راستای عدم سو استفاده از فایل چک بکنه

ممنون از پاسختون.چطوری میشه این فایل رو ساخت؟

fafa_n6190
جمعه 04 اردیبهشت 1394, 15:08 عصر
خواهش می کنم . به راحتی!
توی Solution روی پروژه Right Click کن و به Properties برو ، توی تب Signing یه snk یا pfx رو به روش زیر ایجاد کن

130597



با کلیک بر روی گزینه New فرم زیر به نمایش در میاد ، که اگر تیک پسورد را بگذارید یک Personal Information Exchange pfxتولید میکنه در غیر این صورت فایل strongly named key snk برات می سازه ، نوع الگوریتم رمزنگاری رو هم میتونی انتخاب کنی :)



130598

limpizik
شنبه 05 اردیبهشت 1394, 07:09 صبح
مرسی عالی بود.
بعد با AssemblyKeyFile کد رو به برنامه import کنم ؟همین؟دیگه برنامه اعتماد سازی شد؟
ممنون

Javad_raouf
شنبه 05 اردیبهشت 1394, 10:28 صبح
باید چیز به درد بخوری باشه
میشه بیشتر توضیح بدید؟

ghasem110deh
شنبه 05 اردیبهشت 1394, 12:23 عصر
باید چیز به درد بخوری باشه
میشه بیشتر توضیح بدید؟

سلام
منم همین خواسته رو دارم !
یه توضیح بدین که چیه و به چه دردی میخوره !؟

fafa_n6190
شنبه 05 اردیبهشت 1394, 14:14 عصر
والا تا جایی که بنده اطلاع دارم ، تو یه برهه ای از زمان یه مشکلی به وجود آمده بوده به نام DLL_Hell یا "جهنم DLL" ، این مشکل رو به این صورت در نظر بگیرید که چندین اسمبلی هم نام ولی با نسخه های متفاوت توسط شرکت یا مجموعه ای ارائه میشد و مشکلی که بود فرضا دو نرم افزار با اسمبلی های نسخه 1 و 2 همزمان بر روی سیستم قابل استفاده نبود! با اومدن strong name به معنای نامگذاری قوی ، این امکان فراهم شد تا بتونید چندین نسخه متفاوت از یک اسمبلی رو در کنار هم بر روی یک سیستم داشته باشید و یک برنامه بتونه با یک نسخه مشخص از آن اسمبلی کار کنه.
اگر من یک اسمبلی رو ایجاد کرده و اون رو بصورت قوی نامگذاری کنم، سپس اگر شخص دیگه ای بخواد از اون اسمبلی استفاده کنه، اون شخص از طریق کلید عمومی و سایر مشخصاتی که همراه اسمبلی وجود داره، اطمینان حاصل میکنه که اون اسمبلی رو من نوشتم نه شخص دیگه ای.

به این صورت که یک زوج کلید خصوصی و عمومی ایجاد میشه ، اسمبلی به وسیله کلید خصوصی من امضا میشه و از طریق کلید عمومی همراه اسمبلی قابل چک شدن هست که آیا این اسمبلی توسط من امضا شده یا خیر.
برای نام گذاری قوی ساخت snk با روش قبل کافیست ، لازم نیس شما کار دیگری انجام بدید. فقط فایل زوج کلید باید پیش خودتون محفوظ باشه و دست کسی نیوفته!
این کار باعث افزایش امنیت فایل شما خواهد شد به طوری که اگر کسی (به وسیله HEX editor یا...) دستکاری در فایل شما ایجاد کنه یا قصد نفوذی داشته باشه با خطای زیر رو به رو خواهد شد.



An unhandled exception of type 'System.IO.FileLoadException' occurred in system.windows.forms.dll Additional information: Strong name validation failed for assembly 'MyAssembly.Test'.


130608

البته که مسائلی تحت عنوان Strong Name Remove یا Signature Remove هم مطرح هست. پروتکتورهایی مثل SmartAssembly و .. هم در هنگام Obfuscate کردن اسمبلی ها از فایل های snk بهره می برند.

limpizik
جمعه 11 اردیبهشت 1394, 18:54 عصر
آیا امکانش هست بوسیله این کلیدهای snk عملیات کریپت رو انجام بدیم?

fafa_n6190
دوشنبه 14 اردیبهشت 1394, 01:40 صبح
بله ، چرا که نه ...!؟

Using a .NET .snk Key File for RSA Encryption (http://www.example-code.com/csharp/rsa_snk.asp)

ghasem110deh
پنج شنبه 17 اردیبهشت 1394, 09:48 صبح
سلام
من این فایل snk
رو ایجاد کردم اما بعدش برنامه دیگه اجرا نمیشه (عکس ضمیمه)
اون کامپوننت که گیر میده واسه تاریخ شمسی هستش !

plus
شنبه 19 اردیبهشت 1394, 22:33 عصر
سلام
من این فایل snk
رو ایجاد کردم اما بعدش برنامه دیگه اجرا نمیشه (عکس ضمیمه)
اون کامپوننت که گیر میده واسه تاریخ شمسی هستش !
سلام. شما باید کامپوننت تاریخ رو هم Sign کنید. برای این کار سورس کد رو Download کنید و به همین روشی که دارین این پروژه رو Sign میکنید اون رو Sign کنید و از DLL خروجی بجای DLL موجود که Sign نشده استفاده کنید.

ghasem110deh
شنبه 19 اردیبهشت 1394, 23:03 عصر
یعنی از هر dll (که ایجاد بشه یا مثا این اضافه بشه) باید یه snl واسه خودش داشته باشه !؟
dll های استیمول سافت و ... منظورم هست !

plus
شنبه 19 اردیبهشت 1394, 23:09 عصر
یعنی از هر dll (که ایجاد بشه یا مثا این اضافه بشه) باید یه snl واسه خودش داشته باشه !؟
dll های استیمول سافت و ... منظورم هست !

بله فکر میکنم شما نمی تونید در یک پروژه Sign شده از Dll های Sign نشده استفاده کنید. البته Dll هایی مثل استیمول سافت خودشون باید Sign شده باشن (البته کرک شده ها رو نمیدونم).

omid nasri
یک شنبه 20 اردیبهشت 1394, 09:37 صبح
با تشکر از fafa_n6190

مرجع فارسی : http://www.dotnettips.info/post/1114/strong-name

ghasem110deh
یک شنبه 20 اردیبهشت 1394, 16:38 عصر
این همه مطلب خوندیم هنوز یاد نگرفته ، راه دور زدنش رو یاد گرفتیم :)
حذف SN با :
http://www.nirsoft.net/dot_net_tools/strong_name_remove.html

لطفا یکی در مورد این روش چک کردن sn در برنامه هم توضیح بده !
که کدها رو کجا باید نوشت ؟

http://stackoverflow.com/questions/308756/checking-an-assembly-for-a-strong-name