PDA

View Full Version : امنیت در VB.Net



MAiLDEREMi
دوشنبه 21 خرداد 1386, 10:43 صبح
با سلام و خسته نباشید خدمت برنامه نویسان عزیز

سوالی داشتم در مورد امنیت فایلهای کامپایل شده در VB.Net

با توجه به اینکه هر فایلی را می توان با برنامه هایی مشابه WinHex باز نمود چگونه می توان برنامه را طوری Encode کرد که امکان مشاهده نام فرمها و Object ها و ... در آن وجود نداشته باشد؟

در VB 6.0 این امکان وجود داشت که با برنامه هایی مشابه eXPressor فایل EXE را فشرده کرد که این باعث می شد که ساختار Hex آن به هم بریزد.

ضررهای شناخت توسط Hex:
1- توانایی تغییر ثابت های تعیین شده مثل سریال محصول
2- شناخت فایلهای مورد استفاده قرار گرفته شده خارجی (بیشترین استفاده در DB)
3- شناخت آدرسهای مورد استفاده در Regedit
4- شناخت اتصالات در شبکه
5- محل کامپایل شدن فایل (یعنی اگر بنده یک فایلی را کامپایل کنم کسی که آن را با Hex باز می کند می تواند Directory کامپیوتر بنده را داشته باشد)
6- شناخت نام فرمها، نام Object ها، Caption ها و Text ها و ...

تست های انجام شده:
1- تمامی متنهای موجود در برنامه به کدهای ASCII تبدیل شد.
2- تغییر متنهای موجود به UNICODE
3- استفاده از فایل کامپایل شده به عنوان یک فایل Resource
4- استفاده از یک Resource برای تبدیل متنها (مثل کاری که در VB 6.0 در قسمت Wizard انجام می شد)
5- استفاده ترکیبی از متغییرها برای شکل دادن متن و ...

ولی با این وجود هیچ تغییری در ساختار Hex به وجود نیامد.

تنها عملی که روی این ساختار تاثیر گذاشت فارسی کردن متنها بوده که به نظر من تأثیر اساسی در برنامه ایجاد نمی کند.

با تشکر

linux
دوشنبه 21 خرداد 1386, 11:53 صبح
با سلام و خسته نباشید خدمت برنامه نویسان عزیز

سوالی داشتم در مورد امنیت فایلهای کامپایل شده در VB.Net

با توجه به اینکه هر فایلی را می توان با برنامه هایی مشابه WinHex باز نمود چگونه می توان برنامه را طوری Encode کرد که امکان مشاهده نام فرمها و Object ها و ... در آن وجود نداشته باشد؟

در VB 6.0 این امکان وجود داشت که با برنامه هایی مشابه eXPressor فایل EXE را فشرده کرد که این باعث می شد که ساختار Hex آن به هم بریزد.

ضررهای شناخت توسط Hex:
1- توانایی تغییر ثابت های تعیین شده مثل سریال محصول
2- شناخت فایلهای مورد استفاده قرار گرفته شده خارجی (بیشترین استفاده در DB)
3- شناخت آدرسهای مورد استفاده در Regedit
4- شناخت اتصالات در شبکه
5- محل کامپایل شدن فایل (یعنی اگر بنده یک فایلی را کامپایل کنم کسی که آن را با Hex باز می کند می تواند Directory کامپیوتر بنده را داشته باشد)
6- شناخت نام فرمها، نام Object ها، Caption ها و Text ها و ...

تست های انجام شده:
1- تمامی متنهای موجود در برنامه به کدهای ASCII تبدیل شد.
2- تغییر متنهای موجود به UNICODE
3- استفاده از فایل کامپایل شده به عنوان یک فایل Resource
4- استفاده از یک Resource برای تبدیل متنها (مثل کاری که در VB 6.0 در قسمت Wizard انجام می شد)
5- استفاده ترکیبی از متغییرها برای شکل دادن متن و ...

ولی با این وجود هیچ تغییری در ساختار Hex به وجود نیامد.

تنها عملی که روی این ساختار تاثیر گذاشت فارسی کردن متنها بوده که به نظر من تأثیر اساسی در برنامه ایجاد نمی کند.
با تشکر
http://www.aisto.com/roeder/dotnet/Download.aspx?File=Reflector
این برنامه را دانلود کن بعدش فایل کامپایل شده ات را با این نگاه کن.

MAiLDEREMi
دوشنبه 21 خرداد 1386, 12:16 عصر
متشکرم ولی من یک روش یا یک برنامه ای می خواستم که فایل کامپیایل شده رو Encrypt کنه طوری که این برنامه هم نتونه Disassemble کنه

linux
دوشنبه 21 خرداد 1386, 14:23 عصر
متشکرم ولی من یک روش یا یک برنامه ای می خواستم که فایل کامپیایل شده رو Encrypt کنه طوری که این برنامه هم نتونه Disassemble کنه
برنامه های مختلفی هستند می توانید برای نمونه این برنامه را ببینید
http://www.eziriz.com/

MAiLDEREMi
دوشنبه 21 خرداد 1386, 19:41 عصر
راستش رو اگه بخواین دیگه از استفاده از برنامه های دیگه منصرف شدم. چون eXpressor وقتی پک می کنه یه script به ته فایل می چسبونه که باعث میشه بعضی از antivirus ها بشناسنش.

برای مثال می تونین یک فایل پک شده با eXpressor رو تو http://virustotal.com اسکن کنید و ببینید.

بجای استفاده از این برنامه ها به یه نتیجه ی توپ رسیدم. می تونیم این فایل رو به شکل resource برای یک فایل اجرایی به منظور extract بذاریم یا برای اطمینان فایل اجرایی کد شده رو resource کنیم بعد تو extract کردن decode کنیم.

linux
سه شنبه 22 خرداد 1386, 00:34 صبح
راستش رو اگه بخواین دیگه از استفاده از برنامه های دیگه منصرف شدم. چون eXpressor وقتی پک می کنه یه script به ته فایل می چسبونه که باعث میشه بعضی از antivirus ها بشناسنش.

برای مثال می تونین یک فایل پک شده با eXpressor رو تو http://virustotal.com اسکن کنید و ببینید.

بجای استفاده از این برنامه ها به یه نتیجه ی توپ رسیدم. می تونیم این فایل رو به شکل resource برای یک فایل اجرایی به منظور extract بذاریم یا برای اطمینان فایل اجرایی کد شده رو resource کنیم بعد تو extract کردن decode کنیم.
میشه ریسور را در آورد بعد unpack کرد بعد سورس را دید!
شما کلا برنامه ننویسی خیالت راحت تر هست

MAiLDEREMi
سه شنبه 22 خرداد 1386, 10:29 صبح
نمی دونم شما در زمینه File Encoding چیزی کار کردید یا نه ولی این رو می دونم که اگه یک فایل کد شده رو Resource کنید و بعد از Decode استفاده کنید امنیت کار خیلی بیشتر از اونچیزی میشه که شما فکرش رو می کنید.

rezaei manesh
سه شنبه 22 خرداد 1386, 17:10 عصر
من برنامه دات نت رکتور رو گرفتم ظاهرا که خوبه من اونو با یه ابزار دیگه ترکیب کردم تا حالا که خوب بوده اما مشکل اینه که برنامه من trial هست هر چی گشتم نتونستم *ر* اونو پیدا کنم اگه کسی
ک** اونو داره خواهشن اونو برام میل کنه
با تشکر از دوستان

Microsoft.net
سه شنبه 22 خرداد 1386, 19:32 عصر
خیلی سخت نگیر دوست عزیز ، برنامه تجاری بدون پشتیبانی 24 ساعته برنامه نویس یا تیم برنامه نویسی هیچ ارزشی نداره تاکید میکنم هیچ ارزشی نداره ... خیلی از شرکت های خوب تو ایران هم اینو فهمیدن و یا قفل رو برنامشون نزاشتن یا یه قفل ساده بکار بردن .
بهر حال یک برنامه تجاری زمانی قابل اتکا و دارای ارزشه که یک تیم برنامه نویسی خوب و متعهد پشتش باشه...

linux
سه شنبه 22 خرداد 1386, 23:29 عصر
نمی دونم شما در ظمینه File Encoding چیزی کار کردید یا نه ولی این رو می دونم که اگه یک فایل کد شده رو Resource کنید و بعد از Decode استفاده کنید امنیت کار خیلی بیشتر از اونچیزی میشه که شما فکرش رو می کنید.
به هر حال مجبور پسورد را یکجایی ذخیره کنی؟

linux
چهارشنبه 23 خرداد 1386, 01:21 صبح
خیلی سخت نگیر دوست عزیز ، برنامه تجاری بدون پشتیبانی 24 ساعته برنامه نویس یا تیم برنامه نویسی هیچ ارزشی نداره تاکید میکنم هیچ ارزشی نداره ... خیلی از شرکت های خوب تو ایران هم اینو فهمیدن و یا قفل رو برنامشون نزاشتن یا یه قفل ساده بکار بردن .
بهر حال یک برنامه تجاری زمانی قابل اتکا و دارای ارزشه که یک تیم برنامه نویسی خوب و متعهد پشتش باشه...
دقیقا همین هست برنامه بدون پشتیبانی 2زار هم نمی ارزه!

rezaei manesh
چهارشنبه 23 خرداد 1386, 09:12 صبح
درسته دوستان حق با شماست اما نه هر برنامه ای،وقتی قرار هست یک برنامه کاربردی و کوچک بنویسی که بدون نیاز به پیشتیبانی (یا حد اقل پشتیبانی کار کنه) باید یک مقدار هم که شده به فکر باشی
من زیاد نمی خوام رو امنیت وقت بزارم در حد معمول که نشه کد ها به راحتی هلو بره تو گلو
حداقل یکی کد ها رو باز کنه که دوزار حالیش بشه و...
در ضمن من ورژن 3.2.0.6 رو می خوام یا یه ورژن نزدیک به این من الا 2.9.05 v رو دارم اما کار نمی کنه نمی دونم چرا؟!!

MAiLDEREMi
چهارشنبه 23 خرداد 1386, 15:27 عصر
با تشکر از همه دوستان

من با Encoding فایل مشکلم حل شد به این گونه که:
فایل EXE رو تو Net. درست کردم بعد با VB6، کد کردم و بعد به صورت Binary تو Resource گذاشتم.

وقتی فایل کامپایل شده با VB6 رو اجرا می کنم اون فایل رو Decode و اجرا می کنه.

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


به هر حال مجبور پسورد را یکجایی ذخیره کنی؟
دوست عزیز ما برای Encoding فایل از هیچ رمزی استفاده نمی کنیم. کافیه که ساختار فایل رو بهم بریزیم. البته می تونیم یک متن رو مبنای کار قرار بدیم که در اون صورت امکان بازیابی 0% است.

mcntyuask
سه شنبه 29 خرداد 1386, 15:46 عصر
لطفا یه راه دیگه پیشنهاد کنید که همه زحماتم داره به باد میره!!!!!!!!!!!!!!!!!!!!!!!!!

sinpin
سه شنبه 29 خرداد 1386, 15:55 عصر
نمی دونم شما در ظمینه File Encoding چیزی کار کردید یا نه ولی این رو می دونم که اگه یک فایل کد شده رو Resource کنید و بعد از Decode استفاده کنید امنیت کار خیلی بیشتر از اونچیزی میشه که شما فکرش رو می کنید.

در ظمینه File Encoding خیر اما من در زمینه‌ی آن کمی کار کردم (!)
زیاد تفاوتی نداره که فایل کد شده را تحت ریسورس استفاده کنیم یا خیر. تفاوت از آنجا ناشی میشود که ممکن است بعضی ها ندانند که میشود فایل را به این شکل embed کرد و یا اینکه تازه یاد گرفته باشند که میتوان !

امیدوارم ناراحت نشده باشید فقط یک شوخی دوستانه بود
:لبخندساده:
اما حقیقت اینه که نحوه‌ی code کردن بسیار مهمتر از قایم کردن فایله. شما اینطور فکر نمیکنید ؟

sinpin
سه شنبه 29 خرداد 1386, 16:02 عصر
با تشکر از همه دوستان

من با Encoding فایل مشکلم حل شد به این گونه که:
فایل EXE رو تو Net. درست کردم بعد با VB6، کد کردم و بعد به صورت Binary تو Resource گذاشتم.

وقتی فایل کامپایل شده با VB6 رو اجرا می کنم اون فایل رو Decode و اجرا می کنه.

فکر کنم اگه یک کسی بخواد خودش رو برنامه خودش این امنیت رو ایجاد بکنه خیلی بهتره 1 تا کار با Reactor یا چیز دیگه ولی این رو قبول دارم که وقت گیره.


دوست عزیز ما برای Encoding فایل از هیچ رمزی 2 استفاده نمی کنیم. کافیه که ساختار فایل رو بهم بریزیم. البته می تونیم یک متن رو مبنای کار قرار بدیم که در اون صورت امکان بازیابی 0% است.



1 ) به هر حال شما فایل اجرایی decode شده رو جایی extract و از اونجا اجرا میکنید. درسته ؟
پس خیلی راحت و بدون دردسر میشه تمام زحمت های شما رو دور زد (نرم افزارهای زیادی برای مانیتورینگ و مشاهده نحوه ی عملکرد سیستم و فایلهای در حال استفاده و ... وجود دارد. مثل :‌ FileMon)

2 ) پیشنهاد میکنم راجع به رمزنگاری بیشتر مطالعه کنید و روشهای متقارن (و مطمئن) بوسیله کلیدرو ببینید. (cipher,symmetric cryptography)

MAiLDEREMi
شنبه 16 تیر 1386, 20:39 عصر
1 ) به هر حال شما فایل اجرایی decode شده رو جایی extract و از اونجا اجرا میکنید. درسته ؟
پس خیلی راحت و بدون دردسر میشه تمام زحمت های شما رو دور زد (نرم افزارهای زیادی برای مانیتورینگ و مشاهده نحوه ی عملکرد سیستم و فایلهای در حال استفاده و ... وجود دارد. مثل :‌ FileMon)

2 ) پیشنهاد میکنم راجع به رمزنگاری بیشتر مطالعه کنید و روشهای متقارن (و مطمئن) بوسیله کلیدرو ببینید. (cipher,symmetric cryptography)

متشکر از دقتتون ولی این برنامه به طور کامل Extract نمی شه. یعنی این فایل Encode شده به چند فایل تقسیم می شه (برای ساخت joiner من از این شیوه استفاده کردم).
در تشریح کامل این روش داریم که:
* بعد از اتصال قطعات، یک فایل باینری که توانایی اجرای فایل دیگری رو داره به اون Join می کینم. یعنی مشابه یک EXE Joiner می سازیم. (البته این کار فقط به این روش انجام نمی شه. 1001 روش برای این کار وجود داره)
* این Joiner می تونه قابلیت Decode کردن اون رو دارا باشه
(البته من Joiner رو با VB6 طراحی کردم و با یک برنامه پکش کردم چون امنیتش بالا بره)
استفاده از اشاره گرها به منضور ساخت یک Anti Trace و ... (من این کار رو با کدهای اسمبلی انجام دادم)

من این کار رو تو 1 هفته انجام دادم و نتیجه کامل رو گرفتم. این چند وقت هم که نبودم روی تست برنامه کار می کردم.

ضمنا در مورد پیشنهادتون متشکرم ولی من تقریبا بیش از 10 روش رمزنگاری رو امتحان کردم و مشکلی تو این ضمینه ندارم. سعی کردم اون چیزی رو که می دونستم و خودم امتحان کردم رو براتون بذارم. می دونم این روش سخت ترین روش برای کد کردن فایله.

خوشحال می شم پیشنهاد شما رو هم در این ضمینه جویا بشم.

MAiLDEREMi
شنبه 27 تیر 1388, 23:35 عصر
:لبخند: طبق نظرات دوستان دات نت رو گذاشتم کنار... الان هم خیالم از بابت اجرای کند برنامه حل شد، هم از بابد حجم بالای نصب و هم از بابت امنیت...

بازم شرمنده که سرتون رو به درد آوردم...
الان یه چند وقتی میشه که با برنامه های کلاسیک کار میکنم...

بازم از همه متشکرم :قلب:

HadiVB
یک شنبه 28 تیر 1388, 11:26 صبح
سلام مسعود جون دستت درد نکنه با این روشت دیگه 100% تضمینه کار.