امنیت داده های مستقر در سورس پس از Obfuscate کردن برنامه
بهترین راهکار به جهت Obfuscated کردن داده های حساس به چه صورت هست ؟
داده هایی مثل متغیرهایی که اطلاعات حساس رو نگه داری می کنند.
اگه منظورتون پایگاه داده هست ، میشه SQLITE رو رمزگزاری کرد ، در رابطه باهاش سرچ کنید ، اگر نه هم بیشتر توضیح بدید !
ولی یکی از روش های دیگه هم رعایت دقیق وراثت هست که private کردن ها توش تاثیره به سزایی داره
نه منظورم اینه فرض کنید شما قراره از یه سرور اطلاعات رو دریافت کنید .
آدرس این سرور رو هم نمی خواید کسی بتونه در اختیار بگیره .
چطور باید برنامه رو Obfuscated کرد که این داده ها پس از revers کردن قابل دسترسی نباشه .
دوستمون پاسخ کاملی دادن و همانطور که در پاسخ بالا اشاره شد، حفظ کردن امنیت سرور برای حفاظت از اطلاعات کافیست. اما نکته بسیار مهم تر که ایشون یادش رفته احتمالاً بگه این هست که داده ها قابل شنود هستند. مثلاً اگر کسی یک برنامه نویسه که بتونه داده ها رو شنود کنه ( در اندروید ) یا به عبارتی یک data sniffer بنویسه، اونوقت اگر حتی Username و Password به سرور ارسال بشه، کاملاً مشخص میشه به کدوم لینک با چه ساختاری، چه اطلاعاتی ارسال شده و کاملاً حفره امنیتی نرم افزار و حتی سایت شما خواهد شد.
پس بهتر هست که تمامی داده های ارسالی و دریافت از کلاینت به سرور ( و بالعکس ) به نحوی Secure بشه. این امنیت می تونه با الگوریتم هایی مثل AES برقرار بشه که تقریباً غیر قابل شکستن هست. البته AES به KEY, IV نیاز داره که اگر کسی بدونه، می تونه باز هم داده های Sniff شده رو بازیابی کنه اما اگر مثلاً KEY خود پسورد باشه، اونوقت دیگه هیچ کاریش نمیشه کرد و هیچ کس نمی تونه Crack بکنه.
اما در خصوص سایر اطلاعاتی که شاید Server Side نباشه و مثلاً پسورد یک فایل رو می خواید داخل Source قرار بدید، یک راهش این هست که یک الگوریتم پیچیده برای تولید اون قفل بنویسید که راههای بسیار بسیار زیادی داره.
در کل خیلی سخت نگیرید و بجای امنیت بالاتر به فکر توسعه سریعتر باشید. امنیت در لحظه های آخر قابل پیاده سازی است.
با تشکر از همه دوستانی که در بحث شرکت کردن .
اول از همه باید ذکر کنم که منظور بنده امنیت سمت سرور نبود چون امن کردن کدهای سمت سرور به راحتی قابل انجام هست و مشکلی در این زمینه ندارم .
من مثال آدرس سرور رو زدم که خیلی قابل لمس باشه و منظورم هر نوع داده ی ثابتی هست که لازمه بگونه ای امن بشه که دیگران بعد از revers کردن نتونن به اطلاعات اون دسترسی داشته باشن .
درصورتیکه بخوایم پسورد و اطلاعاتی که از کاربر دریافت میکنیم رو امن کنیم همونطور که استاد گفتن با استفاده از الگوریتم میشه اینکار رو انجام داد.
ولی وقتی قراره روی یه داده ثابت مخصوص برنامه اینکار انجام بشه در صورت رمزنگاری شدن باز هم فکر نکنم مشکل حل بشه و کافیه از اطلاعات رمزنگاری شده در برنامه استفاده کرد و برنامه به کار خودش ادامه میده
سلام
میدونم تاپیک قدیمیه ولی ما تازه کاریم و ابهاماتمون هم بسیار زیاد !
سوال آقای طاهر سوال من هم هست.
ببینید اصلا کاری به ارتباط آنلاین با سرور نداریم. شما فرض کنید یه فایل txt ساده یا یک فایل html داریم که در پوشه assets قرار داره که ما نمیخوایم محتواش دست کسی بیفته. راه حل تامین امنیت برای این مورد چیه؟
راهی که به ذهن خودم رسیده اینه :
ذخیره کردن فایل با فرمت اختصاصی خودمون (طبق روشی که استاد در بخش 19 دادن) و سپس قرار دادن فایل اختصاصی ، در داخل پوشه ی assets پروژه اصلی و خواندن محتویاتش.
طبق گفته ی استاد ، نکته ی مهم اینه که اگر موقع نوشتن روی فایل ، مثلا ابتدا یک int بنویسیم و سپس یک long و سپس یک UTF ، موقع خواندن هم باید دقیقا به همین ترتیب ابتدا یک int بخونیم و سپس یک long و سپس یک UTF ، در غیر اینصورت برنامه کرش میکنه.
در اینجا استاد میگن که چون ترتیب نوشتن روی فایل رو فقط برنامه نویس میدونه بنابراین فقط هم خودش اطلاع داره که موقع خواندن فایل باید به چه ترتیبی بخونه تا منجر به کرش نشه. بنابراین ایشون نتیجه گرفتن که این باعث ایجاد یک نوع امنیت میشه چون کسی غیر از برنامه نویس اصلی نمیتونه اطلاعات رو به همون ترتیبی که نوشته شده بخونه.
ولی !
مشکل اصلی (طبق دانسته های من تا اینجا) اینه که دوستان هکر یا فضول میتونن با Reverse کردن پروژه ، به راحتی ببینن که ما در کدمون به چه ترتیبی از داخل فایل-فرمت اختصاصی مون مطالب رو میخونیم و به راحتی میتونن فایل ما رو داخل پروژه ی دیگری بذارن و طبق همون ترتیبی که در سورس ما پیدا کردن ، به همون ترتیب هم بخونن و در نتیجه این فایل-فرمت اختصاصی ، عملا هیچ سطح امنیتی برای ما به ارمغان نیاورده و هر کسی میتونه ازش استفاده کنه.
دوست دارم نظر دوستان رو در این مورد بدونم. آیا برداشت من از این موضوع درسته؟؟؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .