vb.net加密狗方案
先前做过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的支持。


