السلام عليكم ورحمة الله وبركاتة
سنقوم هنا إن شاء الله بطرح الأفكار والأكواد البرمجية الخاصة بحماية البرامج
إن شاء الله الكل يتفاعل ونتستفيد جميعا:)
عرض للطباعة
السلام عليكم ورحمة الله وبركاتة
سنقوم هنا إن شاء الله بطرح الأفكار والأكواد البرمجية الخاصة بحماية البرامج
إن شاء الله الكل يتفاعل ونتستفيد جميعا:)
وعليكم السلام ورحمة الله وبركاته
شكل الموضوع رهيب (:
1- حماية برامجك بخصوصية من المتطفل
الفكرة هي بناء برنامج ثانوي يطلب كلمة سر و سوف يعمل البرنامج الاساسي ان كانت الكلمة صحيحة
فكرة تصميم برنامج يعمل على فايند ويندوز مع اعطاء الصلاحيات للمستخدم كأن يجبر فقط على تصفح موقع المنتدى
2- حماية برنامج بكلمة سر ( شيء مثل الكيجن )
الفكرة هي ان البرنامج يعطي رمز خاص لكل حاسب وعلى اساس هذا الرمز سوف يمكن تسجيل البرنامج ( وذلك بعد ان دفع 1000 $ لقاء البرنامج)
(:
السلام عليكم ورحمة الله وبركاته
اسف على التأخر
ولكن حماية برنامج بكلمة سر ( شيء مثل الكيجن )
ليس بالأمر الصعب او المعقد
ولكن الكيجن ليس حماية لأنه يمكن انتاجه خاصة اذا كان محدد
بزمن معين واذا كان غير محدد بزمن معين
يكفي ان يحصل عليه شخص واحد
ليتم نقل الي كل مستخدمي البرنامج الاخرين
واما طريقة الحماية بواسطة السيريال نمبر
فهي طريقة بسيطة جدا جدا
وانتجت كودها وسارفعه لكم لاحقا اذا طلبتموه
السلام عليكم
لا ادري ولا اعلم شيء عن السكيريتي ,
لأن الهكر ما خلو شي
شكرا لك يا ماجد , ويالله مشاركتكم ,,,,,,
السلام عليكم
هذا هو الكود
كود:
'Add 1 CommandButton (named Command1) to your Form.
Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long) As Long
Private Function GetSerialNumber(strDrive As String) As Long
Dim SerialNum As Long
Dim res As Long
Dim Temp1 As String
Dim Temp2 As String
Temp1 = String$(255, Chr$(0))
Temp2 = String$(255, Chr$(0))
res = GetVolumeInformation(strDrive, Temp1, _
Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
GetSerialNumber = SerialNum
End Function
Private Sub Command1_Click()
'Replace 'c:\' with the drive you want to find his serial number
Call MsgBox(GetSerialNumber("c:\"))
End Sub
هذا الكود ليس لحماية اي برنامج وليس له اي خصوصية في الحماية هذا الكود يعطيك الرقم التسلسلي لوحدة الحفظ سي هذا ما اراه امامي من كود ولم اشاهد المرفق (:
صحيح كلامك ولكن ليس هذه الطريقة ليسة نافعة 100% سبب هو ان كراكرز دوما يعرفون كيفية الغاء ربط البرنامج ليصل الى سطر الكود وفي الوقت الحالي وجدت ان الشركات بدأت تقدم نسخ تجريبية بمعنى الكلمة و باتت النسخ التي يقرأ عليها تجريب لاترضي حتى المستخدم حتى بعد فك الرمزاقتباس:
هذا ما يسمى ببصمة الجهاز Hardware Fingerprint
وهذا هو ما ابحث عنة منذ اكثر من 3 اشهر لاكني لم اعثر على كود واحد يخص هذا الموضوع
وهذة اعتقد هي افضل طريقة حماية من النسخ على الأطلاق
وايضا ليس كل الكراكرز فهيمين اي ان عملهم اصبح روتين ( وجد برنامج ، البرنامج يحتاج الى تسجيل = وقف عملية التسجيل ليصبح البرنامج يعمل الى الابد ) وهنا يأتي اكبر خطأ لان البرنامج هو اصلا متوقف كأن لا يعمل مثلا كونفيرت لدوكيومنت ولكنه ينشئ الملف التحويل ( بمحتويات صفر )
هنا يأتي عمل الهاكر لاختراق المواقع و جلب نسخة الاصلية الكاملة للنشر ولكن ايضا يحتج الى رقم سري و من هنا نرجع الى كراكرز
انا لاحظت انو في طريقة جدا ممتازة هي ان البرنامج ينشئ رمز سري يعمل مثلا على حاسوبي و لايعمل مثلا على حاسوبك
الرمز كأن
your pass~active =588hdwn
البرنامج سوف يطالبك فقط user & password
تذكر السطر الي فوق يعتمد علىوهنا سوف تكمن المشكلةاقتباس:
your pass~active =588hdwn
المهم كيف يمكن انشاء رمز متغير
كأن يعتمد على كم الساعة الان ( في هذه الحالة الاكتذ حيكون متغير )
او كأن يكون رقم متغير مثل
Int(Rnd * 9) + 1
وحاول ان تبحث عن alphanumeric او hex
يمكن تجد حلول
جزاك الله خير اخي محمد
وارغب ان اسالك هل هناك طريقة لتغيير الرقم التسلسلي برمجيا
وهل عند فرمتة الهارد يتم تغيير الرقم التسلسلي
فعلا الكود لا يقوم بأي حماية لاكن عن طريق هذا الكود سوف احصل على الرقم التسلسلي
للهاردسك الذي سأضع علية برنامجي وعند تشغيل مرة اخرى سيقوم البرنامج بقراءة الرقم التسلسلي
من الجهاز ومقارنتة مع ماهو مسجل سابقا في البرنامج:)
سوف اقوم ان شاء الله بعمل المشروع اما عن طريقة تسجل البرنامج فهي ستكون عن طريق
موقع على الأنترنت والخطوات كتالي
1- طبعا لكل برنامج رقم معين مثلا نسخة رقم 1 والنسخة رقم 2 وهكذا
البرنامج ليس موجود على الأنترنت انما يقوم الزبون بشراءة منك شخصيا او عن طريق وكيلك:)
2- يقوم البرنامج بإخذ الرقم التسلسلي وعرضة على المستخدم ليسجلة في الموقع وكذالك رقم النسخة
3- يقوم البرنامج بتشفير الرقم التسلسلي بطريقة معينة ويحتفظ بة لنفسة
4- عند ادخال المستخدم الرقم التسلسلي في الموقع فأنة يقوم بتشفيرة بنفس طريقة البرنامج
ومن ثم يقوم بعرضة على المستخدم كرمز تفعيل
( هناك علاقة بين رقم النسخة وطريقة التشفير) لضمان ان المستخدم يملك نسخة جديدة غير مسجلة
(موقع التسجيل لن يقبل اعطاء رمز التفعيل لرقم نسخة قد تم تسجيلها مسبقا)
وبهذة الطريقة نكون قد ضمنا إن شاء الله ان برامجنا لم يتم قرصنتها:silly: :silly: :silly:
<<اتمنى ان يرى هذا المشروع النور..............لاكن هل هناك من يرغب في مساعدتي بتصميم
الموقع الخاص بالتسجيل,,:biggthump :biggthump :biggthump
>< >< ><
بس بس بس .... بلا هكر بلا كلام فاضي
مالي نفس اقرأ شي <<<< الي ما يطول العنب ........ ^^"
السلام عليكم ورحمة الله وبركاته
انا اسف على الخطأ الغير مقصود
الكود هو
تجدوه في المرفقاتكود:
Private Function getPlusMinus(chrr) As Boolean ' <<< This function retunrs either true or false
chrr = UCase(chrr) ' depending on if a charachter is more than
' halfway through the alphabet or not...
If Asc(chrr) - 65 < 12 Then
getPlusMinus = True
Else
getPlusMinus = False
End If
End Function
Public Function genNumber(appName)
Dim appVal As Long
Dim genVal As Long
Dim tmpVar As String
Dim i As Integer
Dim seedMod As Integer
For i = 1 To Len(appName) - 0
appVal = appVal + Val(Asc(Mid$(appName, i, 1))) ' <<< Counts the value of each ascii chr
Next ' in the app name
seedMod = Int((Day(Date) & Month(Date) & Year(Date) & Hour(Time) & Minute(Time) & Second(Time)) ^ 0.2)
For i = 0 To Int(seedMod + Minute(Time) & Second(Time)) ' <<< Vb's random num generator is not
Rnd ' very random so i will make it more
Next ' random
tmpVar = ""
For i = 1 To 20 ' <<< Randomly create the 1st 4 parts of the code
If Rnd < 0.5 Then ' <<< 1 in two chance of a letter or a number
tmpVar = tmpVar & Chr(Int(Rnd * 25) + 65)
Else
tmpVar = tmpVar & Int(Rnd * 9)
End If
If Int(i / 5) = i / 5 And i <> 25 Then ' <<< Add a ' - ' every 5 charachters
tmpVar = tmpVar & " - "
End If
Next
For i = 1 To Len(tmpVar) - 0 ' <<< Creates a number based on the
If i < Len(appName) Then ' first sections. Adds or takes
If getPlusMinus(Mid(appName, i, 1)) = False Then ' depending on various things
genVal = genVal + Val(Asc(Mid$(tmpVar, i, 1))) ' Makes it mathematicaly harder
Else ' to re-order the code.
genVal = genVal - Val(Asc(Mid$(tmpVar, i, 1)))
End If
Else
If Int(i / 2) = i / 2 Then
genVal = genVal - Val(Asc(Mid$(tmpVar, i, 1)))
Else
genVal = genVal + Val(Asc(Mid$(tmpVar, i, 1)))
End If
End If
Next
If genVal < 0 Then genVal = 0 - genVal ' <<< If the number is less than 0 then make it
' positive
tmpVar = tmpVar & Mid((genVal * appVal) & "JSDEU", 1, 5) ' <<< Last part of the code is the
' 'value' of the first part of
' the code times the 'value'
' of the program name, limited
' to 5 charachters. "JSDEU" is
' to make sure the result is
' atleast 5 chars.
genNumber = UCase(tmpVar) ' <<< Returns the new key
End Function
Public Function authKey(key, appName) As Boolean
authKey = False
On Error GoTo err
Dim splt() As String
Dim appVal As Long
Dim genVal As Long
Dim tempVar As String
Dim i As Integer
key = UCase(key)
For i = 1 To Len(appName) - 0
appVal = appVal + Val(Asc(Mid$(appName, i, 1)))
Next
splt = Split(key, " - ")
splt(4) = ""
tempVar = Join(splt, " - ")
For i = 1 To Len(tempVar) - 0
If i < Len(appName) Then
If getPlusMinus(Mid(appName, i, 1)) = False Then
genVal = genVal + Val(Asc(Mid$(tempVar, i, 1)))
Else
genVal = genVal - Val(Asc(Mid$(tempVar, i, 1)))
End If
Else
If Int(i / 2) = i / 2 Then
genVal = genVal - Val(Asc(Mid$(tempVar, i, 1)))
Else
genVal = genVal + Val(Asc(Mid$(tempVar, i, 1)))
End If
End If
Next
If genVal < 0 Then genVal = 0 - genVal
splt = Split(key, " - ")
If genVal = Val(splt(4)) / appVal Then
authKey = True
Else
authKey = False
End If
Debug.Print Mid((appVal * genVal) & "JSDEU", 1, 5)
Debug.Print splt(4)
If Mid((appVal * genVal) & "JSDEU", 1, 5) = splt(4) Then
authKey = True
Else
authKey = False
End If
err:
End Function
'DEMO SUB PROCEDURE
Private Sub Command1_Click()
Dim myAppName As String
myAppName = Text1.Text
mySN = genNumber(myAppName)
Label1.Caption = mySN
End Sub
وسوف اشرح لكم طريقة اخي لأنتاج السيريال نمبر
بعد ظهيرة اليوم انشاء الله
السلام عليكم ورحمة الله وبركاته
اخوتي اليكم هذا المشروع
عن السيريال نمبر
في ( المرفقات )
السلام عليكم
شباب المشروع فشل قبل ان ينفذ
مادام هناك طريقة لإنتاج سيريال نمبر :aargh4: :aargh4:
ومشكور على تعاونك اخي محمد:02:
السلام عليكم ورحمة الله وبركاته
موضوع جيد إن شاء الله .. لكن نصيحتي إليكم لا تتعبوا بمحاولة حماية البرامج لأن هذه الحماية المطلوبة مستحيلة وغير موجودة بالمرة .
واسألوا اخواننا مبرمجي لغة التجميع :)
* بالمناسبة كسر برنامج يعتمد على رقم أو سيريال الهارد ديسك أو المازر بورد سهل جداً حتى أنني أستطيع ذلك :)
تحياتي
أبو عبد الله ـ عمر محمود هاني ـ