PDA

View Full Version : حرفه ای: محیطی امن برای ذخیره اطلاعات حیاتی نرم افزار



Pedram_Parsian
چهارشنبه 21 خرداد 1393, 20:06 عصر
با سلام
من یه نرم افزار نوشتم که استفاده از کامپیوتر رو برای فرزندان محدود می کنه .... و ....
اول بگم که از هیچ دیتابیسی اسفاده نمی کنم...
حالا یه جای امن می خوام که پسورد نرم افزار رو که متغییر است ذخیره کنم یعنی کاربر به هیچ وجه به اون دسترسی نداشته باشه !
لطفا کمک کنید....

CsharpNevisi
چهارشنبه 21 خرداد 1393, 20:21 عصر
بیا یه فایل متنی تو یه مسیر پرت ذخیره کن و با استفاده از اتریبیوت فوق مخفیش کن ... پسوندشم DLL کن ... اطلاعاتتم توش ذخیره کن ... !!!

Amir4317
چهارشنبه 21 خرداد 1393, 20:21 عصر
یه بچه نقص همیشه راهش رو پیدا میکنه!

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

پس خیلی راحت با یک کلک اسم فایلی پسوردها رو با نامی سیستمی (مثلاً ivgsys.dll) در مکانی مثل system32 یا اصلاً پیش خود برنامه قرار میدید.
البته از اینجا به بعد هش کردن و امنیت باز کردن و ... پای خودتونه
میشه از قبل مقدار دهیش کرد و هربار چکش کرد که اگه کس دیگه دستکاریش کرده متوجه شد و ...

shahryari
چهارشنبه 21 خرداد 1393, 20:23 عصر
در ریجستری ویندوز و بصورت هش شده ذخیره کن

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 20:29 عصر
در ریجستری ویندوز و بصورت هش شده ذخیره کن

دوست عزیز میشه یا نمونه کد قرار بدین و یا بیشتر توضیح بدین ؟ با تشکر

shahryari
چهارشنبه 21 خرداد 1393, 20:34 عصر
دوست عزیز میشه یا نمونه کد قرار بدین و یا بیشتر توضیح بدین ؟ با تشکر

:متفکر:.. نه نمیشه !!!
.
.
.
.
در باره هش و ریجستری اگه در این تالار جستجو کنی ، پیدا میکنی

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 20:47 عصر
:متفکر:.. نه نمیشه !!!
.
.
.
.
در باره هش و ریجستری اگه در این تالار جستجو کنی ، پیدا میکنی

دوستان چیزهای زیادی در مورد ریجستری پیدا کردم ولی برای هش کردن با ریجستری پیدا نکردم ..
لطفا یا لینک یا کد قرار بدین
با تشکر

shahryari
چهارشنبه 21 خرداد 1393, 20:53 عصر
دوستان چیزهای زیادی در مورد ریجستری پیدا کردم ولی برای هش کردن با ریجستری پیدا نکردم ..
لطفا یا لینک یا کد قرار بدین
با تشکر

:عصبانی++: ای داد بیداد...
هش کردن خودش یک معقوله جداست و ذخیره متن در ریجستری یک چیز دیگه..
برای اطمینان بیشتر باید رمزتون رو ابتدا هش بکنید مثلا عبارت "shahryari" رو تبدیل میکنه به "dsfdsfdgds002221ggfdfgdfsd"
سپس این مقدار رو در ریجستری ویندوز ذخیره میکنی
هنگام اعتبار سنجی هم رمز دریافتی رو مجددا هش کرده و با مقدار ذخیره شده در ریجستری مقایسه میکنی ..
تموم شد و رفت... خلاص

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 20:55 عصر
اینم ی کلاس برای رجیستری

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;


public class RegistryHelper
{
private static string FormRegKey(string sSect)
{


return sSect;
}


public static void SaveSetting(string Section, string Key, string Setting)
{


string text1 = FormRegKey(Section);
RegistryKey key1 = Application.UserAppDataRegistry.CreateSubKey(text1 );
if (key1 == null)
{
return;
}
try
{
key1.SetValue(Key, Setting);
}
catch
{
return;
}
finally
{
key1.Close();
}


}


public static string GetSetting(string Section, string Key, string Default /* = "" */)
{
if (Default == null)
{
Default = "";
}
string text2 = FormRegKey(Section);
RegistryKey key1 = Application.UserAppDataRegistry.OpenSubKey(text2);
if (key1 != null)
{
object obj1 = key1.GetValue(Key, Default);
key1.Close();
if (obj1 != null)
{
if (!(obj1 is string))
{
return null;
}
return (string) obj1;
}
return null;
}
return Default;
}
}


تشکر یادت نره

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 21:06 عصر
دوست عزیز با تشکر
ولی میشه بگین که من متغیر پسوردم رو به جای چه متغیری در این کلاس باید قرار بدم ؟
چون تقریبا چیزی نفهمیدم .... :متفکر:

Amir4317
چهارشنبه 21 خرداد 1393, 21:08 عصر
ببخشید این کارش چیه ؟؟؟!

private static string FormRegKey(string sSect)
{ return sSect; }

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 21:25 عصر
ببخشید ولی :
برنامه من از طریق همین رجیستری به startup ویندوز افزوده شده ...
حالا اطلاعات ذخیره شده در این رجیستری پس از خاموش و روشن شدن کامپیوتر هم قابل استفاده است ؟ یا نه ؟ یعنی پسوردی که توش ریختم پاک نمیشه ؟

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 21:28 عصر
نه پاک نمیشه
ولی ممکن است ک آنتی ویروس به برنامه ی شما گیر بدهد

Abbas Naghdi
چهارشنبه 21 خرداد 1393, 21:28 عصر
امروزه نرم افزار هایمانیتورینگ هستند و به راحتی میشه مسیر فایلی که ساختید رو پیدا کرد ... خیلی راحت ... سه سوت
هش کردن در ریجستری هم خیلی جالبه چون هر جور هش کنی قابل بازیابیه ینی اگر اهل فنش پیدا بشه سریع Decode میکنه هش رو ...
خیال خوش ...

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 21:30 عصر
امروزه نرم افزار هایمانیتورینگ هستند و به راحتی میشه مسیر فایلی که ساختید رو پیدا کرد ... خیلی راحت ... سه سوت
هش کردن در ریجستری هم خیلی جالبه چون هر جور هش کنی قابل بازیابیه ینی اگر اهل فنش پیدا بشه سریع Decode میکنه هش رو ...
خیال خوش ...

حالا ما اونقدر هم بچه ها رو جدی نمی گیریم ...
طرف که برنامه نویس نیست .... :|

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 21:32 عصر
نه پاک نمیشه
ولی ممکن است ک آنتی ویروس به برنامه ی شما گیر بدهد

یعنی ممکنه برنامه رو فایل رو پاک کنه ؟

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 21:46 عصر
بله چون با خود برنامه استارت آپ پر میشه ( آنتی ویروس این کد رو ویروس میدونه )
بهترین کار اینه ک در موقع ستاپ برنامه رو بزاری توی استات آپ

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 21:57 عصر
یه سوال دیگه البته تست کردم تو کامپیوتر خودم مشکل نداشت :
من اومدم بدون استفاده از کلاس فقط کد ها رو کپی کردم و ... تو سیستم خودم مشکل نداشت
احتمال داره که تو سیستم مقصد مشکلی پیش بیاد یا نه ؟

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 22:04 عصر
اگر از این کلاسی ک من بهتون دادم استفاده میکنید بعید بدونم چون برنامه های من هم با همین کد کار میکنند و توی هیچ سیستمی مشکلی نداشته

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 22:06 عصر
و به عنوان آخرین سوال :
من از این کد استفاده می کنم :

FormRegKey(NewPassword_TXT.Text.ToString());

ولی چه مقدار هایی باید به جای section و key و setting قرا بدم ؟

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 22:16 عصر
PassWord = RegistryHelper.GetSetting("Defualt", "Part1", "Part2");


Defualt : اگر این فیلد خالی بود توی دیتابیس پسورد رو برابر اون قرار میده

Part1 : اسم اون فیلد هستش

Part2 : این رو همه جا اسم برنامه تون بزارید (کلید برنامه در رجیستری هست)

انشاالله ک درست گفتم ( چون چند وقتی هستش ک از این کد استفاده نکردم )

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 22:30 عصر
با تشکر از همه دوستانی که من رو در نوشتن این برنامه یاری کردند (البته تشکر هم کردم :) )
حالا کدی که نوشتم رو قرار دادم تا اساتید یک بار دیگه چک کنند که درست هست یا نه :

RegistryHelper.SaveSetting("0", "Part1", NewPassword_TXT.Text.ToString());
PassWordSW = RegistryHelper.GetSetting("0", "Part1", "Part2");
MessageBox.Show(PassWordSW);

در این کد newpassword ، پسورد جدیدی است که از کاربر دریافت می کنه
با تشکر

Pedram_Parsian
چهارشنبه 21 خرداد 1393, 22:56 عصر
دوستان کد من در تاپیک قبلی درست هستش ؟

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 23:20 عصر
غلطه
من یکی دگ نماز بخونم کدتون رو ویرایش میکنم میدم بهتون
شما نام برنامه و یه رمز به من بدید

Amir4317
چهارشنبه 21 خرداد 1393, 23:46 عصر
عاغا
بیخود و بی‌جهت رجیستری رو کثیف نکنید.
ممکنه آنتی ویروس هم بهتون گیر بده.
فایل مخزنتون رو امن کنید.

mohammadsamadi1377
چهارشنبه 21 خرداد 1393, 23:56 عصر
داشتم سورس مینوشتم ولی نظر امیر بهتره ( خیلی بهتره )
اگه بازم نیاز داشتی بگو کاملش کنم بزارم سایت

us1234
پنج شنبه 22 خرداد 1393, 01:27 صبح
یک مکان مناسب برای این کار در ویندوز Environment می باشد .

البته اگر از کدینگ خاصی استفاده کنید خیلی امنتر هم خواهد بود .

برای خواندن :

string getEnv =Environment.GetEnvironmentVariable("envVar");

برای نوشتن :
string setEnv =Environment.SetEnvironmentVariable("envvar", varEnv);

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 09:55 صبح
یک مکان مناسب برای این کار در ویندوز Environment می باشد .

البته اگر از کدینگ خاصی استفاده کنید خیلی امنتر هم خواهد بود .

برای خواندن :

string getEnv =Environment.GetEnvironmentVariable("envVar");

برای نوشتن :
string setEnv =Environment.SetEnvironmentVariable("envvar", varEnv);

یعنی این محیط واقعا امنه ؟
و کاربر به اون دسترسی نداره ؟
در ضمن هنگام خاموش شدن که پاک نمیشه ؟

us1234
پنج شنبه 22 خرداد 1393, 10:05 صبح
یعنی این محیط واقعا امنه ؟
و کاربر به اون دسترسی نداره ؟
در ضمن هنگام خاموش شدن که پاک نمیشه ؟

در خصوص دسترسی که به هر جای سیستم که با کد بتوان دسترسی داشت قطعا کاربر هم می تونه ولی نسبت به ریجستری محل قرارگیریش یکم سری تره :لبخندساده:
در خصوص ری استارت شدن سیستم این اطلاعات حذف نمیشود و ماندگاره تا مادامی که دوباره با کد یا دستی حذف یا ادیت شود .

ولی حتما از کدینگ استفاده کنید مثل کدینگ SHA1 (http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx) که اگر رشته کد شد دیگر راهی برای بازگردانی رشته به حالت اول وجود ندارد و تنها راه چک کردن ساختن رشته مشابه اش است .

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 10:12 صبح
در خصوص دسترسی که به هر جای سیستم که با کد بتوان دسترسی داشت قطعا کاربر هم می تونه ولی نسبت به ریجستری محل قرارگیریش یکم سری تره :لبخندساده:
در خصوص ری استارت شدن سیستم این اطلاعات حذف نمیشود و ماندگاره تا مادامی که دوباره با کد یا دستی حذف یا ادیت شود .

ولی حتما از کدینگ استفاده کنید مثل کدینگ SHA1 (http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx) که اگر رشته کد شد دیگر راهی برای بازگردانی رشته به حالت اول وجود ندارد و تنها راه چک کردن ساختن رشته مشابه اش است .

بعد 3 تا سوال دیگه :
1. چه جوری میشه اون رو پاک کرد؟
2. اگه از MD5 استفاده کنم که مشکلی نداره ؟
3. پسورد من که باید ذخیره بشه تو این کد varEnv است دیگه ؟
با تشکر

us1234
پنج شنبه 22 خرداد 1393, 10:46 صبح
بعد 3 تا سوال دیگه :
1. چه جوری میشه اون رو پاک کرد؟
2. اگه از MD5 استفاده کنم که مشکلی نداره ؟
3. پسورد من که باید ذخیره بشه تو این کد varEnv است دیگه ؟
با تشکر
1 - برای حذف کردن مقدار نال بهش بدید :
Environment.GetEnvironmentVariable("envVar", null);

2- فرقی ندارد sha1 قوی تر است ولی در این کار تفاوت چندانی ندارد .
3 - بله پسورد یا نام کاربری را در همان متغییر که نام بردید قرار دهید .

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 17:12 عصر
بعد دوستان ببخشید سرتون رو درد اوردم :لبخند: ولی دوتا سوال دیگه :
1. حتما باید در بخش اول "envVar" رو بذاریم یا هر اسم دیگه ای میشه گذاشت ؟
2. اگه بخوام چند تا از این ها داشته باشم باید چکار کنم ؟

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 17:31 عصر
بعد یه سوال دیگه از دوستان عزیز :
این کد :

string setEnv = Environment.SetEnvironmentVariable("envvar", HashedPassword);

رو نباید به این صورت تغییر بدم :

Environment.SetEnvironmentVariable("envvar", HashedPassword);

چون در غیر این صورت این error رو میده :

Cannot implicitly convert type 'void' to 'string'

با تشکر

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 19:08 عصر
و یک مشکل اساسی در این کد :
دوستمون گفت که این پسوردی که با این روش ذخیره می کنیم حتی پس از خاموش و روشن شدن کامپیوتر باقی می ماند ولی :
من وقتی برنامه رو بستم و دوباره باز کردم دیدن پسورد ذخیره نشده !!!
دوستان ما رو فرستادین دنبال نخود سیاه --> اول گفتین ریجستری که تست کردم و درست بود غلطه --> و بعد هم این روش که کاملا مشکل داره !!!
لطفا همکاری کنید

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 19:21 عصر
دوستان چرا مقدار ذخیره شده پس از ریستارت شدن برنامه (بستن و باز کردن برنامه) برابر null می شود ؟؟؟؟؟؟؟؟؟؟؟
چرا ؟
:عصبانی::عصبانی::عصبانی++::عص انی::عصبانی:

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 19:53 عصر
دوست عزیز us1234 حالا که آنلاین هستی میشه جواب بدی لطفا ؟
باتشکر

shahryari
پنج شنبه 22 خرداد 1393, 20:02 عصر
دوست عزیز ریجستری مشکل داره ؟؟؟؟
ذخیره در ریجستری و خوندن از اون از اب خوردن هم اسونه

کد ذخیره در ریجستری:
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\\Software\\MyApplication", "ramz", "رمز هش شد");

کد خواند از ریجستری:
string ramz = Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\\Software\\MyApplication", "ramz", "مقدار دیفالت در صورت نبود کلید").ToString();


نکته: بین حروفها فاصله افتاده شما اصلاح کن.. بعدن نگی تست کردم نشد....

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 20:23 عصر
دوست عزیز ریجستری مشکل داره ؟؟؟؟
ذخیره در ریجستری و خوندن از اون از اب خوردن هم اسونه

کد ذخیره در ریجستری:
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\\Software\\MyApplication", "ramz", "رمز هش شد");

کد خواند از ریجستری:
string ramz = Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\\Software\\MyApplication", "ramz", "مقدار دیفالت در صورت نبود کلید").ToString();


نکته: بین حروفها فاصله افتاده شما اصلاح کن.. بعدن نگی تست کردم نشد....

دوست عزیز با تشکر از شما ولی اگه دقت کنید در تاپیک های بالا هم امنیت ریجیستری از این کد دو خطه ای که دوستمون گفت (که البته کار نمیکنه و الان هم هیچ کس پاسخگو نیست ولی می دونم الان جاش نیست ولی باید بگم تو رو خدا دوستان لطفا قبل از این که کدی رو در اختیار عموم قرار بدن لطفا و لطفا :ناراحت::ناراحت: قبلش تست کنن. این آقا کل برنامه من رو با این دو خط بهم ریخت و ... و همچنین کار هم که نمیکنه .... )
همون طور که دوستان گفتند ممکنه آنتی ویروس پاکش کنه و ...
حالا اگه شما بلدید درباره این دو خطی که دوستمون گفت لطفا یه نمونه بذارین تو رو خدا ..... سورسم از بین رفت .... :ناراحت:

shahryari
پنج شنبه 22 خرداد 1393, 20:41 عصر
دوست من شما علاقه شدیدی به کپی پیست دارید...

باید با دسترسی ادمین اجرا بشه ها .....
با همون دو خط نوشتم

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 20:51 عصر
دوست من شما علاقه شدیدی به کپی پیست دارید...

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

shahryari
پنج شنبه 22 خرداد 1393, 20:59 عصر
الان ویروس یاب من فایل شما رو به عنوان ویروس میشناسه و اگر آنتی ویروس کاربر، این فایل رو پاک کنه برنامه من به هم میریزه
راهی برای جلوگیری از این کار وجود نداره ؟
آنتی ویروس شما چیه که برنامه دات نتی رو بعنوان ویروس میشناسه؟؟؟!!! اولین بار از شما میشنوم!!!


باید بگم که وقتی فردی سوالی میپرسه اگه کدی رو که کاربر در پاسخ سوال اون میده رو کپی نکنه چیکار باید بکه ؟؟؟؟ :متعجب:واقعا برای من سوال هست ؟

و قتی کدی رو بدون در نظر گرفتن توضیحات، گروپپپی کپی و پیست مینمایید ، انتظار نداشته باشید کد براتون کار بکنه
من در اون پست عرض کردم بین حروفها فاصله افتاده که مشکل از ادیتور خود سایته و مرحمت بفرمایید اصلاح کنید

Pedram_Parsian
پنج شنبه 22 خرداد 1393, 21:05 عصر
آنتی ویروس شما چیه که برنامه دات نتی رو بعنوان ویروس میشناسه؟؟؟!!! اولین بار از شما میشنوم!!!



و قتی کدی رو بدون در نظر گرفتن توضیحات، گروپپپی کپی و پیست مینمایید ، انتظار نداشته باشید کد براتون کار بکنه
من در اون پست عرض کردم بین حروفها فاصله افتاده که مشکل از ادیتور خود سایته و مرحمت بفرمایید اصلاح کنید

آنتی ویروس من شید (همین آنتی ویروس ایرانیه هست) البته به عنوان فایل هایی که احتمال آلوده بودن را دارن میشناسه ....
و وقتی برنامه رو اجرا می کنم این مشکل پیش نمیاد
وقتی کامپیوترم رو ریستارت می کنم اینطوری میشه که فکر کنم به علت این باشه که ریجستری های ویندوز سریع تر برنامه من که به استارت آپ اضافه شده لود میشه...
بعدشم دوستمون درباره 2 خط کدی که نوشته بودن توضیح خاصی نداده بودن ....
در ضمن کد دوستمون کار میکرد ولی نه با ویژگی هایی که گفته بودن ...