PDA

View Full Version : محدود کردن اجرای برنامه



samiasoft
پنج شنبه 07 شهریور 1392, 13:05 عصر
سلام

من دنبال یه کدی هستم که مثلا بشه برنامه را طوری محدود کرد که فقط n بار اجرا بشه...به شرطی که به هیچ وجه هم نشه اونو دور زد...

مثلا یه سری کدها هستن میان تو رجیستری تغییر ایجاد میکنن که خب میشه مسیر ذخیره تغییراتش رو پیدا کرد تا کد غیر فعال بشه...و یا بعضی کدها وابسته به تاریخ سیستم هستن که بازم میشه اونو دور زد.

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

Private Sub Form_Load()

' the "A" in getsetting and savesetting
' can be changed to another letter
retvalue = GetSetting("A", "0", "RunCount") ' this returns the value of the registry edit.
Worm$ = Val(retvalue) + 1 ' adds one To the value of the regisrty edit.
SaveSetting "A", "0", "RunCount", Worm$ ' saves the new value


If Worm$ < 25 Then 'put one number higher then it says.
' this is the popup to warn the user how
' many runs have been executed and how man
' y are left.
MsgBox "you have used this program " & Worm$ & " Times. Only " & (25 - Worm$) & " left."
End If

' this is the statement to check whether
' to execute the form load or end program


If Worm$ > 24 Then 'put one number lower then it says.
MsgBox "you have used this program 25 Times, purchase is now required", 16, "Sorry"
' this would send the user to a website
' in their default browser.

Unload Me
End
End If

End Sub

Mr'Jamshidy
پنج شنبه 07 شهریور 1392, 23:35 عصر
آره میشه دور زد مثل قند

اول از همه سعی نکن تو برنامه برای لایسنس هات پیغام نشون بدی که مثلا فلان روز دیگه برنامه از کار میوفته یا کد وارد شده اشتباه است و از این قبیل

مورد دوم: در این مورد زیاد بحث شده جستجو کن

m.4.r.m
شنبه 09 شهریور 1392, 11:26 صبح
چون تو ریجیستری ثبت میشه راحت میشه دورش زد مگر اینکه کاربر کاملا ناشی باشه و نفهمه رجیستری چیه و این حرفا به قول دوستم جمشیدی اصلا در این موارد خطایی نشون ندین که انقدر مونده یا باید این کارو بکنید و فلان چون توسط مهندسی معکوس برنامه به راحت ترین شکل توسط کرکر ها کرک میشه ، بهترین راه بررسی تاریخ توسط اینترنت هست شما تاریخ برنامه رو باید با تاریخی که در یک سایت اینترنتی هست بررسی کنید نه تاریخ سیستم که بشه تغییر داد و یا روش های دیگه مثل :


Option Explicit

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long

Private Declare Function EnumProcesses Lib "PSAPI.DLL" ( _
lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long

Private Declare Function EnumProcessModules Lib "PSAPI.DLL" ( _
ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long

Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" ( _
ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Function IsProcessRunning(ByVal sProcess As String) As Boolean
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String

sProcess = UCase$(sProcess)

ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(sProcess) Then
If sProcess = UCase$(sName) Then IsProcessRunning = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function

Private Sub Command1_Click()
MsgBox IsProcessRunning("C:\Project1.exe")
End Sub

hessam2003
شنبه 09 شهریور 1392, 11:51 صبح
سلام.
اگه سیستمی اصلا به اینترنت وصل نشه چگونه باید تاریخ را چک کنه؟

m.4.r.m
شنبه 09 شهریور 1392, 11:58 صبح
باید تاریخ سیستم رو بعد از دریافت بررسی کنی که تغییر نکنه اگه تغییر کرد هشدار بدی تاریخ به حالت اول بازگردانده شود .

علیرضا.ا
شنبه 09 شهریور 1392, 12:25 عصر
خب میشه توی مسیر گمراه کننده در ریجیستری سیو کرد
مثلا:
system/binary

اینجوری احتمال کمتری میره اینجا باشه:D

Mr'Jamshidy
یک شنبه 10 شهریور 1392, 07:58 صبح
خب میشه توی مسیر گمراه کننده در ریجیستری سیو کرد
مثلا:
system/binary

اینجوری احتمال کمتری میره اینجا باشه:D

ببین دوست من شما حتی اگر اطلاعات ثبت برنامه رو روی بایوس سیستم هم ثبت کنی باز هم کرکر میتونه پیداش کنه (با همون مهندسی معکوسی که توسط دوستمون اشاره شد)

باید برنامه طوری طراحی بشه که روش لایسنس چک کردن گمراه کننده باشه نه مسیر!
چون اگر کرکر بفهمه در چه زمانی لایسنس داره چک میشه چه روی سیستم شما باشه چه اینترنت بلافاصله دستور چک لایسنس رو معکوس میکنه و به آدرس و ... کاری نداره

vbhamed
یک شنبه 10 شهریور 1392, 09:09 صبح
خب میشه توی مسیر گمراه کننده در ریجیستری سیو کرد
مثلا:
system/binary
اینجوری احتمال کمتری میره اینجا باشه:D

سلام
دوستامون توضيحات لازم رو دادند اما نكته ديگه اينكه در مورد رجيستري اولا نرم افزارهايي هست كه مثل آب خوردن تغييرات رجيستري اعم از حذف و اضافه و ويرايش رو در هر لحظه نشون ميده

دوما طرف موقع نصب يك ايميج از ويندوز ميگيره و هر موقع تاريخ برنامه تموم شد برش مي‌گردونه و حالا شما هر جاي رجيستري خواستي بنويس يا فايل روي كامپيوتر كپي كن يا حتي خيلي حرفه اي باشي روي پارتيشن تيبل بنويس، همه چي برمي‌گرده به حالت اصلي، حالا تازه برنامه هايي مثل Virtual PC و Vmware كه كامپيوتر مجازي درست مي‌كنن هم بماند !


اما راه مطمئن تر :
1 - استفاده از قفل سخت افزاري (امنيت نسبي البته با رعايت شديد موارد امنيتي در كدنويسي)

2 - قفل نرم افزاري و كد فعالسازي با توجه به پارامترهاي فيزيكي و كارخانه اي سيستم مثلا سريال كارخانه اي هارد ديسك كه روي خود هارد ديسك چاپ شده (نه سريال درايوها) و سريال سي پي يو و ... كه امنيت اين روش اگر برنامه نويسي درست انجام بشه و نكاتي كه دوستان گفتن رعايت بشه از حالت اول بيشتره چون در حالت اول خود شركتهاي توليد كننده قفل سخت افزاري ممكنه بتونن از قفلتون كپي بگيرن !!!

3 - امكان عدم تغيير مشخصات اصلي برنامه توسط كاربر در مورد برنامه هايي كه ميشه از اين امكان استفاده كرد مثلا در يك برنامه حسابداري مي‌تونيد نام و تلفن و آدرس و ... كه روي فاكتورها چاپ ميشه رو به صورت كد شده درون برنامه قرار بدين و كاربر نتونه تغييرش بده و براي هر كاربر بايد خودتون فايل جداگانه ايجاد كنيد كه البته اين فايل جداگانه حتما نياز نيست فايل exe برنامه باشه بلكه مي‌تونه فايلي در كنار برنامه باشه، با اين روش حتي مي‌تونيد رو برنامتون ديگه قفل هم نزاريد، البته اگر مشخصات كاربر واقعا مهم باشه و بدون اون نشه از برنامه استفاده عملي كرد

4 - زماندار بودن حتي نسخه اصلي برنامه و تمديد مشتريان واقعي مثلا سالي يكبار يعني كلا برنامتون تا سالي ديگه كار كنه و بعدش بايد آپديت بشن، اينطوري خودتون مي‌دونيد آپديت رو به چه كساني بدين

5 - تركيب هر 4 روش بالا