vb.net加密狗方案

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

先前做过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

相关文章

时序数据库推荐taos

  时序数据库(Time Series Database,TSDB) 全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间...

强迫症犯了_重命名

文件夹里的文件命名是这样的,1.mp4,2.mp4,...,999.mp4 看着不舒服,我喜欢 001.mp4,002.mp4,003.mp4。很多播放软件 1后面是11、12排序的。于是通过node...

开发UI框架:【laylte】Svelte版LAYUI(表单 - 复选框)

开发UI框架:【laylte】Svelte版LAYUI(表单 - 复选框)

【laylte/LayCheckbox.svelte】<script>     //import { createEventD...

python RabbitMq的订阅

【test_RabbitMq1.py】import pika import json credentials = pika.PlainCredentia...

介绍一款文件比较工具Beyond Compare

介绍一款文件比较工具Beyond Compare

这款软件除了可以比较我们的代码差异,还可以比较图片形状差异。有以下几个优点1、代码支持特殊字符,如换行符的一些差异(不同操作系统,如linux跟windows下很多时候会有这个现象)。2、支持上下文功...

php对图片进行加密

由于公司辛辛苦苦处理了一些教学素材,怕同行盗取,于是需要对素材中的图片进行加密,稍微防一下吧。大写的O数字0,让破解的人稍微增加一点难度吧。<?php function pic_ji...