vb.net加密狗方案

野生程序猿-杂烧5年前随意分享889

先前做过e语言加密狗,被识别为病毒。现在 挑战vb.net


对vb.net完全不熟悉,于是面向百度编程。好在加密狗厂家提供了vb.net的demo,我要做的事情就是让其他程序能够调用。


思路就是直接编译成exe,然后其他后端语言exec调用,通过传入参数进行一些密钥计算。主要是研究命令行如何返回数据。

Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text

Module Module1
    Public Const XSKEY_SUCCESS As Integer = &H0 '成功


    Declare Function XSKeyFind Lib "XSKey.dll" (ByRef Count As Integer) As Integer

    Declare Function XSKeyGetHID Lib "XSKey.dll" (ByVal Index As Short, ByRef pHID As Byte) As Integer
    Declare Function XSKeyGetLevel Lib "XSKey.dll" (ByVal Index As Short, ByRef pLevel As Byte) As Integer
    Declare Function XSKeyGetType Lib "XSKey.dll" (ByVal Index As Short, ByRef pType As Byte) As Integer
    Declare Function XSKeyGetVersion Lib "XSKey.dll" (ByVal Index As Short, ByRef pVersion As Byte) As Integer

    Declare Function XSKeySetDeviceName Lib "XSKey.dll" (ByVal Index As Short, ByRef szName As Byte) As Integer
    Declare Function XSKeyGetDeviceName Lib "XSKey.dll" (ByVal Index As Short, ByRef szName As Byte) As Integer
    Declare Function XSKeySetSoftID Lib "XSKey.DLL" (ByVal Index As Short, ByRef pSoftID As Byte) As Integer
    Declare Function XSKeyGetSoftID Lib "XSKey.DLL" (ByVal Index As Short, ByRef pSoftID As Byte) As Integer

    Public Function getstr(ByRef myvalue() As Byte) As String
        'Dim strText As String
        'strText = BitConverter.ToString(myvalue)
        'Return strText

        Return Chr(myvalue(0)) & Chr(myvalue(1)) & Chr(myvalue(2)) & Chr(myvalue(3)) & Chr(myvalue(4)) & Chr(myvalue(5)) & Chr(myvalue(6)) & Chr(myvalue(7))
    End Function




    Public Function time() As Integer
        Dim s As String = DateDiff("s", "1970-01-01 00:00:00", Now)

        Dim n As Integer = CType(s, Integer)
        n = n - 8 * 3600
        Return n
    End Function

    Public Function O0O0OO() As String
        Dim OOO0 As String = Chr(68)
        Dim O0O0 As String = Chr(53)
        Dim O000 As String = Chr(77)


        Return O000 & OOO0 & O0O0
    End Function


    Public Function OO00OO00(ByVal strSource As String) As String
        Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
        Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName(O0O0OO()), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
        Dim ATR As String = ""
        Dim i As Integer
    
        For i = 0 To 15
            ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
        Next
     
        Return ATR

    End Function

    Public Function OO00OOOO00(ByVal strSource As String) As String
        Dim l1l1l1ll As String = OO00OO00(strSource)
        l1l1l1ll = l1l1l1ll & "" & OO00OO00(l1l1l1ll & l1l1l1ll)
        Return l1l1l1ll

    End Function

    Public Function ll1111llll(ByVal strSource As String, ByVal strSource2 As String) As String
        Dim l1l1l1ll As String = OO00OO00(strSource & "|" & strSource2)
        l1l1l1ll = OO00OO00(l1l1l1ll)
        Return l1l1l1ll

    End Function

    Sub Main()

        Dim Index As Integer
        Dim Count, retcode As Integer
        Dim HID(16) As Byte
        Dim SoftID(16) As Byte
        Dim Active_Index As Integer

        Dim Hid_check As Integer = 0
        Count = 0
        Index = 0

        Dim shijianchuo As Long
        Dim shijianchuo_key As String
        Dim end_shijianchuo As Long
        Dim end_shijianchuo_str As String
        Dim end_shijianchuo_key As String

        Dim end_shijianchuo_cha As Long

        Dim shijianchuo_OO00OO As String

        Dim active_softid As String
        Dim my_softid As String

        Dim active_keyid As String

        active_softid = ""

        Dim sa() As String = System.Environment.GetCommandLineArgs



        If sa.Length > 2 Then
            my_softid = sa(1)
            end_shijianchuo_str = sa(2)
            end_shijianchuo = CLng(end_shijianchuo_str)
            For Each s As String In sa
                'Console.WriteLine("接收到的参数:" & s & Chr(13))
            Next
        Else
            Console.WriteLine("error-01 | usbkey config err")
            Exit Sub
        End If




        retcode = XSKeyFind(Count)
        If (retcode <> 0) Then
            Console.WriteLine("error-02 | find usbkey  err ")
            Exit Sub
        Else
            ' Console.WriteLine("查找到加密狗个数:" & Count & Chr(13))
        End If


        For i = 0 To Count - 1
            retcode = XSKeyGetSoftID(i, SoftID(0))
            If (retcode = 0) Then
                'Console.WriteLine("获取加密狗硬件ID:" & getstr(SoftID) & "|" & my_softid & Chr(13))
                If (getstr(SoftID) = my_softid) Then
                    Active_Index = i
                    active_softid = my_softid
                End If
            End If
        Next

        '加密狗中没有当前需要的的 直接返回失败
        If (active_softid = "") Then
            Console.WriteLine("error-03 | usbkey softid check err")
            Exit Sub
        Else
            retcode = XSKeyGetHID(Active_Index, HID(0))
            If (retcode <> 0) Then
                Console.WriteLine("error-04 |  find usbkey id  err")
                Exit Sub
            Else

                'active_keyid = getstr(HID)
                'my_keyid 多个里面分割出来,于加密后的active_keyid比较
                'If (ll1111llll(active_softid, active_keyid) <> my_keyid_key Or active_keyid <> my_keyid) Then
                'Console.WriteLine("error-05 |  usbkey key check err")
                ' Exit Sub

            End If
        End If


        shijianchuo = time()
        'Console.WriteLine(shijianchuo & Chr(13))
        'Console.WriteLine(end_shijianchuo & Chr(13))

        shijianchuo_key = shijianchuo & "|" & active_softid
        shijianchuo_key = shijianchuo_key & shijianchuo_key
        shijianchuo_OO00OO = OO00OOOO00(shijianchuo_key)
        Console.WriteLine(shijianchuo & "|" & shijianchuo_OO00OO & Chr(13))

    End Sub

End Module

目前只知道命令行输出返回是 

Console.WriteLine

其他其实不懂,编译也搞了半天。经历了几个坑,其中一个就是.net的版本,最早遇到到客户机器上遇到.net版本不够的情况。稍微瞎捣鼓了几下,设置成.net2.0 这样一般不需要额外安装.net的支持。


标签: 加密狗.net

相关文章

vue通过组件的方式制作教学软件翻牌游戏环节

vue通过组件的方式制作教学软件翻牌游戏环节

为了方便学生记忆学习,将记忆知识点做成了翻牌游戏形式。由于记忆点知识比较多,我们可以设计成多个关卡,每个关卡就是一些知识点配置,通过组件的形式加载,更为合理,更为方便。【fanpai.vue】<...

前端有没必要学习photoshop

前端有没必要学习photoshop

  现在前端开发已经工程化,可以说前端前几年的受欢迎程度已经超过后端。再加上javascript的后端语言nodejs,让前端或者说前后端全栈更受欢迎。  在我就职的几家公司里,遇到了不少前端、后端,...

nodejs对memcache进行备份与恢复

memcache是个古老的高速缓存工具,前辈们古老的程序还用着。但是市场上没有完美的备份恢复工具,老板让我开发一个。这需求让我两眼一抹黑,完全不知所措。先模拟一下思路,可以telenet到端口上,然后...

推荐一个前端框架Svelte(超级轻量级)

现在的前端框架太多了,国内用得比较多的是vue,非常强大,但是个人感觉灵活性糟糕,代码比较繁琐。近期接触一个框架,顿时让我感觉非常的爽,一种似曾相似的感觉,这个框架就是Svelte。Svelte是一个...

html5-声音视频自动播放的坑

因为从事的是教学软件的开发,不知何年何月开始声音、视频不支持自动播放了。必须点一个按钮才能播放。教学类软件很多都是有动画的,像播放器一样,从头开始慢慢播放,可以理解为n帧,但是因为程序开发不是视频制作...

nodejs同步mysql操作类

nodejs越来越火了,打算稍微在深入学习一下,于是把php的mysql操作类库稍微改了一下,为了保留php思路,这里加入了同步的方法。简单测了一下,本地 没有问题,不知道同步在多人访问时候是否有坑,...