PDA

View Full Version : قفل برنامه



goldpower
یک شنبه 28 اسفند 1390, 23:36 عصر
چه طور می شه برای برنامه قفلی درست کرد که شماره cpu رو بگیر ه و یک کد دلخواه درست کنه تا به سازنده برنامه بده و کد فعال سازی رو دریافت کنه .

بهروز عباسی
یک شنبه 28 اسفند 1390, 23:43 عصر
درود دوست عزیز توی تالار: امنیت در نرم افزار و برنامه نویسی در این مورد مطلب زیاد هست
موفق باشی


چه طور می شه برای برنامه قفلی درست کرد که شماره cpu رو بگیر ه و یک کد دلخواه درست کنه تا به سازنده برنامه بده و کد فعال سازی رو دریافت کنه .
توضیحات من:(زیاد جدی نگیر)
اول باید شماره سریال قطعات سخت افزاری رو بدست بیاری(مثلاً:Hard,cpu,main) و بعد الگوریتمی طراحی کنی که از مجموع شماره سریالها سریالی رو بسازه و طبق اون سریال واحد بدست آمده شماره سریال واحد دیگه ای رو تولید کنه
برای بدست اوردن شماره سریال قطعات فکر کنم باید از WMI کوری بگیری.

setroyd
دوشنبه 29 اسفند 1390, 00:34 صبح
شما مگه سایتی دارید تا الگریتم به شما ارسال شود و شما کد فعال سازی بدید ؟ چون نیاز به یک سرور هست که مشخصات کلاینت رو بگیره و ارسال کنه .

goldpower
دوشنبه 29 اسفند 1390, 00:40 صبح
شما مگه سایتی دارید تا الگریتم به شما ارسال شود و شما کد فعال سازی بدید ؟ چون نیاز به یک سرور هست که مشخصات کلاینت رو بگیره و ارسال کنه .

حالا بزار تا اصل موضوع حل بشه
اگه لازم بشه سایتم ردیف می کنم

setroyd
دوشنبه 29 اسفند 1390, 00:47 صبح
اصل !!! شما بیا سریال cpu رو بگیر و کد کن به keyascii دلخواه خودت و کد رو بده به سیستم طرف به همین راحتی . مشکل دقیقا همون سایت نه 4 خط نوشتن کد ساده !!

بهروز عباسی
دوشنبه 29 اسفند 1390, 01:12 صبح
اصل !!! شما بیا سریال cpu رو بگیر و کد کن به keyascii دلخواه خودت و کد رو بده به سیستم طرف به همین راحتی . مشکل دقیقا همون سایت نه 4 خط نوشتن کد ساده !!
دوست عزیز اتفاقاً همون 4 خطه که مشکله اصلی چیزی که شما میگی فقط کافی برنامه رو با یه دیباگر باینری مثلOllyDBG یاSyser باز کنی کمی هم اسمبلی بلد باشی فاتحه برنامه رو باید خوند
اول باید قفل رو طراحی کنه بعد یه کیجن براش بسازه کالا یا از طریق تلفن یا وب سایت یا... کد فعال سازی ارائه بده

بهروز عباسی
دوشنبه 29 اسفند 1390, 01:27 صبح
این نمونه خیلی ساده برای این کاره امید وارم بکارت بیاد84398

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

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

arash020
دوشنبه 29 اسفند 1390, 01:35 صبح
با سلام

کار سختی نیست؛سعی کن شماره سریال چیزی رو بگیری که مطمئنی روی هیچ سیستمی یکسان نیست.
یه کلمه به عنوان کلید اصلی برای رمز کردن (ساخت قفل) انتخاب کن
و با یه کد دلخواه(هرجور که خودت دوست داری؛جاسازی کلمه رمز به صورت بالعکس توی شماره سریال , یا هر تغییری که خودت خواستی و تونستی و دوست داشتی)
البته طوری که قابل بازگشت باشه برای خودت یه رمز درست کن
همین کار رو باید یه بار دیگه با یه الگوریتم یا روش دیگه انجام بدی.
(باید دوتا رمز ایجاد کنی که دومی از اولی تولید شده باشه و بشه از دومی فهمید که اولی چی بوده.%100)
و بریزش توی یه متغیر
حالا باید کدی بنویسی که دنبال وجود یا عدم وجود کلید بگرده مثلا توی رجیستری.
اگه رمز وارد نشده بود یا وجود نداشت برنامه هدایت بشه به اون قسمتی از برنامه که رمز تولید میکنه و برنامه رمز دوم یا اول(دلخواه برنامه نویس) رو نشون کاربر بده
تو باید بتونی با گرفتن مثلا رمز اول ,رمز دوم رو همون طور که برنامه ت ساختتش بسازی و برای فعال شدن برنامه به مشتری بدی تا در محلی از برنامه اونو به عنوان کلید اصلی فعال سازی
وارد کنه
همین.امیدوارم تونسته باشم برسونم...
موفق باشی

بهروز عباسی
دوشنبه 29 اسفند 1390, 01:41 صبح
با این کد میتونی سریال سخت افزاری منحصر به فرد سیستم رو بگیری و براش یه کد فعال سازی بدی
این کد رو توی فرم بنویس دوتا Text boxبه نام های txtKeyوtxtLock بیارروی فرم تمومه

Rem coded by behrooz abbasi
Rem www.programming-co.com
Private Sub Form_Load()
Dim obj1, obj2 As Object, strTemp As String

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_IDEController")

For Each obj2 In obj1
If Not Trim(obj2.Caption) = vbNullString Then strSerial3 = obj2.Caption: Exit For
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_SCSIController")

For Each obj2 In obj1
strSerial2 = obj2.Caption
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_Processor")

For Each obj2 In obj1
strSerial1 = obj2.Caption
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")

For Each obj2 In obj1
If Not Trim(obj2.Caption) = vbNullString Then strSerial = obj2.Caption: Exit For
DoEvents
Next

strSerial = StrReverse(strSerial2) + Right(strSerial2, 1) + StrReverse(Right(strSerial, 7)) + StrReverse(Left(strSerial1, 3)) + StrReverse(Right(strSerial3, 4))
strSerial = StrReverse(strSerial)
strSerial = UCase(strSerial)
txtLock.Text = "Hardware code:" + strSerial

incode = vbNullString
For bCnt = 1 To Len(strSerial) / 3
sTemp = Mid(strSerial, bCnt, 1)
incode = incode + Trim(Str(Asc(sTemp)))
Next
Trim incode
incode = Int((Val(incode) / 100000000000#) * 1.9)
incode = StrReverse(incode)
txtKey.Text = "Activation code:" + incode
End Sub

Private Sub lblLock_Click()

End Sub

بهروز عباسی
دوشنبه 29 اسفند 1390, 02:55 صبح
اگه اینهم به دردت نخورد و کمی پول زیادی داشتی یه قفل برای برنامت بخر توی همون بخش که گفتم میتونی یدونه خوبشو پیدا کنی

بهروز عباسی
دوشنبه 29 اسفند 1390, 02:59 صبح
با سلام

کار سختی نیست؛سعی کن شماره سریال چیزی رو بگیری که مطمئنی روی هیچ سیستمی یکسان نیست.
یه کلمه به عنوان کلید اصلی برای رمز کردن (ساخت قفل) انتخاب کن
و با یه کد دلخواه(هرجور که خودت دوست داری؛جاسازی کلمه رمز به صورت بالعکس توی شماره سریال , یا هر تغییری که خودت خواستی و تونستی و دوست داشتی)
البته طوری که قابل بازگشت باشه برای خودت یه رمز درست کن
همین کار رو باید یه بار دیگه با یه الگوریتم یا روش دیگه انجام بدی.
(باید دوتا رمز ایجاد کنی که دومی از اولی تولید شده باشه و بشه از دومی فهمید که اولی چی بوده.%100)
و بریزش توی یه متغیر
حالا باید کدی بنویسی که دنبال وجود یا عدم وجود کلید بگرده مثلا توی رجیستری.
اگه رمز وارد نشده بود یا وجود نداشت برنامه هدایت بشه به اون قسمتی از برنامه که رمز تولید میکنه و برنامه رمز دوم یا اول(دلخواه برنامه نویس) رو نشون کاربر بده
تو باید بتونی با گرفتن مثلا رمز اول ,رمز دوم رو همون طور که برنامه ت ساختتش بسازی و برای فعال شدن برنامه به مشتری بدی تا در محلی از برنامه اونو به عنوان کلید اصلی فعال سازی
وارد کنه
همین.امیدوارم تونسته باشم برسونم...
موفق باشی


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

goldpower
دوشنبه 29 اسفند 1390, 08:58 صبح
با این کد میتونی سریال سخت افزاری منحصر به فرد سیستم رو بگیری و براش یه کد فعال سازی بدی
این کد رو توی فرم بنویس دوتا Text boxبه نام های txtKeyوtxtLock بیارروی فرم تمومه

Rem coded by behrooz abbasi
Rem www.programming-co.com
Private Sub Form_Load()
Dim obj1, obj2 As Object, strTemp As String

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_IDEController")

For Each obj2 In obj1
If Not Trim(obj2.Caption) = vbNullString Then strSerial3 = obj2.Caption: Exit For
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_SCSIController")

For Each obj2 In obj1
strSerial2 = obj2.Caption
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_Processor")

For Each obj2 In obj1
strSerial1 = obj2.Caption
DoEvents
Next

Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")

For Each obj2 In obj1
If Not Trim(obj2.Caption) = vbNullString Then strSerial = obj2.Caption: Exit For
DoEvents
Next

strSerial = StrReverse(strSerial2) + Right(strSerial2, 1) + StrReverse(Right(strSerial, 7)) + StrReverse(Left(strSerial1, 3)) + StrReverse(Right(strSerial3, 4))
strSerial = StrReverse(strSerial)
strSerial = UCase(strSerial)
txtLock.Text = "Hardware code:" + strSerial

incode = vbNullString
For bCnt = 1 To Len(strSerial) / 3
sTemp = Mid(strSerial, bCnt, 1)
incode = incode + Trim(Str(Asc(sTemp)))
Next
Trim incode
incode = Int((Val(incode) / 100000000000#) * 1.9)
incode = StrReverse(incode)
txtKey.Text = "Activation code:" + incode
End Sub

Private Sub lblLock_Click()

End Sub




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

بهروز عباسی
دوشنبه 29 اسفند 1390, 13:03 عصر
لطفا یه نمونه خودتون درست کنید و قرار بدهید.همین که گذاشتم یه نمونه بود فقط دوتا text box میخواد

goldpower
دوشنبه 29 اسفند 1390, 13:20 عصر
همین که گذاشتم یه نمونه بود فقط دوتا text box میخواد
مشکل کجاست ؟

بهروز عباسی
دوشنبه 29 اسفند 1390, 13:37 عصر
مشکل کجاست ؟
Set obj1 = GetObject("winmgmts:").InstancesOf("Win32_IDEContr____xxx_____oller")
وقتی کد رو از این صفحه کپی میکنی مثلاً اونجا که____xxx_____گذاشتم فاصله ایجاد میشه(داخل vb) فاصله هارو پاک کن ردیفه
بایدبشه این Win32_IDEController

goldpower
دوشنبه 29 اسفند 1390, 13:55 عصر
برنامه اجرا شد و این پیغام داد :

Hardware code:EL 1INT DEVICE

Activation code:0

بهروز عباسی
دوشنبه 29 اسفند 1390, 14:10 عصر
برنامه اجرا شد و این پیغام داد :

Hardware code:EL 1INT DEVICE

Activation code:0

احتمالاً یکی از device های که برنامه ازش استفاده میکنه روی سیستم شما وجود نداره چون برنامت رو اجرا کردم مشکلی نداشت

goldpower
دوشنبه 29 اسفند 1390, 14:18 عصر
احتمالاً یکی از device های که برنامه ازش استفاده میکنه روی سیستم شما وجود نداره چون برنامت رو اجرا کردم مشکلی نداشت

یه توضیح هم برای اکتیو کد بدید

بهروز عباسی
دوشنبه 29 اسفند 1390, 14:24 عصر
یه توضیح هم برای اکتیو کد بدید
اگه منظورت اینه

Activation code:0
چیزی نیمدنم شاید به مورد قبل (نداشتن device) مربوط بشه کمی با کدها بازی کن(کم و زیاد) احتمالاً درست بشه
منم اگه تونستم کمک میکنم

بهروز عباسی
دوشنبه 29 اسفند 1390, 14:27 عصر
در مورد دیوایسها هم بگم سری بهhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa394146%28v=vs.85%29.aspx بزن کمکت میکنه

goldpower
دوشنبه 29 اسفند 1390, 14:36 عصر
اگه منظورت اینه

چیزی نیمدنم شاید به مورد قبل (نداشتن device) مربوط بشه کمی با کدها بازی کن(کم و زیاد) احتمالاً درست بشه
منم اگه تونستم کمک میکنم


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

بهروز عباسی
دوشنبه 29 اسفند 1390, 14:41 عصر
داستان از این قراره که :
برنامه یه کد تولید می کنه می ده بیرون بعد سازنده از روی اون کد یه اکتیو کد درست می کنه و می ده به مشتری و مشتری با وارد کردن اون برنامه رو فعال می کنه.

این دیگه به خودت بستگی داره که چه آلگوریتمی براش طراحی کنی و چطوری میخوای اکتیو کد رو به مشتریت ارائه بدی

اما توی کد این قطعه سریال سخت افزاری رو میگیره و اکتیو کد ارائه میده:

incode = vbNullString

For bCnt = 1 To Len(strSerial) / 3
sTemp = Mid(strSerial, bCnt, 1)
incode = incode + Trim(Str(Asc(sTemp)))
Next

Trim incode
incode = Int((Val(incode) / 100000000000#) * 1.9)
incode = StrReverse(incode)

txtKey.Text = incode

goldpower
دوشنبه 07 فروردین 1391, 15:47 عصر
-- کد خوبی بود