PDA

View Full Version : امنيت يك نرم افزار تحت LAN



shima_ahmadi
دوشنبه 30 خرداد 1390, 14:44 عصر
سلام دوستان
من براي پرو‍ژه كارشناسيم اين موضوع (البته به اجبار استاد) انتخاب كردم، هدف از اين پروژه امنيت كامل يه نرم افزار هست، ميشه دوستان بفرماييند از كجا بايد شروع كنم؟
پروژه اينه كه يه نرم افزار كه قبلا نوشته شده رو داريم كه ميخايم كاربران تو يه شبكه به سرور وصل بشن و از نرم افزار استفاده كنن. اما نميخايم هيچكس به سورس كدها دسترسي داشته باشه. يعني قسمت كار من اينه كه از كدهاي نرم افزار محافظت كنم كه كسي نتونه چه از روي سرور و چه از طريق كلاينتها به كد برسه.
ممنون ميشم راهنمايي بفرماييد كه از كجا شروع كنم.:افسرده:

vcldeveloper
دوشنبه 30 خرداد 1390, 19:07 عصر
يعني قسمت كار من اينه كه از كدهاي نرم افزار محافظت كنم كه كسي نتونه چه از روي سرور و چه از طريق كلاينتها به كد برسه.هیچ کس به سورس کد دسترسی پیدا نکنه؟! مگه در حالت عادی که یک برنامه می نویسید، کسی به سورس کد شما بعد از کامپایل برنامه دسترسی داره؟

باید بیشتر توضیح بدید که منظورتون از امنیت سورس کدها اون هم تحت LAN؛ چیه؟ یک بار بحث کرک نرم افزار هست، یکی فایل اجرایی برنامه شما رو داره، سعی میکنه با ابزارهایی این رو Disassemble بکنه، تا بتونه به منطق برنامه پی ببره، و مثلا برنامه رو کرک کنه (مثلا قفل برنامه رو دور بزنه). اون وقت برنامه نویس برای اینکه این فرآیند رو سخت تر کنه، میره از ابزارهایی مثل Packer ها یا Obfuscator ها (به طور کلی protector ها) استفاده میکنه؛ اما این ربطی به تحت LAN بودن یا نبودن برنامه نداره.

پس لازمه که بیشتر توضیح بدید که دقیقا میخواید چیکار کنید. پروژه تون چیه؟ برنامه مورد نظر شما با چه زبانی نوشته شده؟ و منظورتون از سورس کد دقیقا چیه؟

shima_ahmadi
دوشنبه 30 خرداد 1390, 20:05 عصر
ممنون از توضيحاتتون بسياري از سوالاتم رو پاسخ داد.
منظورم همون فايل اجرايي نهايي است كه ميشه اونو كرك كرد. منتها براي پروژه من نميشه از نرم افزار هاي اماده اي كه وجود دارند استفاده كرد بلكه بايد از روشهاي خودم استفاده كنم مثلا رمزنگاري منتها من نميدونم دقيقا اين روشها چي هستند و بايد از كجا شروع كنم ممنون ميشم راهنمايي بفرماييد.

vcldeveloper
سه شنبه 31 خرداد 1390, 07:17 صبح
خب اول باید مشخص کنید که برنامه شما با چه زبانی داره نوشته میشه؟ برگرداندن کد های دات نت یا جاوا ساده تر از زبان هایی مثل C\ C++ یا دلفی هست؛ پس اگر برنامه شما با همچین محیط هایی توسعه داده شده باشه، کار کرکر آسونتره، و کار شما برای محافظت پیچیده تر.

shima_ahmadi
سه شنبه 31 خرداد 1390, 10:54 صبح
من ميخام با C# كد بنويسم و كل برنامه هم به C# هست؟
ايا اگه كدهاي برنامه به زبان ديگه اي بود فرقي هم ميكرد كه من با چه زباني برنامه بنويسم؟
ممنون

vcldeveloper
سه شنبه 31 خرداد 1390, 21:17 عصر
ايا اگه كدهاي برنامه به زبان ديگه اي بود فرقي هم ميكرد كه من با چه زباني برنامه بنويسم؟
بله، برای اینکه بتونید از سورس تون محافظت کنید، باید ببینید در جریان کامپایل سورس، کد شما تبدیل به چه چیزی میشه، و چقدر احتمال بر گرداندن نتیجه کامپایل به سورس کد وجود داره؟ کدهای زبان های دات نتی (مثل #C) همگی به یک کد میانی با نام MS IL تبدیل میشند، نه مستقیما به کد ماشین مقصد. عمل تبدیل به کد ماشین مقصد در ماشین مقصد و توسط CLR دات نت صورت میگیره. کدهای MS IL کدهای یک ماشین مجازی فرضی هستند. این کدها ساده تر از کد ماشین مقصد و پیچیده تر از سورس کد شما هستند؛ پس در اولین قدم، کرکری که کد MS IL تولید شده را میبینه، در مقایسه با کرکری که کد تولید شده در ماشین مقصد را میبینه، کار ساده تری برای خواندن کدها در پیش داره. نکته بعدی این هست که هر اسمبلی دات نت حاوی مقدار زیادی meta data هست. این meta data اشیاء و کلاس های موجود در اون اسمبلی را تعریف می کنند، و CLR دات با کمک این داده ها میتونه در ماشین مقصد کد بهینه تری تولید کنه، و از طرفی مدیریت بهتری روی کد اعمال کنه، و قابلیت های بیشتری هم در زمان اجرای برنامه فراهم کنه. اما همین داده ها می تونند به کرکر در درک کد تولید شده و بازتولید سورس اولیه کمک بسیار زیادی بکنند. یک کرکر میتونه با داشتن فایل اجرایی برنامه شما (یعنی کد MS IL تولید شده + meta data های تولید شده)، با تقریب نسبتا بالایی سورس کد شما را باز تولید کنه. البته برای این کار ابزارهای آماده هم وجود دارند، و حتی نیاز نیست که کرکر خودش یک متخصص در امر meta data های تولید شده توسط دات نت یا کد MS IL باشه، بلکه میتونه به راحتی با استفاده از یکی از این ابزارهای موجود، فایل اجرایی برنامه شما را به ابزار مربوطه بده، و سورس کدی که تا حد بسیار زیادی به کد شما شبیه هست (در بعضی مواقع عین سورس کد شما) را تحویل بگیره. یکی از همچین ابزارهایی برنامه Reflector ایی هست که با خودِ دات نت روی سیستم تون نصب میشه. می تونید خودتون یکی از برنامه های نوشته شده توسط خودتان را بهش بدید، و نتیجه را ببینید.

راه عمده مقابله با Reflector ها استفاده از Obfuscator ها ست؛ پس برای اینکه بتونید از سورس کد خودتان در مقابله این نوع حملات محافظت کنید، باید درباره تکنیک های Code Obfuscation تحقیق کنید. البته من موندم که کدوم استاد بوده که همچین پروژه ایی رو برای دوره کارشناسی به دانشجو داده؟! ازش بپرسید که آیا از شما میخواد که فقط درباره این تکنیک ها تحقیقی انجام بدید و یک گزارش چند صفحه ایی از کلیت نحوه کار این تکنیک ها بنویسید؟ یا اینکه منظورش اینه که شما خودتون یک Obfuscator بنویسید؟! نوشتن یک Obfuscator کار ساده ایی نیست، و فراتر از یک پروژه کارشناسی هست.

houtanal
چهارشنبه 01 تیر 1390, 01:06 صبح
در مورد نرم افزارهایی که در LAN کار می کنند شما باید موارد مربوط به استراق سمع (sniffing) و نشست دزدی (Session Hijacking) رو هم در نظر بگیرید.(کلاً)

shima_ahmadi
چهارشنبه 01 تیر 1390, 17:55 عصر
بسيار ممنون

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

نه منظورشون نوشتن كد هست يعني من از طريق كد نويسي بتونم امنيت رو برقرار كنم.