在单独的表单上验证许可证密钥?

时间:2018-04-28 12:38:21

标签: vb.net validation license-key

我有一个具有许可证密钥功能的应用程序。

用户获取他们的许可证密钥,然后将其输入到许可证密钥应该进入的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 个答案:

答案 0 :(得分:0)

相信你想要的是阻止用户反编译您的程序并完全删除许可证密钥表单...

不幸的是,只要一个程序可以在普通计算机上运行就可以被反编译,不可能停止它,否则,处理器将无法处理它。

这意味着,可以删除相关的指令,C#和VB易于反编译 - 像dotPeek这样的工具获取有效的源代码(它赢了'与原始版本完全相同,但只需单击即可读取并像原版一样运行。

请记住,即使是由整个公司制作的适当的商业节目也存在这个问题。

那么,你有什么可能“做”的?好吧,我只有两个建议......但是它们不会很好用。

一个只会让它变得更难,而另一个则需要一直访问互联网。

模糊处理

混淆本质上会使代码在反编译后难以阅读,但是,它不会阻止人们删除表单,它只会使它稍微困难一些。

我将其作为一个选项发布,因为它会使代码 非常 在重新编译时感到困惑,并且“保护”它可能会有所帮助 a位 更多。但是,请记住这一点:“对于弱势攻击者来说,这是一个微弱的防御层。”

您可以使用的混淆器是Eazfuscator.NET,我发送的网页也基本上描述了它的作用以及如何使用它 - 可能值得一看。

在线服务器

这个需要连接到互联网...但是,这是你唯一的选择 - 它要么是这个要么...... 能够摆脱产品关键< / em>的

基本上,在这个想法中,你让服务器完成应用程序必须完成的所有工作,然后返回它的结果。

想象一下,用户的计算机是服务器。他们的“服务器”运行代码,因此代码位于 他们的 “服务器”(否则无法运行),并且所有内容都在其服务器上处理。现在,如果您在 服务器上运行它,则所有代码都在您的服务器上,而您的服务器 仅返回结果 ,意思是,他们无法进入提供该结果的过程。

最后,这意味着应用程序在物理上无法在没有许可证密钥的情况下执行任何操作,因为它可以通过服务器处理其数据的唯一方式,没有产品密钥,服务器不会处理数据。

唯一的缺点是 必须 有互联网连接,如果互联网连接速度慢 - 程序会很慢。

既然您想知道如何在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)

您可以通过Query String将数据传递到服务器,例如:

  

my.website/processSomething?license=AAAAAAAA&sizeInput=241&somethingElse=asagsag

但是,真的,这取决于你如何做到这一点。

对不起,我无法给你一个确切的解决方案,但是,确实没有一个。无论如何,你最终会牺牲一些东西。

希望这至少对您有所帮助,并帮助您了解在不丢失内容的情况下阻止人们侵入您的软件是不可能的。