PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برای حفظ حقوق طراحان اسکریپت چی کار کنیم؟



soheyl_ir89
July 12th, 2012, 21:25
سلام دوستان

فرض کنید اسکریپت سیستم وبلاگدهی یا نیازمندی ها یا اسکریپتی رو طراحی می کنیم
و می خوایم بفروشیم؛

آیا می شه کاری کرد که خریدار اسکریپت فقط بتونه خودش از این اسکریپت خریداری شده استفاده کنه
و به کسی نفروشه؟

در واقع اگر 10 تا اسکریپت فروختیم، فقط 10 سایت با اون اسکریپت و همون مشتریان از این اسکریپت استفاده کنن.

Hostpolis
July 12th, 2012, 21:43
یک لایسنس سرور ایجاد کنید جهت sync کردن لایسنس با مبدا هر بار که لوگین به ادمین انجام میشه.

روی سیستم call back به یک license manager ایجاد کنید و روی LM لوگ های کال بک آی پی ها رو بازدید کنید.

soheyl_ir89
July 12th, 2012, 22:09
برای این کارهایی که گفتید و من به خاطر دانش کمم متوجه نشدم، چه دانشی باید داشته باشیم؟

amirlord
July 12th, 2012, 22:14
سلام
برای نوشتن لایسنس سرور در خدمت شما هستم :)
php !

camelian77
July 12th, 2012, 22:19
چند تا راه:

۱. اسکریپت رو با نام دامنه + آی پی encrypt کنید.

۲. یه به قول دوستان license server راه اندازی کنید (ماژول ش برای WHMCS موجود هست) و لایسنس رو درون کد قرار بدید و سپس کد رو encrypt کنید.

soheyl_ir89
July 12th, 2012, 22:38
چند تا راه:

۱. اسکریپت رو با نام دامنه + آی پی encrypt کنید.

۲. یه به قول دوستان license server راه اندازی کنید (ماژول ش برای WHMCS موجود هست) و لایسنس رو درون کد قرار بدید و سپس کد رو encrypt کنید.

کدوم روش بهتره؟
از نظر امنیت

amirlord
July 12th, 2012, 22:42
کدوم روش بهتره؟
از نظر امنیت
لایسنس سرور !

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

camelian77
July 12th, 2012, 23:11
در این زمینه باید یه رساله نوشت.

به طور کلی کد رو باید encrypt کنید وگرنه از دست می‌ره، اونم زبون‌های اسکریپتی مثل php رو.

روش لایسنس سرور به طور کلی از این ایده استفاده می‌کنه که این زیر توضیح می‌دم. در این ضمن توجه کنید که تمام این قصه بر این پایه بنا شده که الگوریتم مورد استفاده‌ی ما مخفی هست و برای کاربر نهایی غیر قابل تغییر.

۱. قبلش بگذارید روش های اولیه رو شرح بدیم. سیستمی مثل مثلا بازی Age of Empires اگه دیده بوده باشید، یه سریال نامبری داشت. اون رو وارد می‌کردیم و تمام! قفل باز می‌شد. اون سریال نامبر یک کلید هست که هر کسی داشته باشه می‌تونه قفل رو باز کنه و اگر چند نفر یک کلید رو داشته باشن همه قفل رو باز می‌کنن.

۲. بعد سیستمهایی اومد که با اینترنت اکتیویت می‌شدن. این مد نظر ما هست.

توی license server کاری که می‌کنیم این هست. اسکریپت شما به عنوان کلاینت یه مقداری اطلاعات از کاربر (مشتری شما) دریافت می‌کنه، مثلا یک کد اکتیویشن (Key-Eins) .

سپس خودش از محیط اش یه مقدار اطلاعات جمع آوری می‌کنه (Deployment Data) مثل آی پی و هاست نیم سرور (مثال: سی پنل با این دو کار می‌کنه)

داخل هر نسخه‌ای که تحویل شده هم یک سریال منحصر به فرد وجود داره (Identification Key) . مجموعه‌ی این اطلاعات تشکیل یک self-key رو می‌دن که کاملا یکتا و غیر بازگشتی هست و نوعی private key هست و سپس به سرور مرکزی شما license server فرستاده می‌شه تا بررسی شه.

داخل سرور شما یک پروسه تشخیص می‌ده که آیا این self-key درست هست یا نه و این کار با روش مقایسه انجام می‌شه.

>>>> سرور از اطلاعات دریافت کرده رو دوباره پروسس می‌کنه (به روش قبل) تا یک کلید دیگه به دست بیاره یک نوع public key. سپس این دو کلید با هم به کلاینت فرستاده می‌شن و انجا بررسی می‌شن که آیا با هم برابر هستند یا نه؟ توجه کنید که این برابری چیزی غیر از A == B هست. !!

اگر برابری اتفاق افتاد برنامه شما اجرا می‌شه. اگر نیفتاد؟

بووم.

camelian77
July 12th, 2012, 23:17
این هم مال سورس گاردین هست. زند و آیون کیوب به سادگی دیکد می‌شن :-)

Here is a sample list of features:


[*=left]locking to date with optional atomic clock servers checking
[*=left]locking to multiple domain names
[*=left]locking to multiple ip addresses
[*=left]locking to multiple LAN hardware (MAC) addresses
[*=left]improved locking to a specific domain name with encryption. The domain name is used as a part of key for encryption, so protected scripts may not be decrypted and run from another domain.
[*=left]improved locking to the ip address with encryption. The ip address is used as a part of key for encryption. This means that protected scripts cannot be decrypted and run from another ip address.
[*=left]locking of an entire PHP project, so that no protected script can run if any other script is substituted with an unencoded one or encoded with another installation of SourceGuardian. This is ideal for protecting settings, passwords etc within a PHP project.
[*=left]locking with an external license file produced by the built-in SourceGuardian for PHP license generator. This is ideal for creating protected scripts to be distributed between different users and it will even allow different locking options for different users. The SourceGuardian for PHP license generator tool can run from GUI or as command line tool which adds another powerful element - It provides a method for licenses to be dynamically generated and this would be useful (for example) when selling scripts online.
[*=left]locking so the protected script will work only online

soheyl_ir89
July 13th, 2012, 00:06
اگر برابری اتفاق افتاد برنامه شما اجرا می‌شه. اگر نیفتاد؟

بووم.

ممنون
این بووم یعنی چی؟
دقیقا چه اتفاقی می افته؟

camelian77
July 13th, 2012, 00:31
این به شما مربوطه. تا حالا ۳ نمونه رو من دیدم:

۱. برنامه اجرا نمی‌شه و پیغام عدم لایسنس می‌ده (مثل سی پنل)

۲. برنامه اجرا نمی‌شه و دیتابیس خودش رو پاک می‌کنه کاملا.

۳. برنامه اجرا می‌شه و دائما پیغام عدم لایسنس می‌ده و به مرور زمان feature هاش از کار می‌افتند (مثل ویندوز)

AriyaDownload
July 13th, 2012, 00:37
در این زمینه باید یه رساله نوشت.

به طور کلی کد رو باید encrypt کنید وگرنه از دست می‌ره، اونم زبون‌های اسکریپتی مثل php رو.

روش لایسنس سرور به طور کلی از این ایده استفاده می‌کنه که این زیر توضیح می‌دم. در این ضمن توجه کنید که تمام این قصه بر این پایه بنا شده که الگوریتم مورد استفاده‌ی ما مخفی هست و برای کاربر نهایی غیر قابل تغییر.

۱. قبلش بگذارید روش های اولیه رو شرح بدیم. سیستمی مثل مثلا بازی Age of Empires اگه دیده بوده باشید، یه سریال نامبری داشت. اون رو وارد می‌کردیم و تمام! قفل باز می‌شد. اون سریال نامبر یک کلید هست که هر کسی داشته باشه می‌تونه قفل رو باز کنه و اگر چند نفر یک کلید رو داشته باشن همه قفل رو باز می‌کنن.

۲. بعد سیستمهایی اومد که با اینترنت اکتیویت می‌شدن. این مد نظر ما هست.

توی license server کاری که می‌کنیم این هست. اسکریپت شما به عنوان کلاینت یه مقداری اطلاعات از کاربر (مشتری شما) دریافت می‌کنه، مثلا یک کد اکتیویشن (Key-Eins) .

سپس خودش از محیط اش یه مقدار اطلاعات جمع آوری می‌کنه (Deployment Data) مثل آی پی و هاست نیم سرور (مثال: سی پنل با این دو کار می‌کنه)

داخل هر نسخه‌ای که تحویل شده هم یک سریال منحصر به فرد وجود داره (Identification Key) . مجموعه‌ی این اطلاعات تشکیل یک self-key رو می‌دن که کاملا یکتا و غیر بازگشتی هست و نوعی private key هست و سپس به سرور مرکزی شما license server فرستاده می‌شه تا بررسی شه.

داخل سرور شما یک پروسه تشخیص می‌ده که آیا این self-key درست هست یا نه و این کار با روش مقایسه انجام می‌شه.

>>>> سرور از اطلاعات دریافت کرده رو دوباره پروسس می‌کنه (به روش قبل) تا یک کلید دیگه به دست بیاره یک نوع public key. سپس این دو کلید با هم به کلاینت فرستاده می‌شن و انجا بررسی می‌شن که آیا با هم برابر هستند یا نه؟ توجه کنید که این برابری چیزی غیر از A == B هست. !!

اگر برابری اتفاق افتاد برنامه شما اجرا می‌شه. اگر نیفتاد؟

بووم.
از توضیحاتتون ممنونم
1- ببخشید جسارتا اگه license server به هر دلیلی دان بشه یا از کار بیوفته اینجا دیگه اسکریپت کار نمی کنه؟
2- بعد هر بار چک کردن کد لایسنس این خللی رو در اسکریپت ایجاد نمی کنه؟ مثلا می تونه یکی از این موارد کاهش لود باشه (چون هر دفعه باید درخواست به یک سرور جداگانه ارسال بشه) ، اگر به این شکل هست آیا راهی هست که این رو برطرف کرد؟
3- و مورد سوم، این الگوریتم رو چطوری می خوایید در کدهاتون قرار بدید که به عنوان مثال خریدار متوجه نشه؟ با برداشتن اون چند خط کد چه اتفاقی می یوفته؟
4- و اینکه شما می تونید یک اسکریپتی که لایسنس داره رو غیرفعالش کنید؟ (یعنی بدون لایسنس بشه استفاده کرد)
با سپاس از راهنمایی شما

camelian77
July 13th, 2012, 00:52
1- ببخشید جسارتا اگه license server به هر دلیلی دان بشه یا از کار بیوفته اینجا دیگه اسکریپت کار نمی کنه؟
2- بعد هر بار چک کردن کد لایسنس این خللی رو در اسکریپت ایجاد نمی کنه؟ مثلا می تونه یکی از این موارد کاهش لود باشه (چون هر دفعه باید درخواست به یک سرور جداگانه ارسال بشه) ، اگر به این شکل هست آیا راهی هست که این رو برطرف کرد؟

۱و ۲ --> ما هر بار که اسکریپت ران می‌شه کلید ها رو چک نمی‌کنیم. بلکه بار اول این کلید public از سرور مرکزی دریافت می‌شه، و یه مدت زمان زندگی داره (Time to Live TTL) . تا موقعی که زمان داره معتبر هست. مثلا ۱ ساعت یا ۲ روز یا یک هفته. این کلید رو درون کلاینت نگه می‌داریم که دائم متصل به لایسنس سرور نشیم.

ضمنا این time to live خودش یکی از پارامترهایی هست که key رو می سازه و به شکل مستقل در کد نمی‌نویسینمش . یعنی کلید ها بعد از مدتی خودشون اکسپایر می‌شن. (مثلا اون کرک های احمقانه ویندوز که ۱۸۰ روز یه بار نابود می‌شن!)


3- و مورد سوم، این الگوریتم رو چطوری می خوایید در کدهاتون قرار بدید که به عنوان مثال خریدار متوجه نشه؟ با برداشتن اون چند خط کد چه اتفاقی می یوفته؟

خریدار متوجه نشه؟ اگر کد اسکریپت هست که به صورت چند فایل include میشه داخلش دیگه. البته من تو برنامه نویسی همیشه فانکشن هاش و متغیر هاش و کلاس هاش رو با بقیه کد ها integrate می کنم که نشه جداش کرد.

با وجود encryption دیگه خریدار نمی‌تونه کد رو ادیت کنه که این خطوط رو برداره. دقت کنید که شرط برقراری تساوی بین کلید ها چیزی شبیه به این نیست:


if ($A == $B)
\\code runs

و پیچیده تر از اینه !!


4- و اینکه شما می تونید یک اسکریپتی که لایسنس داره رو غیرفعالش کنید؟ (یعنی بدون لایسنس بشه استفاده کرد)

این رو متوجه نشدم . منظورتون من نوعی هستم یا کلا سوال اینه که می‌شه غیر فعال کرد یا نه؟ در مورد دوم باید بگم نگاهی به اینجا بکنید: مرجع جدیدترین اسکریپت های روز دنیا - NuLLeR (http://www.nuller.ir/) خوب معلومه دیگه. خیلی از برنامه ها هک می‌شن. البته عمدتا کار ایرانی ها نیست این مسائل. :دی


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

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

AriyaDownload
July 13th, 2012, 01:08
از اینکه پاسخم رو دادید ممنونم
در مورد سوم:
امکانش هست بیشتر توضیح بدید، نحوه کدنویسیش چطوری هست؟
من دقیقا احساس کردم از همون دستور if استفاده می شه، اگه امکانش هست ممنون می شم بیشتر توضیح بدید
در مورد چهارم هم: بله، منظورم شما هست.
یک اسکریپت خارجی هست قیمتش تقریبا 600 دلاری هست، با وضع موجود ایران ارزش خرید رو نداره
اگه انجام می دید بفرمایید تا آدرس اون اسکریپت رو پ خ کنم
با سپاس از راهنمایی شما

camelian77
July 13th, 2012, 04:39
از اینکه پاسخم رو دادید ممنونم
در مورد سوم:
امکانش هست بیشتر توضیح بدید، نحوه کدنویسیش چطوری هست؟
من دقیقا احساس کردم از همون دستور if استفاده می شه، اگه امکانش هست ممنون می شم بیشتر توضیح بدید
با سپاس از راهنمایی شما

در این مورد باید کمی مطالعه کنم، اگر فوری هست از mzh_sohrabz در همین فروم بپرسید یا یک ایمیل بزنید به info@raypar.ir

به طور خلاصه، یک متن ساده قابل رمز گذاری دو طرفه با یک کلید هست. (دوطرفه = با همان کلیدی که قفل می‌شود باز هم می‌شود!) مثلا این تابع در پی اچ پی این کار رو می‌کنه:
PHP: mcrypt_encrypt - Manual (http://php.net/manual/en/function.mcrypt-encrypt.php)

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



$to_be_run_code = 'alkjdnhalkdlajsdalkjdhnakjdnakjdnakdjakjdhnakdjak djandkjand';

// this is the Key generated by license server, as described above
$key = 'we are great people!';

eval(mcrypt_decrypt($to_be_run_code, $key));



این جوری کد رمزگذاری شده بازگشایی شده و اجرا می‌شه. البته خیلی راه های دیگه هم هست. مثلا اینکه تعاریف رو، یا بخش لاگین رو، یا ... رمز کنیم با key گفته شده. ولی حتی اون if else هم با encryption که ترکیب بشه قوی خواهد بود.


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


بفرستید حداقل نگاه کنم!