PDA

View Full Version : سوال: چرا با وجود امنیت کم دات نت ازش در برنامه های تجاری استفاده می شه !!



saied7468
یک شنبه 18 مرداد 1388, 10:58 صبح
سلام به همه دوستان
من در حال يادگرفتن سي شارپ هستم توي انجمن يه مطلبي ديدم که باعث شد از يادگرفتن سي شارپ يه کم سرد شم.


در دات نت نقطه ضعفي از لحاظ امنيتي وجود داره که باعث ميشه کراکر به سورس کد شما هم بتونه دسترسي پيدا کنه , کار اين برنامه ها جلوگيري از اين اتفاق هست که تا 70% موفق عمل ميکنن ولي نه هميشه.
http://barnamenevis.org/forum/showthread.php?t=168606&highlight=امنيت


در حال حاضر هيچ راهي براي جلوگيري از لو نرفتن سورس در پلتفورم دات نت وجود ندارد شما فقط با پروتکتورهاي موجود ميتوانيد براي کراکر سختي ايجاد کنيد آن هم در حد ضعيف.
http://barnamenevis.org/forum/showthread.php?t=122711

سوال من :
چرا شرکتها با وجود اينکه مي دونن احتمال داره سورس برنامه هاشون لو بره از اين زبان هاي برنامه نويسي استفاده مي کنن ؟؟

Amir Oveisi
یک شنبه 18 مرداد 1388, 11:17 صبح
این که سورس برنامه دیده بشه همیشه دلیل بر این نیست که امنیت اون برنامه پایینه. در ضمن اینکه یک کمپانی تصمیم بگیره برای توسعه یک نرم افزار از چه زبانی استفاده کنه بستگی به خیلی چیزها داره و امنیت تنها عامل تصمیم ساز نیست. مثلا ممکنه یه موقع راحتی توسع و زمان مورد نیاز برای اتمام کار حیاتی باشه و مجبور بشیم با یه زبان ساده تر این کار رو انجام بدیم و بجاش امنیت، کارایی و خیلی چیزهای دیگه رو ازشون چشم پوشی کنیم.

با این همه باز هم این مواردی که اشاره کردید دلیلی بر این نیست که برنامه های مبتنی بر NET. امنیت پایینی دارن بلکه به نظر من اگر به درستی از امکانات اون استفاده بشه حتی با دیده شدن کد برنامه هم امنیت برنامه تا حد زیادی تامین خواهد بود. البته این نکته هم مهمه که هر برنامه ای قابل نفوذ هست.

موفق باشید

saied7468
یک شنبه 18 مرداد 1388, 11:59 صبح
با این همه باز هم این مواردی که اشاره کردید دلیلی بر این نیست که برنامه های مبتنی بر NET. امنیت پایینی دارن بلکه به نظر من اگر به درستی از امکانات اون استفاده بشه حتی با دیده شدن کد برنامه هم امنیت برنامه تا حد زیادی تامین خواهد بود. البته این نکته هم مهمه که هر برنامه ای قابل نفوذ هست
دوست عزیز من فکر می کنم شما اشتباه می کنی اگه یه شرکت یه سیستم یک پارچه با یکی از برنامه های تحت دات نت بنویسه و این سیستم رو با قیمت بالایی بفروشه کافیه یه نفر سودجو به فایل اجرایی اون سیستم یکپاچه دسترسی پیدا کنه و بتونه فایل اجرایی رو به سورس تبدیل کنه خوب اون موقع دیگه فاتحه اون نرم افزار خونده است . چرا؟ چون با کمی تغییر می تونه اون رو به هر شکلی که می خواد تبدیل کنه و به اسم خودش بزنه و با قیمت کمتر از شرکت بفروشه و تنها چیزی که اینجا نصیب شرکت می شه ضرر هست.

Amir Oveisi
یک شنبه 18 مرداد 1388, 12:10 عصر
بتونه فایل اجرایی رو به سورس تبدیل کنه خوب اون موقع دیگه فاتحه اون نرم افزار خونده است . چرا؟ چون با کمی تغییر می تونه اون رو به هر شکلی که می خواد تبدیل کنه و به اسم خودش بزنه و با قیمت کمتر از شرکت بفروشه

این کار خیلی هم ساده نیست حتی اگر اون برنامه خیلی مبتدیانه هم نوشته شده باشه باز هم برای تبدیل اون به سورس قابل اجرا کار زیادی لازمه که کمتر از دوباره نویسی برنامه نیست. تازه اگر برنامه حجیمی باشه کار خیلی سخت تر و زمان بر تر خواهد شد. حالا اگر برنامه با رعایت استانداردهای امنیتی نوشته بشه دیگه کار خیلی سخت میشه و تبدیل آن به سورس قابل اجرا کار هر کسی نخواهد بود و زمان و هزینه زیادی هم لازم خواهد داشت پس میشه این نتیجه رو گرفت که احتمال اینکه کسی بیاد این کار رو انجام بده و زمان و انرژی براش صرف کنه خیلی کمه. البته باز هم میگم غیر ممکن نیست همینطور که اگه با ++C یا Delphi یا هر زبان دیگه ای نوشته بشه باز هم همین قدر امکانش هست که برنامه کرک بشه.

موفق باشید

keivan mousavi
یک شنبه 18 مرداد 1388, 12:38 عصر
من یک نظر کلی درباره این روال دارم
علت اینکه امنیت لینوکس از ویندوز بیشتره چیست؟
علت اینکه نرم افزارهای جانبی لینوکس خیلی بیشتر از ویندوز هست چیست؟
علت اینکه لینوکس توی این 10 سال پیشرفت چشم گیری کرد چیست که حتی بانکهای اورپا و آمریکار و حتی برخی از ادرات امنیت ملی کشورهای مختلف وادر به استفاده از این سیستم عامل کرد

علت در open source بود این سیتم عامله که باعث پیشرفت این نرم افزار شد
open source بودن نه تنها دلیل بر ضعف و امنیت پایین نیست بلکه باعث بالا بردن امنیت و جلوگیری از باگهای وحشتناک میشود

اگر در لینوکس حفره نفوذی پبدا شود بلافاصله 400 برنامه نویس حرفه ای از سراسر دنیا تلاش میکنن که اون حفره نفوذ رو بپوشونن

در مورد C#.NET هم همین نکته صدق میکنه که باعث توسعه میشه نه باعث عقب ماندگی

شما بهتره یکمی درمورد نرم افزارهای OPEN SOURCE بیشتر سرچ کنی و اون وقت متوجه میشی که دنیای کنونی به سمت این نرم افزارها میرود

saied7468
یک شنبه 18 مرداد 1388, 13:18 عصر
علت در open source بود این سیتم عامله که باعث پیشرفت این نرم افزار شد
open source بودن نه تنها دلیل بر ضعف و امنیت پایین نیست بلکه باعث بالا بردن امنیت و جلوگیری از باگهای وحشتناک میشود

اگر در لینوکس حفره نفوذی پبدا شود بلافاصله 400 برنامه نویس حرفه ای از سراسر دنیا تلاش میکنن که اون حفره نفوذ رو بپوشونن

در مورد C#.NET هم همین نکته صدق میکنه که باعث توسعه میشه نه باعث عقب ماندگی

دوست عزیز شما داری غیاس معل فارق می کنی چرا :
1- C#.NET و کلا ویژوال استدیو اصلا open source نیستند و به نظر نمی یاد که روزی هم اینطور بشن چرا چون ماکروسافت کلی خرج کرد تا اونها رو توی بازار مطرح کنه و حالا باید دیوانه باشه که اونها رو open source کنه و فقط از پشتیبانی اونها پول در بیاره .

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

keivan mousavi
یک شنبه 18 مرداد 1388, 13:56 عصر
این یه ضعف محصوب می شه که محصولات دات نت در حال حاضر فایل های اجرایی که تولید می کنن امکان بر گردوندن اونها به سورس وجود داره .(البته همنطور که جناب bermooda گفتند باید روی سورسی که بر گردونه می شه کار کرد تا شکل قابل استفاده تبدیل شه . توی خیلی از مواقع برای افراد صرف می کنه که نرم افزاری رو که قیمتش توی بازار 70 میلیون هست (مثل حسابدار رایورز) رو روش کار کنن تا به شکل قابل استفاده بشه. )

کتاب NET DEVELOPER'S GUIDE. از سری کتابهای انتشاراتی MURCH'S جواب همین مطلبو که نوشتی بطور مفصل داده پیشنهاد میکنم این کتابو حتماً دانلود کنی


دوست عزیز شما داری غیاس معل فارق می کنی چرا :
1- C#.NET و کلا ویژوال استدیو اصلا open source نیستند و به نظر نمی یاد که روزی هم اینطور بشن چرا چون ماکروسافت کلی خرج کرد تا اونها رو توی بازار مطرح کنه و حالا باید دیوانه باشه که اونها رو open source کنه و فقط از پشتیبانی اونها پول در بیاره

دوست گرامي به همين خاط بود كه گفتم سرچ كن كسي منكر اين نشده كه تمام برنامه هايي كه با C#.NET نوشته ميشن OPEN SOURCE هستن من ميگم اگه شما تو سايت مايكروسافت بري و هرنوع پرتاليو سرچ كني شبه كد اين نرم افزارهارو ميده

در مورد لينوكس هم اين گزينه صادقه كه فقط CORE لينوكس OPEN SOURCE نه سيستمهايي كه شركتهايي مثل RED HAT, UBUNTU و MANDIFIER توليد ميكنن كه اگر اينگونه بود...

Amir Oveisi
یک شنبه 18 مرداد 1388, 14:45 عصر
در ضمن مايكروسافت سورس دات نت 3.5 رو بصورت آنلاين ارائه ميكنه كه اگه پلاگينش رو VS نصب بشه ميتونين آنلاين سورس كلاس هايي كه ميخواين ببينين. نكته ديگه اينه كه خود مايكروسافت ابزار ILDASM.EXE رو با VS داده كه ميشه سورس برنامه هاي دات نت رو ديد و براي آناليز برنامه ها ودستيابي به امنيت و performance بيشتر برنامه ها ازش استفاده كرد.
نتيجه: اين قضيه ممكنه براي عده اي يه ضعف محسوب بشه اما براي عده اي ديگه وسيله ايه براي توليد نرم افزارهاي امن تر و كامل تر.

موفق باشيد

Evil 69
یک شنبه 18 مرداد 1388, 16:03 عصر
دوست عزیز این .NET بیدی نیست که با این باد ها بلرزه کرک کردن برنامه هایی که با .NET نوشته می شن خیلی سخت تر هستش از برنامه هایی که با مثلا Delphi نوشته می شه . شاید یکی از دلایلش این باشه که برنامه به طور مستقیم تبدیل نمیشه بلکه اول به یک صورت خاص کد می شه بعد در زمان اجرا یک برنامه دیگه میاد و اون ها رو تبدیل می کنه به زبانی که سیستم عامل بتونه اون ها را کنترل کنه .
برای اینکه متوجه بشی کرک کردن برنامه های .net سخت تر هست از بقیه می تونی خودتامتحان کنی یک سری برنامه سورس هکر رو نصب کن با اونا تست بزن
من برات با Source Hacker , Pe Explorer,Restorer,Miltilizer,ollydbg , Source editor تست زدم و هیچ کدوم نتونستن Resource ها و کد های اسمبلی اون رو بکشن بیرون .
پس با خیال راحت به کارت برس

debugger
یک شنبه 18 مرداد 1388, 16:41 عصر
دوست عزيز نه تنها برنامه هاي دات نت بلكه تمام برنامه هايي كه تحت زبان هاي مختلف نوشته مي شوند قابل كرك شدن هستن . پس با اين اوصاف شما بايد اصلا برنامه ننويسيد

امنيت برنامه هاي دات نت هم بستگي به كد هاي نوشته شده و شيوه پروتكت اون داره .

Parham.D
یک شنبه 18 مرداد 1388, 17:56 عصر
من با آن دسته که میگن .NET امنیت داره موافق هستم. به هر حال سیستم دات نت فقط کد نویسی نیست، بلکه معماری و مهندسی است. کسانی که میخواهد یک برنامه بزرگ، جامع و گران بنویسد اول آن برنامه را طراحی میکنند (مهندسی و معماری) میکند. که امنیت یکی از بخشهای مهم آن است. این روزها کد نویس خوب زیاد هست که هر برنامه‏ای بنویسند. اما به نظر من کار اصلی را طراح انجام میدهد. طراح درک عمیق تری از دات نت دارد نسبت به برنامه نویس و حتی نوع مهندسی و طراحی، طراح نرم افزار بر روی کدی که برنامه نویس قرار است بنویسد تاثیر دارد.

Armin060
یک شنبه 18 مرداد 1388, 23:52 عصر
نگرانی شما از اينه كه يكی‌ بياد سورس نرم افزار شما رو به دست بياره و يه سری تغيرات توش ايجاد كنه ( مثلا قسمت About رو به نام خودش تغيير بده ) و با قيمت كمتر به فروش برسونه.

خوب برنامه هایی كه با زبان هایی مثل ++C و Delphi كه Native هستند نوشته شده اند رو هم ميشه اين كار رو كرد.
مثلا نرم افزار Notepad ويندوز با ++C نوشته شده. من يك سری تغييرات جزئی توی اين نرم افزار دادم و ميزارم واسه دانلود خودتون نگاه كنيد تا مطمئن بشيد.

1- منو Help > About به Help > About Barnamenevis.Org تغيير كرده.
2- قسمت Properties فايل exe سر برگ Version رو هم يه نگاهی بندازيد. Company از Microsoft Croporation به Barnamenevis.Org تغيير كرده.

alireza_tavakol
دوشنبه 19 مرداد 1388, 00:29 صبح
آرمین جان فکر کنم شما با نرم افزار Resource Hacker فایل notepad.exe رو باز کردی و عنوان منو About و مقدار ذخیره شده در فیلد CompanyName رو ویرایش کردی

حالا شما اگه فکر میکنی ++C امنیت نداره یه زحمت بکش ، خودت چند خط کد بنویس سپس فایل exe خودت رو توسط برنامه های Resourcer مربوط به سی پلاس پلاس decompile کن ، بعد متوجه میشی که دقیقا" به همون کد های اولیه که خودت نوشته بودی نرسیدی ولی یه کدی بهت داده میشه که همون کار کد خودت رو انجام میده!

در صورتی که بحث در مورد امنیت برنامه های نوشته شده به زبان های تحت پلتفرم دات نت فراتر از این حرفاست به شکلی که کل source کد های و الگوریتم های که نوشتی decompile میشه عین روز اول که خودت نوشته بودی

یعنی اگه برنامت open source باشه که هیچ والا بازم open source

Armin060
دوشنبه 19 مرداد 1388, 01:01 صبح
آرمین جان فکر کنم شما با نرم افزار Resource Hacker فایل notepad.exe رو باز کردی و عنوان منو About و مقدار ذخیره شده در فیلد CompanyName رو ویرایش کردی
بله


حالا شما اگه فکر میکنی ++C امنیت نداره
من كی گفتم ++C امنيت نداره؟؟؟ :کف::متفکر:


در كل فقط من می خواستم نشون بدم كه ميشه توی Native هم تغييرات ايجاد كرد. حتی ميشه الگوريتم برنامه برای انجام كاری رو هم تغيير داد.
توی اينجا دات نت نسبت به Native يه حسن داره، و اون اينه كه فرم ها و ديگر Object ها Resource نيستند. ( البته تو ++C ميشه اين كار رو كرد ولی تو Delphi نمی دونم )

حالا واسه اينكه جناب saied7468 يكم از امنيت دات نت مطمئن تر بشن من اينجا يه برنامه می زارم كه با دات نت نوشته شده. يه نگاهی بندازيد، ببينيد می تونيد اسم منوی About رو تغيير بديد!!

alireza_tavakol
دوشنبه 19 مرداد 1388, 01:21 صبح
حتی ميشه الگوريتم برنامه برای انجام كاری رو هم تغيير داد.

مشکل اینجاست که من نوعی نمی خوام ایده (سورس الگوریتم هام ) فاش بشه . برای من تغییرات اصلا" اهمیتی نداره

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

Armin060
دوشنبه 19 مرداد 1388, 01:28 صبح
شما برو ببين می تونی اون برنامه ای كه من گزاشتم رو Decompile كنید!

Amir Oveisi
دوشنبه 19 مرداد 1388, 11:58 صبح
مشکل اینجاست که من نوعی نمی خوام ایده (سورس الگوریتم هام ) فاش بشه .

ایده اگر آنقدر براتون با ارزش هست که نمیخواین فاش بشه یا برنامه الگوریتمش آنقدر حیاتی هست که فاش شدنش خسارات جبران ناپذیری به بار میاره اون موقع شما هم باید برای الگوریتم و ایده تون خرج کنید و با خرید ابزارهای .NET to Native برنامتون رو به Native Code تبدیل کنید که یه نمونه خوب همچین برنامه ای 1500 دلار قیمتشه! یا اینکه یه برنامه نویس حرفه ای ++VC کار استخدام کنید و برنامتون رو به زبان ++VC بنویسید.
یادمون باشه که همه کارهارو نمیشه با یک زبان انجام داد.

ali_kolahdoozan
دوشنبه 19 مرداد 1388, 12:34 عصر
کلا برنامه های دات نت اصلا امنیت ندارند و بهتر است هر کس نگران است سریعا به سراغ دیگر زبانها رفته و اصلا هم دیگر به دات نت فکر نکند . دات نت برای ما پیرمردها کافی است . بزارن ما باهاش همون پروژه های خودمون رو انجام بدیم .

saied7468
دوشنبه 19 مرداد 1388, 15:43 عصر
يه نگاهی بندازيد، ببينيد می تونيد اسم منوی About رو تغيير بديد!!
اسم منوی About تغییر کرد (http://barnamenevis.org/forum/showthread.php?p=777357#post777357)


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


در کل من فقط می خواستم به یه جواب منطقی برسم که چرا شرکتها برنامه هاشون ( بیشتر برنامه های تخصصی مد نظرم هست) رو با دات نت می نویسن با اینکه می دونن احتمالش وجود داره سورسشون لو بره .

alireza_tavakol
دوشنبه 19 مرداد 1388, 15:57 عصر
کلا برنامه های دات نت اصلا امنیت ندارند و بهتر است هر کس نگران است سریعا به سراغ دیگر زبانها رفته و اصلا هم دیگر به دات نت فکر نکند . دات نت برای ما پیرمردها کافی است . بزارن ما باهاش همون پروژه های خودمون رو انجام بدیم .

:قهقهه::قهقهه::قهقهه::قهقهه:

الحق حرف حساب جواب نداره!

ولی یه چیز ، هیچ روشن فکری نباید روی زبان برنامه نویسیش تعصب داشته باشه همان طوری که نباید روی رفتار ، اشخاص یا حتی دینی که بهش پایبندیم

تعصب داشتن اصلا" خوب نیست

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

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

emadfa
دوشنبه 19 مرداد 1388, 17:04 عصر
البته من از یک چیز تعجب می کنم: این که دوستان امنیت رو فقط در عدم decompile کردن برنامه می دونن!!!!
امنیت در برنامه نویسی یک مقوله کاملا تخصصی است و امنیت این که کد لو نره یکی از مسایل بسیار جزیی در برنامه نویسی است. ( در قیاس با سایر مقوله ها ). سایر مقوله ها ( امنیت در کدنویسی, امنیت در debugger , توابع داخلی و پایداری برنامه از مقوله های مهمتری هستند.

Open-Source
دوشنبه 19 مرداد 1388, 17:30 عصر
شما به هر زبونی که کد ننویسی در آخر تبدیل میشه به کد ماشین برای اجرا در کامپیوتر.

اگر کسی با زبون اسمبلی آشنا باشه ومبنای 16 رو بخوره به راحتی میتونیه برنامه ای رو که نوشتی(به هر زبونی) کرک کنه.

دات نت هم به همین صورت هستش فقط مشکلش اینه که دات نت کد رو به IL تبدیل میکنه سپس به کد ماشین تبدیل میکنه که کار رو برای کراکر ها یه خورده راحت تر کرده.



و همونطور که دوستمون گفت امنیت فقط لو رفتن یا نرفتن کد نیست.....

saied7468
دوشنبه 19 مرداد 1388, 18:48 عصر
سلام

البته من از یک چیز تعجب می کنم: این که دوستان امنیت رو فقط در عدم decompile کردن برنامه می دونن!!!!
دوست عزیز شما فرض کن بهترین روتین ها رو برای جلو گیری از کراک شدن در برنامه بکار بردی خوب وقتی کراکر بتونه سورس برنامه شما رو ببینه خیلی راحت می تونه بفهمه که :
1- اگر کراکر با برنامه نویسی آشنا باشه ==> این روتین ها چی هست و چطور باید باهاش مقابله کرد.
2-روتین ها رو کجا های برنامه نوشتی که این توی کراک کردن برنامه خیلی کمک میکنه .

بخاطر همین decompile رو مسئله مهمی می دونیم.

Amir Oveisi
دوشنبه 19 مرداد 1388, 19:14 عصر
امنیت به خیلی چیزها بیتگی داره که decompile شدن یه قسمتی از اونه اما همش نیست. اگر برنامه نویسی براش دیده نشدن کد خیلی مهمه بهتره بره سراغ زبان های دیگه اما این کار باعث نخواهد شد که برنامش کرک نشه!
در ضمن دیده شدن کد دلیلی بر این نمیتونه باشه که دات نت امنیت نداره.

موفق باشید

saied7468
دوشنبه 19 مرداد 1388, 20:39 عصر
خوب به نظر می یاد این تاپیک داره به میدون جنگ تبدیل میشه!!
من فکر می کردم دوستانی که با دات نت کار می کنن می تونن یه جواب منطقی برای سوالم بهم بدن اما انگار نشد .
با این حال از همه دوستانی که سعی کردن منو راهنمایی کنن تشکر می کنم.

keivan mousavi
دوشنبه 19 مرداد 1388, 20:45 عصر
(با کنایه خوانده شود) رشته جدید دانشگاهی به نام علوم رایانه داریم که کارش طراحی زبانهای برنامه نویسی هستش پیشنهاد میکنم به خاطره اینکه این قائله ختم به خیر شود توی این رشته تحصیل کنید و خودتون برای خودتون زبان برنامه نویسی ابداع کنید

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

من نمیخوام دو زبان برنامه نویسی رو با هم مقایسه کنم چرا که مقایسه این دو مانند مقایسه دو رشته رزمی میباشد شما نمی توانید بگویید که کدام کامل تره چرا که در هرکدام اگر به درجه استادی برسید میتوانید بر هر مشکلی غلبه کنید
در مورد NET. و دلفی هم این مسئله مصداق داره
NET. ممکن ضعفهایی داشته باشه که حتماً همین طور هست ولی امکاناتش از رقیبه دیرینه خود یعنی دلفی خیلی بیشتره و کسی نمیتونه این مسئله رو انکار کنه

alireza_tavakol
سه شنبه 20 مرداد 1388, 01:06 صبح
من بعد از مطالعه کل پست ها و تجربه شخصی به نتایج زیر رسیدم


1- کلا" معماری دات دانت خیلی محبوبه و علت محبوبیتش به خاطر قدرت و سهولت در پیاده سازی برنامه ها است

2- یکی از نقاط ضعف دات نت Decompile شدن برنامه های نوشته شده است که البته این موضوع خیلی مهم نیست ( البته به نظر من Microsoft باید این لکه ننگ از دامن دات نت پاک کنه )

3- در برابر این نقط ضعف ابزار هایی وجود داره که میشه حتی کد های Decompile شده را به گونه ای ناخوانا جلوه داد

4- موضوع امنیت فرار تر از بحث Decompile شدنه که البته من نمی دونم چطوری قرار جواب پست 23 (http://www.barnamenevis.org/forum/showpost.php?p=777607&postcount=23) رو بدم:کف:

debugger
سه شنبه 20 مرداد 1388, 10:54 صبح
به نظر من هر كي يه كرك مي بنويسه تا با تست اونا بتونيم به يك معماري با امنيت بالا برسيم .

تست هم با من !

Amir Oveisi
سه شنبه 20 مرداد 1388, 12:02 عصر
موضوع امنیت فرار تر از بحث Decompile شدنه که البته من نمی دونم چطوری قرار جواب پست 23 رو بدم

پست 23:

دوست عزیز شما فرض کن بهترین روتین ها رو برای جلو گیری از کراک شدن در برنامه بکار بردی خوب وقتی کراکر بتونه سورس برنامه شما رو ببینه خیلی راحت می تونه بفهمه که :
1- اگر کراکر با برنامه نویسی آشنا باشه ==> این روتین ها چی هست و چطور باید باهاش مقابله کرد.
2-روتین ها رو کجا های برنامه نوشتی که این توی کراک کردن برنامه خیلی کمک میکنه .

بخاطر همین decompile رو مسئله مهمی می دونیم.

ببینید این حرف کاملا درسته اما بحث سر اینه که با اینکه میدونیم کدهامون دیده خواهند شد حالا چجوری باز هم امنیت برنامه رو حفظ کنیم. یه مثال از خودم میزنم شاید منظورم بهتر بیان بشه. من تو خیلی از برنامه هایی که نوشتم و امنیت یک قسمت از کدم برام یا برای اون شرکت خیلی مهم بوده از چند روش استفاده می کنم:
1- از packer ها و Obfuscator ها استفاده میکنم>
2- اون قسمت هایی که نمیخوام کدم دیده بشه رو با ++C بصورت dll مینویسم و استفاده میکنم تو برنامم.
3- اون قسمت هایی که نمیخوام کدم دیده بشه و یا در دسترس کاربر اصلا نباشه از Web Service ها استفاده میکنم.
و ...

حالا استفاده درست از روش های رمزنگاری اطلاعات مهم به جای خودشه و حتما باید استفاده بشه.
خوب حالا با در نظر گرفتن این شرایطی که عرض کردم فرض کنید یکی بیاد کد شما رو هم ببینه. چه چیز مفیدی دستگیرش خواهد شد؟

یه مطلب دیگه هم در مورد برنامه هایی که با دات نت نوشته میشه وجود داره اونم اینه که برنامه ها و کلا اسمبلی های دات نت یه ویژگی دارن به نام Strong Name که یه Hash Code هست که برای هر اسمبلی مقدار یکتایی داره و بر اساس محتویات و کدهای اون اسمبلی موقع کامپایل بدست میاد. هر موقع که .NET Loader میخواد برنامه رو اجرا کنه Strong Name اونرو با مقدار اصلیش مقایسه میکنه و تنها در صورتی اجازه اجرا شدن بهش میده که مقدار این Strong Name برابر مقدار اصلیش باشه. بنابراین اگر حتی یک بیت هم از اون برنامه به هر روشی تغییر کنه مقدار Strong Name اون عوض خواهد شد و دیگه اجازه اجرا نخواهد داشت.
مگر اینکه برنامه دوباره کامپایل بشه که اینکار مستلزم تبدیل سورس برنامه به سورس های قابل اجراست که با وجود اینکه نرم افزارهایی هستن که این کار رو انجام میدن اما باز هم اگر برنامه یکم پیچیده نوشته شده باشه و حجیم باشه کار خیلی سختیه...

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

موفق باشید

alireza_tavakol
سه شنبه 20 مرداد 1388, 13:00 عصر
2- اون قسمت هایی که نمیخوام کدم دیده بشه رو با ++C بصورت dll مینویسم و استفاده میکنم تو برنامم.


ببخشید مگه با ++C هم میشه فایل DLL ایجاد کرد؟:متفکر:

اَرژنگ
سه شنبه 20 مرداد 1388, 17:45 عصر
مشکل اینجاست که من نوعی نمی خوام ایده (سورس الگوریتم هام ) فاش بشه . برای من تغییرات اصلا" اهمیتی نداره

یکی از این الگریتمهایی که اینقدر مهم هستند بگید چه کاری انجام میده. از لحاظ امنیتی دات نت هیچ چی کم ندارد، به اندازه کافی مقاله در مورد امنیتی دات نت در سایت مایکروسافت وجود دارد، اگر کسی در مسائل امنیتی دات نت مشکلی پیدا کند، به احتما زیاد مایکروسافت بهش پیشنهاد استخدام میده!

اَرژنگ
سه شنبه 20 مرداد 1388, 18:00 عصر
سلام

دوست عزیز شما فرض کن بهترین روتین ها رو برای جلو گیری از کراک شدن در برنامه بکار بردی خوب وقتی کراکر بتونه سورس برنامه شما رو ببینه خیلی راحت می تونه بفهمه که :
1- اگر کراکر با برنامه نویسی آشنا باشه ==> این روتین ها چی هست و چطور باید باهاش مقابله کرد.
2-روتین ها رو کجا های برنامه نوشتی که این توی کراک کردن برنامه خیلی کمک میکنه .

بخاطر همین decompile رو مسئله مهمی می دونیم.


اگر برنامه واقعا خوب باشد کپیش را درست میکنند. اگر واقعا این موضوع مهم باشد، یک برنامه واقعی ( تجاری ) را که با دات نت نوشته شده و کسی دی کمپایلش کرده وازش مانند اینکه خودش درست کرده و پشتیبانی میکند را مثال بدید. این طرز تفکر ربط دادن دیکمپایل نشدن برنامه را به امنیت ربط دادن حقیقت خارجی ندارد. از لحاظ تجسمی، بله میشه یک پله یک پله به ماه راه ساخت ولی در واقعیت کی این کار را انجام داده؟

در مورد کرک، برنامه‌هایه غیره دات نت را هم کرک میکنند، تنها برنامهایه را کرک نمیکنند که ارزش کرک کردن نداشته باشد. دات نت یا غیره دات نت، برنامه درست حسابی که کرک نشده باشد را کسی سراغ دارد؟

اَرژنگ
سه شنبه 20 مرداد 1388, 18:09 عصر
من بعد از مطالعه کل پست ها و تجربه شخصی به نتایج زیر رسیدم

2- یکی از نقاط ضعف دات نت Decompile شدن برنامه های نوشته شده است که البته این موضوع خیلی مهم نیست ( البته به نظر من Microsoft باید این لکه ننگ از دامن دات نت پاک کنه )

3- در برابر این نقط ضعف ابزار هایی وجود داره که میشه حتی کد های Decompile شده را به گونه ای ناخوانا جلوه داد

4- موضوع امنیت فرار تر از بحث Decompile شدنه که البته من نمی دونم چطوری قرار جواب پست 23 (http://www.barnamenevis.org/forum/showpost.php?p=777607&postcount=23) رو بدم:کف:

۲. نتیجه گرفته شده بر حسبه فرضهایه اشتباه است. در نتیجه نظرتان اشتباه است. چرا جاوا را فراموش کردید؟ همین شرائط در جاوا هم وجود دارد، پس چرا کسی در مورد کمبود امنیت جاوا مشکلی نمیبیند؟
۳. ناخوانا کردن فقط برایه دات نت نیست، برنامه هایه غیره دات نت را هم ناخوانا میکنند. پس این مشکل را نمیشه فقط به استفاده از دات نت ربط داد.

۴.چواب پست ۲۳ را در پست قبلیم دادم.

Armin060
سه شنبه 20 مرداد 1388, 18:22 عصر
به اندازه کافی مقاله در مورد امنیتی دات نت در سایت مایکروسافت وجود دارد
ميشه بگيد كجاش؟

اَرژنگ
سه شنبه 20 مرداد 1388, 18:28 عصر
ميشه بگيد كجاش؟

http://msdn.microsoft.com/en-us/library/ms998408.aspx

ali_kolahdoozan
سه شنبه 20 مرداد 1388, 19:55 عصر
امنیت یک کلمه نیست با سورس شدن یا نشدن برقرار یا نقض بشه . در ضمن میزان سورس شدن آنقدر نیست که همه چیزو بریزه بیرون . ضمننا من الان که یک پروژه تحویل شهرداری دادم کی میاد بره که سورش کنه ؟ شما خودت میگی شرکتها . خوب شرکتهایی که برای جاهای بزرگ کار کنند نیازی ندارند که زیاد هم خودشون رو بیچاره کنند . ضمننا میتونی با روشهایی جلوی این اندک سورس شدن رو هم بگیری

وقتی پروژه بزرگ شد دیگه راه کارها و تحلیلها مهم میشه و پشتیبانی دیگر exe ارزش نداره

saeed2rele
سه شنبه 20 مرداد 1388, 20:12 عصر
البته دوستان باید به این نکته توجه داشته باشن که منظور از امنیت در این تاپیک فقط فاش نشدن سورس کد برنامه است نه مسائل دسترسی و یا لایه های امنیتی در برنامه نویسی.
به نظر من هم این مسئله مشکل بزرگیه. وقتی کسی میخواد یه برنامه جدید بنویسه وقت زیادی صرف آنالیز میکنه و برای انجام اون کار یه راه حل پیدا میکنه اونوقت هر کسی میاد با دیدن سورس کد حاصل زحمت اون رو میبره.
اما از طرف دیگه انگار چاره دیگه ای نیست و باید با این خصوصیت پلتفرم های دات نت و جاوا ساخت.
درسته پلتفرم جاوا هم دقیقا همین خصوصیت رو داره.

اَرژنگ
سه شنبه 20 مرداد 1388, 20:22 عصر
البته دوستان باید به این نکته توجه داشته باشن که منظور از امنیت در این تاپیک فقط فاش نشدن سورس کد برنامه است نه مسائل دسترسی و یا لایه های امنیتی در برنامه نویسی.
به نظر من هم این مسئله مشکل بزرگیه. وقتی کسی میخواد یه برنامه جدید بنویسه وقت زیادی صرف آنالیز میکنه و برای انجام اون کار یه راه حل پیدا میکنه اونوقت هر کسی میاد با دیدن سورس کد حاصل زحمت اون رو میبره.
اما از طرف دیگه انگار چاره دیگه ای نیست و باید با این خصوصیت این پلتفرم دات نت و جاوا ساخت.
یک مثال که این اتفاق واقعه شده را کسی ازش خبر دارد؟ الگریتهمایه سطح بالا که بدرد دزدی بخورند را حتی با مدارک کامل نمیشه دستگیر شد، چه برسه اینکه یکی با کد کج مواجی که رفلکتر بدست میده را استفاده کند که ازش سر دربیاره. ۹۹٪ مواقع برنامه ها درمورد بازکردن فرم ویا ریختن داتا در گرید هستند. تا حالا ندیدم که کسانیکه که کدشان بدرد بدست آودرن باشد در این مورد جاوا و یا دات نت شکایتی کرده باشند.

alireza_tavakol
چهارشنبه 21 مرداد 1388, 00:42 صبح
بعد از پست هایی که در بالا خوندم نکات زیر را به عنوان جواب به پست های آقای ( کلاهدوزان و ارژنگ ) عرض میکنم ( پس لطفا" پست های بالا رو کامل و با دقت بخوانید )

قضیه اول : تبدیل exe به Source
دوستان یک فایل exe بزارین در بخش امنیت همین سایت و عنوان تاپیک رو بزارین Crack Me دوستان نفوذگر ، source کامل اون فایل exe رو ظرف کمتر از 30 دقیقه upload می کنند ( نمونش پست 14 همین تاپیک )
پس باید قبول کنیم که فایل اجرایی دانت رو میشه به کد منبعش تبدیل کرد ، عین روز اولش ، حالا اگه من یا شما قادر به انجام این کار نیستیم دلیلش این نیست که این کار شدنی نیست

قضیه دوم :درجه اهمیت فاش شدن کد منبع
شرکت مایکروسافت در سال 1980 به وجود آمد و در سال 1981 اولین نسخه سیستم عامل DOS رو به بازار ارائه کرد. از آن زمان تا به امروز نرم افزار های متعددی ساخته است و به عنوان یکی از بزرگترین شرکت های نرم افزاری درآمد سرشاری داشته است. به نظر بنده حقیر علت این درآمد سرشار حفظ امنیت source کد های سیتم عامل های این شرکت بوده ، یعنی اگه از روز اول هر سیستم عاملی می ساخت به صورت کد باز ارائه می داد حتما شرکت های دیگر با تغییرات جزیی یا کلی می توانستند سیستم عامل بهتری نسبت به مایکروسافت ارئه کنند و رقیب تجاری این شرکت بشوند.
پس منی که برنامه نویسی را به عنوان شغل آیند خود انتخاب کرده ام ، باید نیاز های اقتصادی من از این راه تامین گردد و این امر در گرو فاش نشدن کد های برنامه من است و در غیر این صورت ممکن است برنامه من توسط دیگران کامل تر و بهتر شود و درآمدی که باید به جیب من برسد به شخص دیگری میرسد.
و همون طوری که می دونید خود شرکت مایکروسافت حتی حاضر نیست اطلاعات پایه ای سیستم عامل های خود را در اختیار شرکت های تولید کننده نرم افزار بگذارد ، پس وای به روزی که source کد های سیستم عامل هاش فاش بشه!

قضیه سوم :روش های جلو گیری از Decompile
اگر ما اعتقاد داریم که روش هایی برای جلوگیری از resource شدن فایل های اجرایی است پس چرا خود مایکروسافت که به قول ارژنگ جون خیلی به امنیت پایبنده به میدان عمل نمی آید و توسط ابزار های ابتکاری و یا ابزار های تولید شده توسط دیگر شرکت ها ، کد برنامه های تولید شده به IL رو کاملا" ایمن نمی کنه که این مشکل بوجود نیاد


قضیه چهارم : نرام افزار های بزرگ غیر قابل نفوذ تا به امروز
نرم افزاری به اسم سایتکت وجود دارد برای مانیتورینگ دستگاه های PLC که دو نسخه از این نرم افزار برای شرکت زیمنس و اشنایدر تولید شده
قیمت این نرم افزار در ایران حدود 1400/000 تومان است و تا امروز هیچ نسخه قفل شکسته ای از سایتکت وجود ندارد
البته این نرم افزار ورژن های مختلفی داره من ارزان ورژن رو خدمتتون عرض کردم

قضیه پنجم : اهمیت فاش نشدن سرس فایل های اجرایی تولید شده توسط شرکت های بزرگ
آقای کلاه دوزان فرموده بودن : وقتی پروژه بزرگ شد دیگه راه کارها و تحلیلها مهم میشه و پشتیبانی ، دیگر exe ارزش نداره
اگه فایل اجرایی اون برنامه ای رو که شما واسه شهر داری نوشین رو یکی از کارمندان شهرداری بهش نفوذ کنه و رمز عبور پایگاه داده های شما فاش بشه و...
البته منم می دونم که خیلی راه برای جلوگیری از این اتفاق وجود داره ولی فرض محال که محال نیست ، اگه فرضا" رمز عبور پایگاه داده ها فاش بشه اون برنامه هیچ ارزشی نخواهد داشت
پس یکی از دقدقه های همه برنامه نویسان و شرکت های بزرگ حفظ تمام بخش های برنامه ارائه شده است

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

من خودم معماری دات نت رو دوست دارم:قلب:. بهش ایمان دارم :متعجب:. و تمام این حرف ها رو زدم تا با هم همفکری کرده باشیم ، و هیچ کس فکر نه منظور من توی این پست اینکه دات نت بده و باید بزاریمش کنار یا اینکه بگم جاوا یا ++C خیلی بهتر از دانت هستند!

ali_kolahdoozan
چهارشنبه 21 مرداد 1388, 09:48 صبح
اگر من exe گذاشتم و نتوانستید سورس کنید چی میگید اون وقت ؟؟ رمز پایگاه داده ما رو هم کسی داشته باشه باز هم هیچ کاری نمی تواند بکند پروژه های ما در بستر کاری gis است . فقط 2 تا ابزار توش هست خودمان هم نصف روز کار داره تا روی سرور بیاریمش بالا و لایسنس ها هم فقط دست ماست . وقتی کار بزرگ شد از این حرفها میاد بیرون اما همینجا بازم میگم من وقت ندارم برم توی crack me و اینها می خواهید میزارمش همین جا هر کس خواست سورس کنه و بزاره

ASKaffash
چهارشنبه 21 مرداد 1388, 14:06 عصر
سلام به همه دوستان که در بحث شرکت کرده اند
راستش را بخواهید من اصلا متوجه نشدم که خلاصه اوزوم بوروم حلال است یا حرام برای این منظور
من یک Exe کوچولو قرار دادم که یک رشته ورودی درخواست میکند لطفا دوستان هرکس میتواند بگوید رشته ورودی چیست ؟ بعد سورس آن را قرار میدهم

ahmadsystemco
چهارشنبه 21 مرداد 1388, 14:23 عصر
سلام دوستان
این کد شما دوست عزیز



private void button1_Click(object sender, EventArgs e)
{ string str = ""; char[] chArray = new char[] { 'A', 'K', 'U', 'B' };
for (int i = 0; i < chArray.Length; i++)
{
str = str + chArray[i].ToString();
}
MessageBox.Show((this.textBox1.Text == str) ? "Ok" : "Not");
}


و آن رشته برابر است با AKUB
راه چاره چیست ؟

ahmadsystemco
چهارشنبه 21 مرداد 1388, 14:28 عصر
فکر کنم منظور دوست عزیز پیچیدگی فهمیدن رشته بوده ؟؟؟؟

ASKaffash
چهارشنبه 21 مرداد 1388, 14:36 عصر
سلام و تشکر از شما دوست عزیز
با چه ابزاری DeCode کردید؟ و چی باید نوشت تا Decompile نشود؟
کدمن این بود چرا متغیر Crack نیست ؟


bool Crack = false;
string SumC = "";
char[] C = new char[] { (char)65, (char)75, (char)85, (char)66 };
for (int i = 0; i < C.Length; i++)
SumC += C[i].ToString();
Crack = this.textBox1.Text == SumC;
MessageBox.Show(Crack ? "Ok" : "Not");

ahmadsystemco
چهارشنبه 21 مرداد 1388, 14:44 عصر
سلام و تشکر از شما دوست عزیز
با چه ابزاری DeCode کردید؟ و چی باید نوشت تا Decompile نشود؟
دوست عزیز بحث اینجا با چی decode کردی نیست.
بحش ما اینه که نذاریم decode بشه یا اگه decode میشه نتونن هکش کنند.
ولی بهر حال: با .Net Reflector دی کد شده.

ahmadsystemco
چهارشنبه 21 مرداد 1388, 14:49 عصر
سلام
ااا چی شد ؟؟؟؟؟
این را من از Reflector گرفتم.

دوستان کمک کنید ببینیم چی شد.
شما مطمئنید کدتان همین است ؟؟؟؟

ali_kolahdoozan
چهارشنبه 21 مرداد 1388, 15:01 عصر
میشه منم یک exe بزارم؟ با زدن دکمه اگر رمز رو درست بدهید یک پیام مناسب میدهد

این تازه 20% از تحرکات امنیتی بنده است

ASKaffash
چهارشنبه 21 مرداد 1388, 15:07 عصر
سلام
درست است که رشته لو رفته ولی نتیجه متفاوت است ظاهر متغیر Crack حذف شده!

ahmadsystemco
چهارشنبه 21 مرداد 1388, 15:13 عصر
سلام
درست است که رشته لو رفته ولی نتیجه متفاوت است ظاهر متغیر Crack حذف شده!
درسته
فکر کنم بشه نتیجه گرفت ( البته از بحث این دی کد کردن ) :
که اگر پروژه بزرگی داشته باشیم و آن را جوری خاص برنامه نویسی کنیم ( با استاندارد های از پیش تعریف شده ) می توان از هک شدن آن جلوگیری کنیم.
ولی با این حال باز هم برنامه شما قابل وارد شدن است.
اگر یکی از دوستان پروژه بزرگتر باامنیت بالاتری بگذارد بهتر است. ( اساتید کجایید ما اینجا ایم بیایید :لبخند:)

ASKaffash
چهارشنبه 21 مرداد 1388, 15:21 عصر
سلام
خدا خیرت دهد سرچ کردم Free نرم افزار را پیدا نکردم میشود یک جوری به ما هم کپی Reflector را بدهید

hozouri
چهارشنبه 21 مرداد 1388, 15:37 عصر
دوستان من این رو می گم همونطور که هیچ انسانی کامل نیست هیچ زبان برنامه ای هم کامل نیست حالا چه برسه به زبان های برنامه نویسی ... مسلماً من نوعی اگر دارم با هم زبان برنامه نویسی نرم افزار خودم رو می نویسم خودم تدابیر شدید امنیتی (نظیر : کد فعال سازی , قفل یو اس بی , شماره سریال نرم افزار و ... )رو روی نرم افزار رعایت می کنم .
دات نت دلیلی بر اینکه امنیتی نداره نیست ...
اگر اینطور باشه خوب سیستم عامل ویندوز رو وقتی Crack می کنن که اون رو با سی نوشتن چی باید بگیم ...

alireza_tavakol
چهارشنبه 21 مرداد 1388, 15:41 عصر
دوستان به موضوع تاپیک دقت بکنند و بعد پست بزارن

1- ما اینجا دررابطه با نرم افزار Reflector بحث نمی کنم
2- اینجا بخش امنیت سایت نیست که فایل Exe بزارین و Decompile کنید
و...

لطفا درباره موضوع تاپیک بحث نمایید ( با تشکر از مدیران که پست های اضافی رو حذف میکنند [ فکر کنم این پست منم باید حذف شه ] )

mahmoodramzani
چهارشنبه 21 مرداد 1388, 15:57 عصر
فکر می کنم اگه تعدادی مقاله در مورد Obfuscate کردن بخونید خوب باشه.
درسته که decompile کردن برنامه Native خیلی سخت تر از برنامه هایی که با .NET و یا جاوا نوشته شده اما توی مطالبی که خوندم یادم نمی یاد که از این موضوع به عنوان ضعف امنیتی اسم برده باشن.

ASKaffash
چهارشنبه 21 مرداد 1388, 16:58 عصر
سلام به همه دوستان
حالا چه جوری برنامه بنویسیم که خیلی راحت نشه Decomplie کرد رفتم Decompile بعضی از ابزارها مثل ActiveReport3 , Janus2008 را دیدم به نظرم اگر کسی وقت بذاره میتونه یک کارهائی انجام بده فقط یک کم بیشتر پیچونده بودن! لطفا دوستان با تجربه یک راهنمائی یک چیزی بکنند (قول میدیم جبران کنیم)

alireza_tavakol
چهارشنبه 21 مرداد 1388, 17:51 عصر
با سلام و عرض ارادت به همه دوستان

من فکر میکنم همه در این واقعیت شک نداشته باشند که اصلی ترین محصول شرکت مایکروسافت سیستم عاملی است که تولید می کند.تا اونجایی که من یادم می آید هر وقت شرکت مایکروسافت سیستم عاملی رو تولید کرده چند وقت بعد توسط هکرها حفره های امنیتی اون سیستم عامل کشف شده و به گوش جهانیان اطلاع رسانی شده. وجود Service Pack های شرکت مایکروسافت برای سیستم عامل های تولید شدش این واقعیت رو اثبات می کنه.
حالا اگه بخواهیم بدون غرض ورزی به دیگر محصولات مایکروسافت ( دات نت ) نگاه کنیم ، احتمال این وجود خواهد داشت که توی دات نت هم حفره امنییتی وجود داشته باشه . در جواب آقای ارژنگ :
از لحاظ امنیتی دات نت هیچ چی کم ندارد، به اندازه کافی مقاله در مورد امنیتی دات نت در سایت مایکروسافت وجود دارد، اگر کسی در مسائل امنیتی دات نت مشکلی پیدا کند، به احتما زیاد مایکروسافت بهش پیشنهاد استخدام میده!

اما در جواب آقای حضوری که گفته بودن :
سیستم عامل ویندوز رو وقتی Crack می کنن که اون رو با سی نوشتن چی باید بگیم ...
توی یک برنامه تلوزیونی آقای خسرو معتضد (یکی از بزرگتر مورخین ایران ) میگفتد : زمانی انگلیس تریاک رو به رایگان در اختیار ایرانی ها قرار میداده و بعد از اینکه تریاک کشیده شد ، سوخته های تریاک رو از ایرانی ها می خریده!!! تا با اینکارش اکثر مردم ایران رو معتاد بکنه
من فکر میکنم اکثر این Crack هایی که برای سیستم عامل ویندوز نوشته میشه به صورت غیر مستقیم زیر نظر شرکت مایکروسافت می باشد تا به اهداف بلند مدت خود دست پیدا بکنه ! باید توجه داشته باشیم که ، وقتی توی همین سایت کاربرانی وجود دارند که ادعا می کنند کاملا" امن کد مینویسن ، پس شرکت مایکروسافت هم می تواند در حالت امن سیستم عامل های خود را توسعه دهد !

اما به قول آقای ASKaffash خیلی خوب می شود اگه آقای ali_kolahdoozan که تجربه عملی در زمینه پروژهای تجاری بزرگ دارند و اعتقاد کامل به امنیت برنامه ها شون دارند ، توضیحاتی در مورد مراحل و راه کار های استاندارد سازی برنامه های safe بدهد . البته خیلی بهتر می شد اگه راه کارهایی که ارئه می دهند ابتکاری و تجربی باشد همچنین کامل (با تمام جزئیات) بیان کنند.
با تشکر از ایشان و دیگر اساتید پاسخ دهند .

ali_kolahdoozan
چهارشنبه 21 مرداد 1388, 20:37 عصر
من که یک exe گزاشتم . برید یک نگاهی بهش بیندازید تا بعد توضیح بدهم

vcldeveloper
چهارشنبه 21 مرداد 1388, 23:05 عصر
همینطور که اگه با ++C یا Delphi یا هر زبان دیگه ای نوشته بشه باز هم همین قدر امکانش هست که برنامه کرک بشه.

دوست عزیز این .NET بیدی نیست که با این باد ها بلرزه کرک کردن برنامه هایی که با .NET نوشته می شن خیلی سخت تر هستش از برنامه هایی که با مثلا Delphi نوشته می شه . شاید یکی از دلایلش این باشه که برنامه به طور مستقیم تبدیل نمیشه بلکه اول به یک صورت خاص کد می شه بعد در زمان اجرا یک برنامه دیگه میاد و اون ها رو تبدیل می کنه به زبانی که سیستم عامل بتونه اون ها را کنترل کنه .

دو مطلب فوق صحیح نیستند. کدهای دات نت علاوه بر اینکه قابلیت خوانایی IL بالاتر از اسمبلی سخت افزار مقصد هست، Meta data کاملی را با خودشان حمل می کنند که می توان با کمک آن کد ساختار کد را بازسازی کرد.
همچین چیزی در کدهای Native به این شکل وجود نداره، و ادعای اینکه در این زمینه وضعیت کدهای دات نت با کدهای Native دلفی یا ++C برابر (یا بهتر!!) هست، ادعای اشتباهی است.


توی اينجا دات نت نسبت به Native يه حسن داره، و اون اينه كه فرم ها و ديگر Object ها Resource نيستند. ( البته تو ++C ميشه اين كار رو كرد ولی تو Delphi نمی دونم )
همانطور که گفتم، دات نت Meta data هر ماجول را در همان ماجول نگهداری میکنه، و در این زمینه خاص برتری نسبت به ++C یا دلفی نداره. دلفی در صورت استفاده از Form Designer آن، ساختار رابط گرافیکی کاربر را بصورت Resource نگهداری میکنه. در نهایت با این Resource شما به رابط گرافیکی کاربر دسترسی پیدا خواهید کرد، نه به کد نوشته شده. البته برای برنامه نویس دلفی این امکان وجود داره که فرم را در Runtime تولید کنه، یا مثل ++C کاملا از دستورات Win32 API برای ساخت رابط کاربر استفاده کنه. انتخاب با برنامه نویس هست.


ایده اگر آنقدر براتون با ارزش هست که نمیخواین فاش بشه یا برنامه الگوریتمش آنقدر حیاتی هست که فاش شدنش خسارات جبران ناپذیری به بار میاره اون موقع شما هم باید برای الگوریتم و ایده تون خرج کنید و با خرید ابزارهای .NET to Native برنامتون رو به Native Code تبدیل کنید که یه نمونه خوب همچین برنامه ای 1500 دلار قیمتشه!
اون وقت باید برنامه نویس از بخشی از قابلیت های دات نت مثل Portability یا Optimize کردن کد بر اساس معماری سیستم مقصد، بگذره. در اون صورت تنها دلیل عمده ایی که کسی بخواید برنامه را با دات نت بنویسه کتابخانه کلاس های دات نت خواهد بود.


کدمن این بود چرا متغیر Crack نیست ؟
بخاطر اینکه کامپایلر کد شما را Optimize کرده و در فرایند optimize کردن کد، متغیر Crack را فاقد ارزش تشخیص داده، و آن را از کد حذف کرده.

در این زمینه خاص، مشکل دات نت در ذخیره Meta data بدون حفاظت مشخص هست، و برنامه نویس باید خودش با ابزارهای مختلف این اطلاعات را به نوعی حفاظت کنه، در حالی که میشد این قابلیت را ایجاد کرد که در هنگام کامپایل این بخش از اطلاعات با یک سری حفاظت های خاص در فایل نوشته بشند.

saeed2rele
پنج شنبه 22 مرداد 1388, 01:00 صبح
پس با این حساب سی شارپ تعطیل همه میریم که سی پلاس پلاس کار کنیم. :بامزه:

keivan mousavi
پنج شنبه 22 مرداد 1388, 01:39 صبح
پس با این حساب سی شارپ تعطیل همه میریم که سی پلاس پلاس کار کنیم

این حرف اصلاً درست نیست و مقایسه بین این دو زبان هم اصلاً کار درستی نیست
C++ زبان سطح بالایی هستش که باهاش کارهای بزرگتری مثل نوشت ویندوز و لینوکس میشه باهاش انجام داد
اما C#.NET یک زبان Object oriented هستش و تمام خواص مربوط به این تکنولوژی را داراست و بوعد برنامه نویسی را در همین چهار چوب حرکت میده
البته با C++ هم میتوان Object oriented کار کرد ولی مستلزم کار بسیار زیادی هستش



دو مطلب فوق صحیح نیستند. کدهای دات نت علاوه بر اینکه قابلیت خوانایی IL بالاتر از اسمبلی سخت افزار مقصد هست، Meta data کاملی را با خودشان حمل می کنند که می توان با کمک آن کد ساختار کد را بازسازی کرد.
همچین چیزی در کدهای Native به این شکل وجود نداره، و ادعای اینکه در این زمینه وضعیت کدهای دات نت با کدهای Native دلفی یا ++C برابر (یا بهتر!!) هست، ادعای اشتباهی است
با اجازه از استاد
میخواستم بگم خانواده استادیو که از سال 2000 به بازار آمد در هر بار ورود نسل جدید خود به بازار پیشرفتهای شایانی انجام داد و به نظر من این موردی که شما فرمودید به احتمال خیلی زیاد در ورژنهای بعدی امکان رفع عیب وجود دارد

alireza_tavakol
پنج شنبه 22 مرداد 1388, 07:09 صبح
با عرض سلام خدمت آقای موسوی




پس با این حساب سی شارپ تعطیل همه میریم که سی پلاس پلاس کار کنیم
این حرف اصلاً درست نیست و مقایسه بین این دو زبان هم اصلاً کار درستی نیست


به نظر من مقایسه باید انجام بشه تا محاسن و معایت هر کدوم از زبان های برنامه نویسی مشخص بشه تا در زمینه های مختلف کاری مناسب ترین زبان رو انتخاب کنیم.



با C++ هم میتوان Object oriented کار کرد ولی مستلزم کار بسیار زیادی هستش

میشه بیشتر توضیح بدین منظورتون از کار بسیار زیاد چیه؟؟؟
چون من با ++c که برنامه های Object Oriented مینوشتم حدودا" 90% Syntax شی گرای مثل #C بود!



میخواستم بگم خانواده استادیو که از سال 2000 به بازار آمد در هر بار ورود نسل جدید خود به بازار پیشرفتهای شایانی انجام داد و به نظر من این موردی که شما فرمودید به احتمال خیلی زیاد در ورژنهای بعدی امکان رفع عیب وجود دارد

مشکل اینجاست که مایکروسافت و پیروانش اصلا" این موضوع رو عیب نمیدانند و کاملا" از موضع قدرت صحبت میکنند و ادعا میکنند یکی محاسن دات نت اینکه کد Native تولید نمیکنه و این امر باعث به وجود آمدن برنامه های مستقل از پلتفرم در سیستم مقصد می شود.
در صورتی که به نظر بنده حقیر باید مایکروسافت امکانی رو در IDE VS قرار می داد تا خود برنامه نویس بسته به شرایط اختصاصی خودش تعیین کنه که کد Native به وجود بیاد یا کد IL

با تشکر از جناب آقای کشاورز


بخاطر اینکه کامپایلر کد شما را Optimize کرده و در فرایند optimize کردن کد، متغیر Crack را فاقد ارزش تشخیص داده، و آن را از کد حذف کرده.

من فکر میکنم که این فرآیند optimization توسط کامپایلر صورت نگرفته و Reflector بوده که باعث حذف شدن متغییر های بلا استفاده میشه (برای مقابله با نرم افزار هایی که باعث ناخوانا شدن کد ها می شوند)

اَرژنگ
پنج شنبه 22 مرداد 1388, 10:42 صبح
به نظر من مقایسه باید انجام بشه تا محاسن و معایت هر کدوم از زبان های برنامه نویسی مشخص بشه تا در زمینه های مختلف کاری مناسب ترین زبان رو انتخاب کنیم.


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



میشه بیشتر توضیح بدین منظورتون از کار بسیار زیاد چیه؟؟؟
چون من با ++c که برنامه های Object Oriented مینوشتم حدودا" 90% Syntax شی گرای مثل #C بود!

اگر ۹۰٪ درصد مانند سی شارپ بود پس فقط شما ۱۰٪ دلیل لازم دارید که یکی را به دیگری ترجیح بدید ولی من شخصا ترجیح میدم به جایه برنامه نویسی یک شغل دیگر پیدا کنم تا اینکه با سی شارپ کار کنم(سی شارپ خالی نه سی شارپ دات نت).



مشکل اینجاست که مایکروسافت و پیروانش اصلا" این موضوع رو عیب نمیدانند و کاملا" از موضع قدرت صحبت میکنند و ادعا میکنند یکی محاسن دات نت اینکه کد Native تولید نمیکنه و این امر باعث به وجود آمدن برنامه های مستقل از پلتفرم در سیستم مقصد می شود.
در صورتی که به نظر بنده حقیر باید مایکروسافت امکانی رو در IDE VS قرار می داد تا خود برنامه نویس بسته به شرایط اختصاصی خودش تعیین کنه که کد Native به وجود بیاد یا کد IL

این ربطی به امکانات در IDE VS ندارد، با دات نت اس.دی.کی این امکانات موجود است.
حالا به فرض هم بگیریم که این چیزی که میگید درست هست .مشکل چیه؟



من فکر میکنم که این فرآیند optimization توسط کامپایلر صورت نگرفته و Reflector بوده که باعث حذف شدن متغییر های بلا استفاده میشه (برای مقابله با نرم افزار هایی که باعث ناخوانا شدن کد ها می شوند)
دلیل و یا مدرکی برایه این فکر دارید؟

این تاپیک از اول با بیان کردن نتیجه شروع شده، تیتر این تاپیک کاملا نشان میده که سوال نیست، بلکه دنبال پیدا کردن دلیل برایه نتیجه‌ اینکه "چرا با وجود امنیت کم دات نت ازش در برنامه های تجاری استفاده می شه !!" هست. این تاپیک بی معنی است، نه سوال هست که بخواهیم جواب بدیم.نتیجه را نمیشه به جایه عنوان بیان کرد، با موضوع این تاپیک باید مزینات دات نت را بیان کرد که با کم بود امنیت بازهم به استفاده‌اش میارزه! در ثانی کمبود امنیت دات را کجا در آوردید؟ اگر بحث چیزه دیگری است، این تاپیک را ببندیم و تاپیک جدید مشخص بزنیم، ادامه دادن این تاپیک در این حالت کنونیش بیفایده است.

keivan mousavi
پنج شنبه 22 مرداد 1388, 11:30 صبح
میشه بیشتر توضیح بدین منظورتون از کار بسیار زیاد چیه؟؟؟
چون من با ++c که برنامه های Object Oriented مینوشتم حدودا" 90% Syntax شی گرای مثل #C بود

دوست گرانقدر من آقای توکلی
منظور من از کار زیاد اینه که وقتی شما میخواهید واسطه گرافیکی برای کاربر ایجاد کنی یک مشکل بزرگ و کد نویسی حجیمی را میخواهد ولی در C#.NET اینگونه نیست و واسطه گرافیکی خود به خود موجود میباشد با توجه به اینکه شما میتوانید با توابع بسیار قدرتمند C#.NET مانند XML , XAML , GUI از این امکانات به بهترین نحو ممکن استفاده کنی

همانطور که خودشما مطلع هستید در بخش کلاسها در C#.NET با C++ خیلی تفاوت داره و باعث راحت تر نویسی کد در برنامه میشه

مثال دیگر وقتی شما در C#.NET میخواهید یک TEXTBOX فقط فارسی بنویسد احتیاج به یک خط کد دارید ولی این مسئله در C++ به این آسونیها مقدور نیست
به همین خاطر عرض کردم که Object Oriented نویسی با C#.NET خیلی آسان تر از C++ هستش

و به نظر من هر کسی را بهر کاری ساختن

و فکر کنم بقیه مسائل رو آقای آرژنگ به بهترین نحو ممکن توضیح دادن

saeed2rele
پنج شنبه 22 مرداد 1388, 12:17 عصر
سلام من امروز تونستم با Reflector قفل برنامه ای رو که یک ماه پیش خریده بودم رو بشکنم.
تمام سورس برنامه نویس بیچاره در این برنامه مشخص بود.
کلا از این سی شارپ نا امید شدم. .net فقط به درد برنامه های اوپن سورس و یا فری میخوره.
خیلی وقت ها پیش میاد که چیز های ساده و پیچیده رو پشت پرده برای کاربر مخفی میکنیم مثلا فرم ها یا خیلی چیزهای نمایشی که هیچ کاری انجام نمیده اگه قرار باشه هر بی سوادی مثل من بیاد و ته و توی برنامه رو در بیاده پس معنای EXE چیه؟
از یه برنامه نویس قدر هم در این زمینه پرسیدم گفتند که هیچ راهی برای لو نرفتن کند .net وجود نداره و بعضی از کارها فقط کد رو کمی ناخوانا میکنه و تنها راه برای مخفی کردن کد استفاده از وب سرویس هست.
خوش باشید

keivan mousavi
پنج شنبه 22 مرداد 1388, 12:24 عصر
سلام من امروز تونستم با Reflector قفل برنامه ای رو که یک ماه پیش خریده بودم رو بشکنم.
تمام سورس برنامه نویس بیچاره در این برنامه مشخص بود.
کلا از این سی شارپ نا امید شدم. .net فقط به درد برنامه های اوپن سورس و یا فری میخوره.
خیلی وقت ها پیش میاد که چیز های ساده و پیچیده رو پشت پرده برای کاربر مخفی میکنیم مثلا فرم ها یا خیلی چیزهای نمایشی که هیچ کاری انجام نمیده اگه قرار باشه هر بی سوادی مثل من بیاد و ته و توی برنامه رو در بیاده پس معنای EXE چیه؟
از یه برنامه نویس قدر هم در این زمینه پرسیدم گفتند که هیچ راهی برای لو نرفتن کند .net وجود نداره و بعضی از کارها فقط کد رو کمی ناخوانا میکنه و تنها راه برای مخفی کردن کد استفاده از وب سرویس هست

شما یک فایل EXE رو باز کردید قبول
ولی همین کارو میتونی با فایلهای DLL انجام بدی؟
اگه میشه پس علت استفاده از فایلهای DLL چیه؟
شما میتونی حتی فایلهای DLL رو باز کنی و بخونی ولی واقعاً کدی که با C#.NET نوشتی همونه؟

دوست عزیز من شما معماری رایانه رو فراموش کردی
همینجاست که فرق یک مهندس نرم افزار با یک برنامه نویس معمولی معلوم میشه

saeed2rele
پنج شنبه 22 مرداد 1388, 12:28 عصر
شما یک فایل EXE رو باز کردید قبول
ولی همین کارو میتونی با فایلهای DLL انجام بدی؟
اگه میشه پس علت استفاده از فایلهای DLL چیه؟
شما میتونی حتی فایلهای DLL رو باز کنی و بخونی ولی واقعاً کدی که با C#.NET نوشتی همونه؟

دوست عزیز من شما معماری رایانه رو فراموش کردی
همینجاست که فرق یک مهندس نرم افزار با یک برنامه نویس معمولی معلوم میشه

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

اَرژنگ
پنج شنبه 22 مرداد 1388, 13:57 عصر
منظور شما رو متوجه نمیشم.
این برنامه ای که گفتم سه فایل dll داشت که Reflector با گرفتن آدرس این فایل ها کدهای استفاده از اونها رو نشون داد.
چه فرقی میکنه که کدی که از Reflector گرفتم با کدی که کاربر نوشته یکی باشه؟ مهم اینه که من میتونم با کپی کردن توابع این برنامه نویس در برنامه خودم یه کپی از برنامش درست کنم که دارم میکنم.

این برنامه چکار میکنه؟
وقتی که تمام شد میخواهید بفروشید یا اینکه کدش را همینجا پست کنید؟

emadfa
پنج شنبه 22 مرداد 1388, 14:10 عصر
سلام
بیش از 60 پست در این تاپیک داده شده اما تاکنون به هیچ نتیجه مشخصی نرسیده جز این که برخی با تعصب از #C حمایت می کنند و برخی به عکس از امنیت آن ایراد می گیرند!
(البته یک سری نکاتی که می گویم شخصا عقاید خودم است. )

مهمترین مشکلی که ما در ایران داریم سیستم بیمار گونه صنعت در کشور است که متاسفانه این مساله در صنعت نرم افزار به دلیل عدم پویایی نمود بیشتری دارد. در ایران هیچ نرم افزاری امن نیست. از نرم افزارهای کد باز گرفته که برخی آن را به نام خود تغییر می دهند تا نرم افزارهای کد بسته که خوشبختانه موجب شده که دوستان کلسیون های گوناگونی از آن ها را در کامپیوتر خویش نصب کنند!

بحث سر این است که به دلیل همین سیستم بیمار گونه نگاه ما به امینت نرم افزار یک نگاه کاملا جهان سومی است. از دیدگاه ما یک زبان برنامه نویسی خوب زبانی است که امکان مهندسی معکوس در آن پایین باشد! تا جایی که من می دانم بحث امنیت کد چیزی نیست که اینجا این قدر ساده در مورد آن صحبت می شود چون اساسا چیزی که عنوان این تاپیک است در امنیت کد در رتبه های پایین تری است!

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


دوست عزیز من شما معماری رایانه رو فراموش کردی
همینجاست که فرق یک مهندس نرم افزار با یک برنامه نویس معمولی معلوم میشه
معماری رایانه ربطی به مهندسی کامپیوتر ندارد چون خوشبختانه 99 درصد مهندسان چیزی از معماری نمی دانند و حتی 10 درصد انرژی ای که بر روی GUI می گذارند بر روی ساختمان برنامه نمی گذارند!

فکر نمی کنم که این پست نیز کاملا علمی باشد اما ای کاش نگاه برنامه نویسان ما نیز منطقی باشد! ملاک ها عوض شود! نه به تعصب بی جا به #C و نه به محو کردن ++C ! ضمن این که ملاک قدرت یک زبان امکان مهندسی معکوس یا عدم امکان آن نیست!

در پایان فکر می کنم که این تاپیک خیلی جالب نیست!! به عنوان تاپیک توجه کنید:
فرض: .Net امنیت ندارد.
در برنامه های تجاری از آن استفاده می شود.
حکم: چرا با وجود فرض از .Net استفاده می شود.
واضح است که این دستور ریاضی , علمی نیست چون فرض ثابت نشده و ضمن این که امنیت در فرض مساله تنها از یک زاویه کوچک بررسی شده بنابراین پیشنهاد می کنم یک تاپیک در بخش تکنولوژی های مایکروسافت برای بررسی همه جانبه .Net ( بدون تعصب ) ایجاد شود و همگان با دلیل و مدرک اظهار نظر کنند.

keivan mousavi
پنج شنبه 22 مرداد 1388, 14:54 عصر
سلام
بیش از 60 پست در این تاپیک داده شده اما تاکنون به هیچ نتیجه مشخصی نرسیده جز این که برخی با تعصب از #C حمایت می کنند و برخی به عکس از امنیت آن ایراد می گیرند!
(البته یک سری نکاتی که می گویم شخصا عقاید خودم است. )

دوست عزیز من
من با تعصب از C#.NET صحبت نمیکنم ولی از اینکه ببینم برنامه نویسان مهترم قوائد برنامه نویسی رو کنار میگذارند و عیبهای خودشونو پشت ضعف برنامه قایم میکنن ناراحت میشوم

تا حدود 90 درصد حرفهای شمارو قبول دارم در باره نگاه بیمار گونه ما به امنیت
اما کسانی که از این زبان ایرادهای بنی اسراییلی میگیرن هنوز با مفاهی NET FORMEWORK. و Object Oriented آشنا نیستن و از برنامه نویسی فقط کد نویسیو آموختن

emadfa عزیز من به نظر من نوعی معماری رایانه و اون درسی که در دانشگاه خواندیم به نام ساختمان داده بیش از اینکه در C++ به کار بیاد در C#.NEt به کار میاد

اَرژنگ
پنج شنبه 22 مرداد 1388, 15:08 عصر
بیش از 60 پست در این تاپیک داده شده اما تاکنون به هیچ نتیجه مشخصی نرسیده جز این که برخی با تعصب از #C حمایت می کنند و برخی به عکس از امنیت آن ایراد می گیرند!


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

بقیه هم کسنایکه میدانند دات‌نت، جاوا و یا هر ابزار دیگری که بدست آدمها ساخته شده، هر کدام برایه هر کاری مزیت و یا نقصانی دارد و به هر شکلی که شده پیش میرند، برنامه مینویسند و کار را یک جوری سر میارند، این گروه آنقدر مشغولند که وقت ندارند به این دعوایه سر هیچ چی نگاه بنداند، من چیزی ندارم که بهشان بگم مگر اینکه من را هم جزو خود کنید.



معماری رایانه ربطی به مهندسی کامپیوتر ندارد چون خوشبختانه 99 درصد مهندسان چیزی از معماری نمی دانند و حتی 10 درصد انرژی ای که بر روی GUI می گذارند بر روی ساختمان برنامه نمی گذارند!

فکر نمی کنم که این پست نیز کاملا علمی باشد اما ای کاش نگاه برنامه نویسان ما نیز منطقی باشد! ملاک ها عوض شود! نه به تعصب بی جا به #C و نه به محو کردن ++C ! ضمن این که ملاک قدرت یک زبان امکان مهندسی معکوس یا عدم امکان آن نیست!

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

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

ali_kolahdoozan
پنج شنبه 22 مرداد 1388, 15:21 عصر
من تعصبی ندارم شخصا . فقط یک exe گذاشتم قرار شد بازش کنند اما انگار خبری نیست

vcldeveloper
پنج شنبه 22 مرداد 1388, 15:27 عصر
من تعصبی ندارم شخصا . فقط یک exe گذاشتم قرار شد بازش کنند اما انگار خبری نیست
اینجا تالار امنیت نیست که شما CrackMe بدید، نسخه کرک شده دریافت کنید! میخواید امنیت نرم افزارتان را بررسی کنید، در تالار امنیت نرم افزار.

debugger
پنج شنبه 22 مرداد 1388, 15:34 عصر
همه مطالب را خوندم . به نظر من دات نت در زمينه برنامه نويسي بهترين هست

امنيتش هم خيلي بيشتر و بيشتر از ساير زبان هاي برنامه نويسي هست

ان دسته از افرادي كه فكر مي كنن براحتي ميشه سورس را ديد . كاملا با چشم بسته دارن كار مي كنن

ديده شدن سورس دليل بر عدم امنيت نيست. تازه اگر سورس را هم ببينن بازم دليل نميشه كه بتونن برنامه را بازنويسي كنن

به نظر من برنامه نويس بايد بيشتر روي كارايي و كاربرد برنامه تمركز كند . امنيت اخرين مرحله هست.. كه اين مرحله هم level هاي مختلف دارد . بعضي وقت ها برنامه نويس از قصد يه قفل كوچيك ميزاره تا برنامه اش كرك بشه و پخش بشه ؟ كي ميدونه چرا ؟؟؟؟؟

بعضي وقت ها طرف در طول دوره كرك نرم افزار پولشو دراورده و كرك شدن يا نشدنش هم مهم نيست

در مواقعي كه با يك سازمان رسمي طرف هستين . اگر برنامه كرك بشه يا ... شامل پيگرد قانوني هست و ...

تازه اينگونه برنامه هم پابليك نيستند كه در دسترس عموم باشد و بشه كرك كرد

saeed2rele
پنج شنبه 22 مرداد 1388, 18:45 عصر
وقتی که تمام شد میخواهید بفروشید یا اینکه کدش را همینجا پست کنید؟
هیچکدوم فقط برای استفاده خودم و تجربه (گفتم نرم‌افزار رو یک ماه پیش خریدیم)

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

اَرژنگ
پنج شنبه 22 مرداد 1388, 19:25 عصر
هیچکدوم فقط برای استفاده خودم و تجربه (گفتم نرم‌افزار رو یک ماه پیش خریدیم)

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

جواب اینکه این نرم افزار چکار میکند را ندادید. اسم این نرم افزار چی هست که ماهم امتحان کنیم. این مسئله ربطی به ایران ندارد، پس تمام برنامه‌هایی که سورس را قابل دست نمیگذارند ولی با کرک موجود هستند چه برتریی به برنامه‌هایی که سورسش قابل دست هستند دارد؟ با این حساب کسی نباید جاوا اسکیپت بنویسه چونکه سورسش را نمیشه قایم کرد. در این تاپیک سوالی نبود که جواب بخواد، بلکه یک برداشتی را به عنوان درست علم کردن مطرح کرد. هر وقت از این برنامه‌ای که بر روش کار میکنید به اندازه کافی سورس استخراج کردید که بشه ازش فایده برد اینجا پستش کنید. اسم و کار این برنامه را هم بگید که ما هم بتوانیم صحت چیزهایی را که میگید یک تحقیق کنیم.

اَرژنگ
پنج شنبه 22 مرداد 1388, 19:49 عصر
اگه فایل اجرایی اون برنامه ای رو که شما واسه شهر داری نوشین رو یکی از کارمندان شهرداری بهش نفوذ کنه و رمز عبور پایگاه داده های شما فاش بشه و...
البته منم می دونم که خیلی راه برای جلوگیری از این اتفاق وجود داره ولی فرض محال که محال نیست ، اگه فرضا" رمز عبور پایگاه داده ها فاش بشه اون برنامه هیچ ارزشی نخواهد داشت

مگر فکر میکنید که رمز عبور را در کد برنامه سخت کد کردند؟ اولین پایه برنامه نویسی در دات نت این است که همچین چیزی نیست! قبل از اینکه نتیجه گیری کنید یک مقداری اطلاعات پایه در مورد برنامه نویسی با دات.نت مطالعه کنید. یا اینکه هم همینجا اینکه چطوری با اینکه سورس کامل برنامه در دست باشد کلمات عبور قابل نفوذ نباشد را بپرسید. کلمه عبور را در برنامه نوشتن از سطح مبتدی هم پائینتره و هیچ برنامه نویسی انجام نمیده (حتی اگر سورس قابل دسترسی نباشد). فرض کنیم خواستن کلمه عبور را عوض کنند، برنامه باید دوباره کمپایل بشه؟ فرض کنیم ۳۰ نفر مختلف با برنامه کار میکنند ، کلمه عبورشان را میخواهید هر بار برنامه نویسی تعیین کنه؟ یا یک کلمه عبورش یادش رفت، هر ۳۰ تا نسخه را باید روز به روز کرد. به نظر من حتی اگر ایشان سورس را هم در اختیار بزارند و روش یک پولی هم بدن بازهم برایه اینکه برنام نویس قابل کارشان را سطح درست ادامه بده باید آگهی بده و کلی بگردند.

saeed2rele
پنج شنبه 22 مرداد 1388, 23:06 عصر
جواب اینکه این نرم افزار چکار میکند را ندادید. اسم این نرم افزار چی هست که ماهم امتحان کنیم. این مسئله ربطی به ایران ندارد، پس تمام برنامه‌هایی که سورس را قابل دست نمیگذارند ولی با کرک موجود هستند چه برتریی به برنامه‌هایی که سورسش قابل دست هستند دارد؟ با این حساب کسی نباید جاوا اسکیپت بنویسه چونکه سورسش را نمیشه قایم کرد. در این تاپیک سوالی نبود که جواب بخواد، بلکه یک برداشتی را به عنوان درست علم کردن مطرح کرد. هر وقت از این برنامه‌ای که بر روش کار میکنید به اندازه کافی سورس استخراج کردید که بشه ازش فایده برد اینجا پستش کنید. اسم و کار این برنامه را هم بگید که ما هم بتوانیم صحت چیزهایی را که میگید یک تحقیق کنیم.

به این خاطر که نرم افزار ثبت شده هست و کرکی هم تا بحال براش ندیدم چیزی راجع بهش نمیگم.
صحت چیزهایی که میگم رو میتونید با هر برنامه دیگه که تحت دات نت نوشته شده و برنامه Reflector (http://www.red-gate.com/products/reflector/)بررسی کنید.(یا از اساتید همین فروم بپرسید)

linux
جمعه 23 مرداد 1388, 00:32 صبح
"چرا با وجود امنیت کم دات نت ازش در برنامه های تجاری استفاده می شه"
جواب:
به دلیل تعداد بسیار زیاد کلاسهای موجود در دات نت و امکان ساخت سریع برنامه ها و پایین آمدن هزینه ها. و سی شارپ به خاطر این محبوب شد که ساختاری شبیه سی و سادگی مثل جاوا دارد.
دیده شدن سورس کد به نظر من اصلا چیز مهمی نیست ، و ابزار های زیاد هم برای جلوگیری از ریسورس شدن کد وجود دارد.
همین برنامه کوچکی که دوستمان برای کرک گذاشتند با xenocode محافظت شده و شما به این راحتی ها نمی توانید سورس این برنامه را بدست بیاورید.
در ضمن برنامه شما خیلی مهم تر از برنامه های شرکت ماکروسافت نیست که کلی هزینه محافظت از آنها می شود ولی به راحتی نسخه کرک شده آنها در دسترس است.

Nima NT
شنبه 24 مرداد 1388, 22:02 عصر
همین برنامه کوچکی که دوستمان برای کرک گذاشتند با xenocode محافظت شده و شما به این راحتی ها نمی توانید سورس این برنامه را بدست بیاورید.
متاسفانه همیشه راهی برای نفوذ به نرم افزارها وجود داره , دیر و زود داره ولی سوخت و سوز نداره :لبخند:
نگاهی به اینجا بندازید ...
http://barnamenevis.org/forum/showthread.php?t=174013

alireza_tavakol
یک شنبه 25 مرداد 1388, 01:14 صبح
با سلام خدمت اساتید محترم

بعد از جنجالی که در این تاپیک داشتیم دو تا تاپیک ثبت شد که هر کدام در پی پاسخ به موارد ذکر شده در این تاپیک ، نیاز به دانسته های علمی شما دوست گرامی دارد

لطفا اگر اطلاعاتی در این زمینه ها دارید دیگران را مشعوف نمایند

1- نحوه برقراری امنیت رشته اتصال به پایگاه داده ها حتی در موقعی که پروژه Resource شده (http://www.barnamenevis.org/forum/showthread.php?t=173696)

2- روش های مقابله با Resource شدن فایل های تولید شده توسط دات نت ( EXE , DLL ) (http://www.barnamenevis.org/forum/showthread.php?t=173862)

با تشکر از کسانی که در بحث های اخیر شرکت کرده اند

ali_kolahdoozan
یک شنبه 25 مرداد 1388, 15:22 عصر
ادامه این پست افتاد به پستی که nimant ارجاع دادند و خوشبختانه به نتیجه رسید . در کمال آرامش و با حفظ پیچیدگیهای لازم با همان دات نت برنامه بنویسید

cardano7
پنج شنبه 30 اردیبهشت 1389, 10:43 صبح
سلام
دیدم چند نکته را لازم هست که یادآوری کنم:
1- کی گفته ما ایرانی ها کرک می کنیم؟
کرک ها رو روس ها معمولا انجام میدند و ما ایرانی ها از اونها استفاده می کنیم.
2- هر برنامه ای راحت کرک بشه به این دلیل بوده که راحت هم نوشته شده.
3- امنیت لینوکس و ویندوز و VS ربطی به امنیت برنامه هایی که ما تحت NET. می نویسیم نداره. لطفا برخی دوستان به بحث حاشیه ندند.
4- لطفا به خاتمه ی بحث نظر ندید. اگه کسی از این بحث خوشش نمیاد می تونه تو این بحث شرکت نکنه.
5- بد نیست روند جهانی گرایش به زبان های برنامه نویسی را ببینید و خودتون نظر بدید که کدوم برنامه رشد کاربرانش زیاد شده و کدوم کم. (قابل توجه اونایی که میگند C#‎ امنیت نداره برید سراغ نرم افزارهای دیگه)
6- ANSI,Win7,Vista و خیلی نرم افزارهای شاخ دیگه هم کرک شدند که به زبان های Native بودند.
7- C#‎ خیلی خوانا هست. پس کد مهندسی معکوس شده ی اون هم باید قاعدتا خوانا باشه.
8- شما برید اسکریپت Obfuscade شده ی JavaScript را یک نگاه بندازید. بعد خودتون قضاوت کنید کد Obfuscade آیا قابل خوندن هست یا نه. آدم کد خودش رو هم به زور می خونه چه برسه به کدی که Obfuscade شده باشه. به خصوص زمانی که Function ها Highly Overload میشند. برای همین کد ما برای کرکر ها به یک آشغال کد تبدیل میشه.
هم میشه کد ++C را باز کرد هم C#‎ را با این تفاوت که کد باز شده ی C#‎ یکم سطحش بالاتره. ولی برای یک برنامه ی بزرگ به این راحتی ها هم که گفته میشه قابل فهم نیست.
9- برخی برنامه نویس ها خودشون سوتی میدند که کدشون راحت هک میشه.
چند تا نکته به نظر من میاد که کمک زیادی به حفظ برنامه ی ما میده:
در برنامه هیچ وقت string های حیاتی را دم دست قرار ندید. برخی رشته ها را میشه ROT13 کرد یا با روش های دیگه کد کرد. دزد تو خونه ی هر کسی میره اول کجا رو می گرده؟ پولت رو اونجا قرار نده. در برنامه ی خود زمان را چک کنید. تا ببینید برنامه در حال اجرای عادی هست یا در حال دیباگ شدن. این کار حداقل یکم کرک کردن را سختتر می کنه. از کد های یتیم معلق در برنامه برای رد گم کردن استفاده کنید. لازم نیست که همه ی کد ها کار مفید انجام بدند.

البته این ها روش هایی هست که من (که رشته م کامپیوتر نیست و تفننی برنامه نویسی می کنم) پیشنهاد می کنم. مسلما یک برنامه نویس حرفه یی راه های بهتری هم سراغ داره.
10- چرا کسی در این مورد که "یکی از امنیتهای C#‎ به این صورته که نفوذ از خارج محیط اون به داده هاش غیر ممکنه" حرفی نمی زنه؟
11- با کد IL حال نکردی برو نسخه ی کرک شده ی مبدل های IL به Native را دانلود کن برنامه را Native بکن تا خیالت راحت بشه. به هر حال برنامه یا باید IL باشه یا Native نمی شه که همه ی مزیت هر دو را با هم داشته باشه.

Sharpist
یک شنبه 02 خرداد 1389, 08:34 صبح
دو جمله هم من بگم؟!

1- امنیت مطلق نیست و نسبی است. شما دارید فکر میکنید که مطلقه. یا امنیت هست یا نیست!
خب، باید بگم که اصلا اینطوری نیست! به دلیل منطق رایانه، شما هیچوقت نمیتونید امنیت 100% رو تضمین کنید.
کد کامپایل شده هر زبان برنامه نویسی رو میشه به سورس تبدیل کرد.
همونطور که میدونید برنامه های ما (بعد از گذشت چند لایه) تبدیل به 0 و 1 هایی میشه که زبان cpu است. حالا ما اگه شروع کنیم و این مراحل رو به عقب برگردیم، به همون سورس کد اصلی میرسیم (با کمی تغییر در نام متغیرها و ...)

این قضیه درست مثل اینه که یک ایرانی به فارسی حرف بزنه، بعد مترجم به عربی تبدیلش کنه، یکی دیگه به انگلیسی، یکی به فرانسوی و یکی دیگه به هندی.
بعد دوباره از هندی ترجمه کنن به فرانسوی و انگلیسی و عربی و فارسی.

بنابراین نمیشه گفت که هیچ زبان برنامه نویسی با امنیت نیست!

2- امنیت باید در ذات و ذهن برنامه نویس باشه، نه در زبان برنامه نویسی!
مثلا شما سورس بیش از 99% برنامه های PHP رو در اختیار دارید. حالا اگه میتونید، همین انجمن برنامه نویس رو که به زبان php نوشته شده رو هک کنید و پسورد پایگاه داده ی این انجمن رو که در یک فایل php ذخیره شده و به صورت plain text است رو بدست بیارید.

محسن شامحمدی
شنبه 26 تیر 1389, 18:47 عصر
اما کلا من ترجیح می دم سورس برنامه ام لو بره به جای اینکه کلی زحمت بکشم تا با یک زبان native مثل c++ کار کنم.
تازه اگر کمی با پروتکتور ها روی برنامه کار بشه هیچ اشکالی پیش نمی یاد.
تازه مگر کپی رایت هست که بخواین برنامتون رو به روسیه صادر کنید و نگران کرک شدن اون هستید.:قهقهه:

Engineer MCPD
جمعه 18 شهریور 1390, 11:03 صبح
اول از همه شما باید معنی امنیت رو بدونی .
دوم اگه شما از سی شارپ دلسرد شدی پس باید کلاً تمام زبان های دانت نت رو بزاری کنار چون سی شارپ هم جزئی از دات نت محسوب میشه مثل VB یا C++ و ...
سوم اگه اینقدر که شما میگی دات نت ضعیفه مایکروسافت توابع هوشمند سیستم عامل هاشو با سی شارپ طراحی نمی کرد.

* این پست توسط Amir Oveisi ویرایش شده است *

wolf_majid
جمعه 18 شهریور 1390, 11:40 صبح
دوست عزیز آخرین پست این تاپیک مال یک ساله پیشه
لطفا" یک مقدار به تاریخ تاپیک ها و پست ها دقت کنید

linux
جمعه 18 شهریور 1390, 11:55 صبح
دوست عزیز آخرین پست این تاپیک مال یک ساله پیشه
لطفا" یک مقدار به تاریخ تاپیک ها و پست ها دقت کنید

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

vesall
شنبه 19 شهریور 1390, 02:57 صبح
واااااااای سرم سوت کشید.

چیزی که از خوندن 9 صفحه فهمیدم این بود که:

حالا کو تا ما برنامه نویس شیم !!! از برنامه نویس شدن نا امید شدیم !!!!

JaguarXF
شنبه 19 شهریور 1390, 08:33 صبح
سلام به همه دوستان
من در حال يادگرفتن سي شارپ هستم توي انجمن يه مطلبي ديدم که باعث شد از يادگرفتن سي شارپ يه کم سرد شم.


http://barnamenevis.org/showthread.php?t=168606&highlight=امنيت (http://barnamenevis.org/showthread.php?t=168606&highlight=%D8%A7%D9%85%D9%86%D9%8A%D8%AA)


http://barnamenevis.org/showthread.php?t=122711

سوال من :
چرا شرکتها با وجود اينکه مي دونن احتمال داره سورس برنامه هاشون لو بره از اين زبان هاي برنامه نويسي استفاده مي کنن ؟؟

بستگی به شرکت و برنامش داره .
مثلا یکی از برنامه هایی که تیم من نوشت اگر مشتری رو ببینیم زیاد وضع مالیش خوب نیست و معمولا هم کامیونیتی سرویس هستند و تخفیف شیرین بدهیم فقط هزینه نصب برنامه رو نیم میلیون دلار ازشون میگیریم. با سی شارپ هم نوشتیمش. حالا آخه فکر میکنی برنامه ای که نیم میلیون دلار فقط هزینه نصبش هست رو مگه اصلا میشه روی سیدی کپی کرد داد به کسی که حالا طرف هم بخواد بزنه سورسش رو دربیاره؟
کلیه دیتاهای کلیه مشتری ها رو روی دیتاسنترهای خودمون هوست میکنیم. اینجور برنامه های تحت ویندوزی رو هم روی Citrix (http://www.citrix.com/lang/English/home.asp) بهشون تحویل میدهیم. امنیت خود به خود تضمین شده.
بنابراین برای شرکت ها واقعا این سوالاتی مثل کرک کردن سورس و اینکه یک اینستالر بنویسم که با یک دکمه همه چیز رو نصب کنه و ... اصلا مطرح نیست. چیزی که مطرح هست معماری صحیح برنامه هست . پرفورمنس و کارایی و حرفه ای بودن برنامه هست. Enterprise Level Dude
امیدوارم جواب سوالت رو در سطح Enterprise داده باشم . راستش سطح کمترش رو اصلا خبر ندارم مردم چکار میکنند. نمیدونم.

A B C D
شنبه 19 شهریور 1390, 11:40 صبح
اگه فایل اجرایی اون برنامه ای رو که شما واسه شهر داری نوشین رو یکی از کارمندان شهرداری بهش نفوذ کنه و رمز عبور پایگاه داده های شما فاش بشه و...
البته منم می دونم که خیلی راه برای جلوگیری از این اتفاق وجود داره ولی فرض محال که محال نیست ، اگه فرضا" رمز عبور پایگاه داده ها فاش بشه اون برنامه هیچ ارزشی نخواهد داشت
منظورتون فایل اجرایی یک برنامهء دسکتاپ هست؟ یا منظورتون فایل برنامه های ASP.NET است؟