PDA

View Full Version : SecureString



regbyte
پنج شنبه 08 شهریور 1386, 21:42 عصر
با سلام
یک مثال ساده در مورد SecureString می خواستم .
با تشکر

Amir Oveisi
پنج شنبه 08 شهریور 1386, 21:51 عصر
http://davidhayden.com/blog/dave/archive/2006/03/04/2873.aspx

regbyte
جمعه 09 شهریور 1386, 13:29 عصر
با تشکر
آیا می تونم چند String را با استفاده از آن محافظت کنم؟
میشه یه توضیح در مورد آن بدهید(دقیقا در چه مواردی استفاده می شود؟)
(چطوری می تونم رشته ها رو در درون برنامه ذخیره کنم/آنها را بخوانم؟)
اگر نمی شود./ من فقط چند رشته در برنامه ام دارم که می خواهم از آنها محافظت کنم، و به نرم افزارهایی مثل Dotfuscator دستری ندارم، چطوری می تونم اینکار را انجام دهم؟
لطفا راهنمایی کنید.

Amir Oveisi
جمعه 09 شهریور 1386, 23:30 عصر
آیا می تونم چند String را با استفاده از آن محافظت کنم؟
خوب هر چند تا رشته که میخواین براش یه SecureString بسازین.

میشه یه توضیح در مورد آن بدهید(دقیقا در چه مواردی استفاده می شود؟
جزئی ترش تو همون لینکی که دادم گفته شده که دقیقا چرا. به طور کلی وقتی میخوایم یه String داشته باشیم که encrypt شده باشه و توسط garbage collector از بین نره یه موقع و خودمون هر وقت خواستیم از بین ببریمش. در واقع یه string امن تر از string های معمولی.

(چطوری می تونم رشته ها رو در درون برنامه ذخیره کنم/آنها را بخوانم؟
بستگی داره... روش معمول نگهداری اونها تو فایل Setting پروژه هستش.

من فقط چند رشته در برنامه ام دارم که می خواهم از آنها محافظت کنم، و به نرم افزارهایی مثل Dotfuscator دستری ندارم، چطوری می تونم اینکار را انجام دهم؟
خوب از این روش میتونین استفاده کنین ولی راه ساده ترش اینه که string هاتون رو بصورت hashcode تو فایل Setting نگهداری کنید که فقط خودتون میدونین مقدار اصلیشون چیه.

لطفا راهنمایی کنید.
اینم راهنمایی D:

regbyte
شنبه 10 شهریور 1386, 14:12 عصر
با تشکر از راهنمایی شما
من می خواهم یک آدرس رجیستری را ذخیره کنم، و بعدا از آن استفاده کنم، (در ضمن امن باشد)
چه راهی بهتر است؟

Amir Oveisi
یک شنبه 11 شهریور 1386, 01:04 صبح
میخواین یه string رو تو رجیستری ذخیره کنید؟
اگه آره من استفاده از hashcode رو پیشنهاد میکنم (بخصوص اگه میخواین password باشه )

regbyte
یک شنبه 11 شهریور 1386, 12:17 عصر
نه، آدرس کلید رجیستری را می خواهم ذخیره کنم (یه رشته معمولی) اما می خواهم امن باشه.

Amir Oveisi
یک شنبه 11 شهریور 1386, 17:17 عصر
خوب واسه اینکار بهترین روش اینه که string رو encode کنی بعد بریزی تو registry
موقع خوندن هم decode کنی و ازش استفاده کنی
حالا این کار رو میتونی با کلاس های System.Text انجام بدی یا اینکه خودت یه encoding-decoding بنویسی ( من شخصا دومی رو ترجیح میدم )
اینم یه مثال :
http://www.vbforums.com/showthread.php?s=&threadid=287324

regbyte
یک شنبه 11 شهریور 1386, 18:09 عصر
ظاهرا من منظورم رو خوب بیان نکردم!
من یک رشته در برنامه دارم و می خوام از اون درجاهای مختلف استفاده کنم،امنیت برنامه ام به این رشته بستگی دارد.
چون فایل اجرایی برنامه های Net. توسط Reflector ها قابل خواندن هستند، درحالت عادی این رشته خیلی راحت قابل خواندن است(کد آن Native نیست)
در ضمن بنده به نرم افزارهای Obfuscator دسترسی ندارم، در نتیجه نیاز دارم این رشته را Secure کنم، تا قابل باز خوانی نباشد.
لطفا راهنمایی کنید.

Amir Oveisi
یک شنبه 11 شهریور 1386, 19:19 عصر
این مهمه که رشته توسط کاربر قابل تغییره یا اینکه میتونه بعدا تغییر کنه یا اینکه نه یه string ثابته؟
در صمن شما میخواین تو برنامتون (سورس) هم این رشته بصورت امن باشه یا فقط تو رجیستری امن باشه کافیه؟

regbyte
یک شنبه 11 شهریور 1386, 20:16 عصر
این مهمه که رشته توسط کاربر قابل تغییره یا اینکه میتونه بعدا تغییر کنه یا اینکه نه یه string ثابته؟

رشته ثابته



در صمن شما میخواین تو برنامتون (سورس) هم این رشته بصورت امن باشه یا فقط تو رجیستری امن باشه کافیه؟

در سورس برنامه

Amir Oveisi
یک شنبه 11 شهریور 1386, 23:47 عصر
در سورس برنامه
خوب این کار اصولا احتیاج به ابزارهای dotfuscator داره! چون هر کاری بکنین باز سورستون قابل decompile شدنه. یعنی هر کی بتونه یه خط از کد برنامتون رو ببینه در واقع بالاخره میفهمه که چه بلایی سر این string اومده و مقدار اصلیش لو میره.
پس هیچکدوم از روش هایی که قبلا بخث کردیم به درد نمیخورن!
2 روش میتونم پیشنهاد کنم:
1- با ++C یا C کارهایی رو که قراره با این string انجام بشن رو انجام بده و اونو بصورت dllImport تو برنامه #C وارد کن و ازش استفاده کن ( چون dll نوشته شده native کده نمیشه decompile کرد به این سادگی )
2- همه کارهاتو با #C انجام بده و آخر سر برنامتو با یه packer مخصوص NET. پک کن ( این کار یه کم امنیت کد هارو زیاد میکنه )

موفق باشید

regbyte
دوشنبه 12 شهریور 1386, 11:37 صبح
با تشکر


- با ++C یا C کارهایی رو که قراره با این string انجام بشن رو انجام بده و اونو بصورت dllImport تو برنامه #C وارد کن و ازش استفاده کن ( چون dll نوشته شده native کده نمیشه decompile کرد به این سادگی )

همانطوریکه من میتونم از این DLL استفاده کنم، بقیه هم میتونن، در نتیجه امن نیست.



2- همه کارهاتو با #C انجام بده و آخر سر برنامتو با یه packer مخصوص NET. پک کن ( این کار یه کم امنیت کد هارو زیاد میکنه )

میشه در مورد packer توضیح بدهید.

Amir Oveisi
دوشنبه 12 شهریور 1386, 14:41 عصر
توضیحات در مورد packer : http://barnamenevis.org/forum/showthread.php?t=20560
یه پیشنهاد:
میتونی استفاده از توابع dll ی که با c نوشته میشه رو با یه password کنترل کنی. این کار رو اگه با hashcode انجام بدی امنیت نسبتا خوبی داره.
خوب ترش اینه که هم از Dll استفاده کنی و هم pack کنی.

regbyte
سه شنبه 13 شهریور 1386, 21:38 عصر
با تشکر
من DLL ی رو با Win32 ++C ساختم و به برنامه اضافه کردم:


[DllImport("My.dll")]
publicstaticexternstring mStrs(int a);



روی سیستم خودم کار میکنه، اما روی سیستمهای دیگه نمیتونه فایل DLL رو پیدا کنه.
فایل رو تو شاخه برنامه/ Windows / System32 هم کپی کردم اما مشکل حل نشد.
آیا باید فایل رو رجیستر کنم، اگر بلی، چطوری؟