关于调用加密狗的程序。

lovessll 2009-09-01 01:44:21
我VB6.0的加密狗程序不熟悉,不知道该怎么调用,恳请会的朋友指点一下。
加密狗的程序是已经写好的,我只需用vb调用dll,就行。想问大家这个这个调用程序该如何设置?
是放在启动的窗体下,还是建立一个模块来调用啊。vb6没有头文件的概念,加密程序该怎么设置啊?
肯定做过的朋友帮帮忙,谢谢啦!
...全文
636 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2009-09-05
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 jennyvenus 的回复:]
引用 40 楼 myjian 的回复:
引用 38 楼 jennyvenus 的回复:
还有这种原始的加密狗?


那比较厉害的加密狗你有没有推荐?

我所在的公司就做加密狗,不过俺一向反对使用加密狗,pc程序运行时全程参与运算的,不插狗pc程序无法完成业务处理。

[/Quote]
我也是这意思

狗内逻辑参与运算,无狗程序本身就不完整了

不知道你们的网址是?

现在就是需要厉害的加密狗

之前使用了一款狗叫威步的,结果让一个人去破,说5K稳拿下....
用户 昵称 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 myjian 的回复:]
引用 38 楼 jennyvenus 的回复:
还有这种原始的加密狗?


那比较厉害的加密狗你有没有推荐?
[/Quote]
我所在的公司就做加密狗,不过俺一向反对使用加密狗,pc程序运行时全程参与运算的,不插狗pc程序无法完成业务处理。
用户 昵称 2009-09-03
  • 打赏
  • 举报
回复
还有这种原始的加密狗?
嗷嗷叫的老马 2009-09-03
  • 打赏
  • 举报
回复
If Not CheckDog() Then

此句下断点,断下来后单步.

如果你只有在这里检测了狗,然而却又在编译后正常工作,那有可能是DLL内对IDE环境内的某些东西作了改变.

并且,你所说的情况是"1,为什么在调试状态下不能调试(狗无法识别),生成exe时如果有狗就会直接进去程序,如果没有狗会提示没有加密狗,但确定后还是会进入程序;
2,生成的exe为什么没有狗也可以进程序啊?是否加密的启动设置不对?"

那我也给这种假设一个非常高的可能性.

因为按VB代码流程来说,你所说的是绝对不可能出现的.

而它确实又出现了,那就不会是VB代码的问题,而是被调用的DLL的问题.

Sub Main() 
If Not CheckDog() Then
MsgBox "没有加密狗。", vbExclamation
Exit Sub
End If

Form1.Show
End Sub

这样的代码按VB语法来说是绝对不可能弹出MSGBOX后还能显示窗体的,而你那里发生了,我建议你生成EXE后用OD跟踪一下.

另外多句嘴:

你这样的方式调用加密狗 = 零

用OD一跟你就知道了........

除非除此之外还有别的手段来保证无狗无法运行.
lovessll 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 tiger_zhao 的回复:]
生气的原因在于你没看接口文档,返回 1 和 1024 绝对不会用 bool,而你却想当然认为是 bool。
[/Quote]
你批评的对,关键是对vc不熟悉。头文件中标明是bool,就认为是bool。混合编程刚接触,能力有待提高。
以后会多留意的,呵呵。谢谢你的帮助和批评指正!
Tiger_Zhao 2009-09-03
  • 打赏
  • 举报
回复
生气的原因在于你没看接口文档,返回 1 和 1024 绝对不会用 bool,而你却想当然认为是 bool。
lovessll 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 tiger_zhao 的回复:]
你有接口文档而我们没有,你不把函数返回值搞清楚就来提问了?
[/Quote]
你别生气,开始我也没有感觉到是返回值的问题。因为vc和vb的都是boolean。所以返回的时候用的是boolean的true和false,后来按你的思路返回数值型long。但用if a=0 then时调试怎么都不对。所以也不知道问题出在哪里啊?结果用上面朋友的建议,我返回true时才发现,只有true时是1,false时却是1024.所以才发现这是有问题的。这个问题我整体感觉还是在于vc和vb的boolean对应值不对,我也想把这个问题搞清楚。如果没有大家的帮助,我也不会发现程序两种语言的对应值是这样的。所以对大家的帮助万分感谢。
确切的说这个问题还没有完全搞定,因为当false是返回值是1024,这个肯定是有问题的,我程序需要完成的功能虽然解决啦,但我还是想把这个问题弄明白,为什么返回false时的值不是0而是1024.
对vc的dll和加密不是很熟悉,占用大家的精力和时间我深表歉意。再次感谢大家的支持。
Tiger_Zhao 2009-09-03
  • 打赏
  • 举报
回复

你有接口文档而我们没有,你不把函数返回值搞清楚就来提问了?
lovessll 2009-09-03
  • 打赏
  • 举报
回复
谢谢大家的帮忙,现在问题基本锁定在数据类型的传递上出了问题。非常感谢大家的帮忙!
Option Explicit

Public Declare Function CheckDog Lib ".\Dog.dll" () As Long

Sub Main()
Dim a As Long
a = CheckDog
If a = 1 Then
Form1.Show
Else
MsgBox "没有加密狗。", vbExclamation
Exit Sub
End If

End Sub
这样好像就没问题啦。这个数据类型的传递还是有问题的,我再好好调整一下。
对大家的帮助,万分感谢!
lovessll 2009-09-03
  • 打赏
  • 举报
回复
非常谢谢楼上朋友的建议。我用返回值测试了一下,发现当dog为真(插上狗的时候),返回值是1,当不插狗的时候返回值是1024。
Option Explicit

Public Declare Function CheckDog Lib ".\Dog.dll" () As Long

Sub Main()
Dim a As Long
a = CheckDog
If a = 0 Then
MsgBox "没有加密狗。", vbExclamation
Exit Sub
End If

Form1.Show
End Sub

插狗时返回值 a=1;不插狗的时候返回值a=1024.


当我用布尔值的时候,无论插狗或者不插狗,返回值都是true.
Option Explicit

Public Declare Function CheckDog Lib ".\Dog.dll" () As Boolean

Sub Main()
Dim a As Boolean
a = CheckDog
If a = false Then
MsgBox "没有加密狗。", vbExclamation
Exit Sub
End If

Form1.Show
End Sub

返回值都是a=true!

这是什么原因啊?
嗷嗷叫的老马 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 jennyvenus 的回复:]
还有这种原始的加密狗?

[/Quote]
那比较厉害的加密狗你有没有推荐?
嗷嗷叫的老马 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 lovessll 的回复:]
我在设置断点调试时 CheckDog没有任何值显示,不知是为什么?[/Quote]
因为当时并未调用这个函数,当然不会有值

你可以定义一个变量,将返回值保存,再在IF里进行判断:

sub main()
dim lRet as long

lret=checkdog()
if lret=0 then '在这里检查返回值
msgbox "无狗!"
exit sub
else
frmmain.show
end if
end sub

由于这DLL是你们自己写的而非加密狗公司的SDK,因此我极度怀疑是DLL内没处理好,从而在调用时影响了VB代码的执行次序!!

证明方式,还是需要你进行跟踪调试,看看到底在调用checkdog前后,各寄存器,汇编指令,堆栈等是否有被不合理改动过!
yangbo_cuit 2009-09-03
  • 打赏
  • 举报
回复
路过,进来看一下,学习了,结果有所获
lovessll 2009-09-02
  • 打赏
  • 举报
回复
现在非常伤头的就是,既然已经判断出 CheckDog=false 为什么程序还会进入呢?这个到底是bool函数CheckDog的问题还是vb的sub Main()程序启动有问题啊?我把启动程序随便换成一个判断程序却又一切正常!我在设置断点调试时 CheckDog没有任何值显示,不知是为什么?快崩溃啦,有熟悉的朋友吗?帮忙看看,万分感谢啦!
lovessll 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 of123 的回复:]
次序反了。更正:

Sub Main()
    If Not CheckDog() Then
        MsgBox "没有加密狗。", vbExclamation
        End
        Exit Sub
    End If
   
    Form1.Show
End Sub
[/Quote]
呵呵,你和我想的是一样的,我开始也是想是不是要加个"End"但加上后,调试的结果还是那样,程序并没有退出。还是跳出提示框后就进入程序啦。所以我感觉非常奇怪。按理说是dll里的函数有问题。但加锁的话程序不提示“没有软件锁”就进入程序,不加锁的话就提示“没有软件锁”(这是dll里的函数提示语句!)然后就进入程序。所以就相当的困惑啦!不知道问题出在哪里?
很感谢朋友们的帮助,大家帮我分析一下该如何入手调整啊?
lovessll 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 veron_04 的回复:]
你的Dll从何而来?一般是随加密狗提供的,按照加密狗说明书安装,通常情况下,会附带详细的说明和编程例子的。所以你的担心我认为是多余的,疑惑大可不必
[/Quote]
你可能没看懂我的意思,我的就是加密没有成功啊?加密狗插上和不插都一样。所以才不知道问题出在那里!!
贝隆 2009-09-02
  • 打赏
  • 举报
回复
你的Dll从何而来?一般是随加密狗提供的,按照加密狗说明书安装,通常情况下,会附带详细的说明和编程例子的。所以你的担心我认为是多余的,疑惑大可不必
of123 2009-09-02
  • 打赏
  • 举报
回复
次序反了。更正:

Sub Main()
If Not CheckDog() Then
MsgBox "没有加密狗。", vbExclamation
End
Exit Sub
End If

Form1.Show
End Sub
of123 2009-09-02
  • 打赏
  • 举报
回复
Option Explicit
Public Declare Function CheckDog Lib ".\Dog.dll" () As Boolean
Sub Main()
If Not CheckDog() Then
MsgBox "没有加密狗。", vbExclamation
Exit Sub
End
End If

Form1.Show
End Sub

其实,如果用 End 语句的话,在 Form_Initialize 或 Form_Load 中判断都是可以的。
tonyhf 2009-09-02
  • 打赏
  • 举报
回复
'Option Explicit
Declare Function Lock32_Function Lib "cdll5.dll" (ByVal x As Long) As Long
Declare Sub UnShieldLock Lib "cdll5.dll" ()
Private key1 As Long, key2 As Long, key3 As Long, key4 As Long
这是我VB写的加密狗模块的函数声明,给你参考下。
加载更多回复(22)
微狗(UMI/UMC/PMH/PMI)驱动安装程序是安装在 Windows 9X/ME/NT/2K/XP/WS2003/Vista /XP64/WS2003x64/Vista64环境下的驱动的程序。 加密后的 Win32 应用程序在 Windows 9x以及Windows ME 下运行时,需要安装硬件狗 Windows 9x 的设备驱动程序。 加密后的 DOS16,DOS32,WIN16,WIN32 应用程序在 Windows NT/2K/XP下运行时,必须要安装 硬件狗 Windows NT/2K/XP 的设备驱动程序。 本版MicroDogInstdrv.exe通过调用RCMicroDogSetup.dll的接口函数DriverDialog来显示驱动安装、 卸载界面。用户既可以使用MicroDogInstdrv.exe来安装和卸载自己的驱动程序,也可以自行构造界 面来安装和卸载驱动程序。 运行MicroDogInstdrv.exe点击安装按钮来安装驱动程序,该程序可自动识别操作系统,并提示安装状态。 注意:在Windows Vista下,需要右健点击安装程序,在弹出的菜单 中选择"Run as administrator"来运行安装程序。 软件开发商不但在加密时需要安装该设备驱动程序,而且在发行软件时,也应根据最终用户的操 作系统,安装相应的设备驱动程序。 如果您需要卸载狗的驱动程序,可以运行MicroDogInstdrv.exe点击卸载按钮来卸载驱动程序,软件可以自 动识别当前环境,完成驱动程序的卸载工作。 同时MicroDogInstdrv.exe支持命令行参数,命令行参数(不区分大小写)说明如下: /? 显示命令行帮助 /i 安装时不显示界面 /r 卸载时不显示卸载界面 /a 安装并口狗和USB狗驱动 /p 只安装或卸载并口狗驱动(需要结合/i或/r参数使用) /u 只安装或卸载USB狗驱动(需要结合/i或/r参数使用) /s 不显示任何安装和卸载信息 例: MicroDogInstdrv /i/s 安装过程中不显示任何信息

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧