Подтверждение лицензионного ключа в отдельной форме?
У меня есть приложение, которое имеет функцию лицензионного ключа.
Пользователь получает свой лицензионный ключ, затем вводит его в TextBox, куда должен идти лицензионный ключ, и, если лицензионный ключ действителен, его переводят в основную форму, где находятся все функции.
Теперь, чтобы сделать мою программу более безопасной, мне нужно иметь возможность проверить, что пользователь определенно набрал свой лицензионный ключ, и он не сделал ничего, кроме удаления (декомпиляции) формы лицензионного ключа, чтобы они могли получить доступ к основная форма, где все функции.
Примечание. Мои лицензионные ключи хранятся на сервере.
Как я могу проверить, что пользователь определенно набрал лицензионный ключ?
Ниже приведен код.
AddLicense.vb:
Imports SKM.V3
Imports SKM.V3.Models
Imports SKM.V3.Methods
Public Class AddLicense
Private p_oRandom As Random
Private Const INTERVAL_MIN_SEC As Integer = 4
Private Const INTERVAL_MAX_SEC As Integer = 25
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If BunifuProgressBar1.Value = 50 Then
Label3.Show()
Label2.Hide()
End If
BunifuProgressBar1.Value += 1
If BunifuProgressBar1.Value = BunifuProgressBar1.MaximumValue Then
BunifuProgressBar1.Hide()
Label3.Hide()
Label2.Hide()
Timer1.Stop()
BunifuMaterialTextbox1.Show()
BunifuThinButton21.Show()
Label4.Show()
LinkLabel1.Show()
BunifuThinButton22.Show()
End If
Timer1.Interval = p_oRandom.Next(INTERVAL_MIN_SEC, INTERVAL_MAX_SEC) * 3
End Sub
Private Sub BunifuImageButton1_Click(sender As Object, e As EventArgs) Handles BunifuImageButton1.Click
Me.Close()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
p_oRandom = New Random
End Sub
Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
Try
Process.Start("https://selly.gg")
Catch ex As Exception
End Try
End Sub
Sub Nolicense()
BunifuThinButton21.Enabled = False
End Sub
Private Sub BunifuThinButton21_Click_1(sender As Object, e As EventArgs) Handles BunifuThinButton21.Click
Dim token = "WyIxMDM2IiwiZ082d2dnS0FmTkRuTXNPcGhlSkllVEx6ckFWMFhhSzlMM3Rvc01xUSJd"
Dim key = BunifuMaterialTextbox1.Text.Replace(" ", "")
Dim license = New LicenseKey() With
{
.ProductId = 3888,
.Key = key
}
If license.Refresh(token, True) Then
' we are able to auto complete missing key info
Me.BunifuThinButton21.Enabled = license.HasFeature(1).IsValid() ' either we have feature1 or not.
MsgBox("License is valid! Thanks for purchasing.")
Me.Hide()
Sploitbase.Show()
If license.HasFeature(4).HasNotExpired().IsValid() Then
Me.Hide()
Sploitbase.Show()
ElseIf license.HasNotFeature(4).IsValid() Then
Else
MsgBox("Your license has expired and cannot be used.")
Nolicense()
End If
license.SaveToFile()
Else
' something went wrong.
MsgBox("Unable to access the license server or the key is wrong.")
End If
Me.Close()
End Sub
Private Sub BunifuThinButton22_Click(sender As Object, e As EventArgs) Handles BunifuThinButton22.Click
End Sub
End Class
Sploitbase.vb - основная форма:
Imports SKM.V3
Public Class Sploitbase
Private Sub Sploitbase_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Public Sub NoLicense()
End Sub
Private Sub TabPage1_Click(sender As Object, e As EventArgs)
End Sub
Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs)
Try
Process.Start("https://selly.gg")
Catch ex As Exception
End Try
End Sub
End Class
1 ответ
Я считаю, что вы хотите, чтобы пользователи не декомпилировали вашу программу и полностью не удалили форму лицензионного ключа...
К сожалению, невозможно остановить это, поскольку программа может быть запущена на обычном компьютере, ее можно декомпилировать, иначе процессор не сможет ее обработать.
Это означает, что было бы возможно удалить соответствующие инструкции для этого, и C# и VB легко декомпилируются - инструменты, такие как dotPeek, получают действительный исходный код (он не будет точно таким же, как оригинал, но все еще читаемый и запускается как оригинал) просто одним щелчком мыши.
Имейте в виду, что даже правильные коммерческие программы, сделанные целыми компаниями, имеют эту проблему.
Итак, что вы могли бы "сделать"? У меня есть только два предложения... но они не будут работать слишком хорошо.
Один только усложняет, а другому нужен постоянный доступ к Интернету.
затемнение
Запутывание существенно затрудняет чтение кода после декомпиляции, однако это не остановит людей от удаления формы, а лишь сделает ее немного сложнее.
Я разместил его в качестве опции, потому что это сделает код очень запутанным при перекомпиляции, и может быть полезно "защитить" его немного больше. Однако помните: "Это слабый слой защиты для слабого злоумышленника".
Обфускатором, который вы могли бы использовать, является Eazfuscator.NET, на этой веб-странице, которую я отправил, также есть описание того, что он делает и как его использовать - на него, возможно, стоит взглянуть.
Интернет-серверы
Для этого требуется подключение к Интернету... но это единственный другой вариант, который у вас есть - либо этот, либо... способный избавиться от ключа продукта.
По сути, в этой идее вы заставляете сервер выполнять всю работу, которую должно выполнить приложение, а затем возвращаете результат.
Представьте, что компьютер пользователя является сервером. Их "сервер" выполняет код, и поэтому код находится на их "сервере" (в противном случае ему нечего запускать), и все обрабатывается на их сервере. Теперь, если вы запускаете его на своем сервере, весь код находится на вашем сервере, и ваш сервер только возвращает результат, то есть они не могут получить доступ к процессу, который обеспечивает этот результат.
В конце концов, это будет означать, что приложение физически не сможет ничего сделать без лицензионного ключа, поскольку единственный способ обработки данных - через сервер, а сервер не будет обрабатывать данные без продукта. ключ.
Единственным недостатком этого является то, что у вас должно быть подключение к Интернету, а если подключение к Интернету медленное - программа будет работать медленно.
Поскольку вы хотите знать, как это сделать на vb.net, может помочь ASP.NET, но он действительно предназначен для создания полноценного веб-сайта, а не просто для обработки нескольких задач.
Я могу оставить на ваше усмотрение то, как вы хотели бы подойти к этой задаче, но вот один из способов сделать это:
Приведенный ниже код выполнит "запрос" к определенному URL-адресу, а затем вернет результат. Таким образом, вы можете сделать так, чтобы при переходе по этому URL-адресу сервер обрабатывал данные (включая ключ продукта) и возвращал обратно результат.
Dim request As System.Net.HttpWebRequest
Dim response As System.Net.HttpWebResponse
request = System.Net.HttpWebRequest.Create("https://URLHERE")
response = askforupdate.GetResponse
Dim result As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream)
result
теперь содержит String
- но имейте в виду, что вы можете использовать это практически для всего, даже для изображений! (Изображения просто New Bitmap(response.GetResponseStream)
)
Вы можете передавать данные на сервер через строку запроса, например:
my.website/processSomething?license=AAAAAAAA&sizeInput=241&somethingElse=asagsag
Но, на самом деле, это зависит от вас, как вы это делаете.
Извините, я не смог дать вам точное решение, но на самом деле его нет. Вы собираетесь в конечном итоге пожертвовать чем-либо.
Надеюсь, это было по крайней мере полезно и помогло вам понять, что на самом деле невозможно предотвратить взлом вашего программного обеспечения, не потеряв что-либо.