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的支持。