如何编写DLL有效地获得服务器端的机器码 ?

lgj1012 2006-02-28 10:31:45
自己能用VB编写DLL ,所以访问了VB版的所有关于如何获得机器码的帖子,所有的代码以exe方式都能获得硬盘物理编号或者网卡MAC 地址,可代码写成COM了始终无法获得任何信息,因为将来的客户是独立的单机用户,所以如果机器码采用MAC 精明点的客户可能会去修改MAC地址来躲避验证,获得硬盘的物理编号而SCSI硬盘又没有编号,是否有一种能获得机器码的DLL的编写方式可以借鉴一下?网上有通过 ARP命令获得MAC地址的方法,也不理想.. 谢盼能获得服务器端机器码的DLL出现... 感谢感谢
...全文
373 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgj1012 2006-03-01
  • 打赏
  • 举报
回复
呵呵 没有叱诧风云吧 在那里闹着玩儿的比较多,现在一个小项目遇到难题了因为现在接的一个外包的项目应客户需求开发的一个小考勤系统将来可能会作为产品来做,就涉及到了加密的问题,现在唯一有效的办法就是通过获得机器码然后生成有效的注册码,可现在这个鬼的机器码死活取不到郁闷的要S 了,不知道有谁弄过这方面的东东 请给点提示也好呀 谢盼谢盼 ^O^
gatey 2006-03-01
  • 打赏
  • 举报
回复
关注二下先
KimSoft 2006-03-01
  • 打赏
  • 举报
回复
以前总见到 国产超人:队长~~楼下那几个牛鬼蛇神很可疑~) 在水园叱诧风云。
KimSoft 2006-03-01
  • 打赏
  • 举报
回复
关注一下先...
八哥 2006-03-01
  • 打赏
  • 举报
回复
有些API函数需要权限的
lgj1012 2006-03-01
  • 打赏
  • 举报
回复
楼上的 这个如果权限不够是无法有效执行的 :) 不过现在已经变通的解决了 结扎咯 :)
jspadmin 2006-03-01
  • 打赏
  • 举报
回复
arp不行吗?应该是可以的吧。调用arp可以用Wscript.Shell。可以用将结果输出到一个临时文件,取了fso读取机器码后,删除临时文件。arp.exe >1.txt
<%
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run ("%windir%\notepad.exe" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功执行!"
else
Response.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"
end if
%>
lgj1012 2006-03-01
  • 打赏
  • 举报
回复
liuxiaoyi666(MSMVP小猪妹马甲之八卦兔子) ( ) 信誉:120 2006-3-1 13:21:33 得分: 0

你是要获取客户端的mac地址吧?

---------------------------
No 客户端的好取用activex能搞到,是要服务器端的,就是IIS 发布的那台机器上的 MAC地址..
pswdf 2006-03-01
  • 打赏
  • 举报
回复
学习~~~
lgj1012 2006-03-01
  • 打赏
  • 举报
回复
楼上的代码我测试过 在 应用程序中调用好用 ,但是做成DLL 在 IIS 下使用就无法获得争取的MAC地址的..昏迷 郁闷哦,至于加密算法的问题,搞个12位密钥长的DES应该够了吧,不过现在首要解决的不是加密算法的问题,是怎么能获得dll运行服务器上机器码的问题,不知道还有没有什么有效的解决方法,楼上的我测试了确实无法获得地址....
  • 打赏
  • 举报
回复
你是要获取客户端的mac地址吧?
八哥 2006-02-28
  • 打赏
  • 举报
回复
可以取网卡卡号,每个网卡卡号是唯一的

可以用获得网卡卡号的方法。

要用到netapi32.dll中的Netbios函数和Windows API函数,程序较为复杂,这里是将全部代码放到一个通过模块中,程序运行时调用模块中的EthernetAddress()自定义函数来完成。模块代码如下,可以复制下来建立一个Module1.bas模块文件直接使用。
Option Explicit
Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
Declare Function GetProcessHeap Lib "kernel32" () As Long
Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &H32

Private Type NCB
ncb_command As Byte
ncb_retcode As Byte
ncb_lsn As Byte
ncb_num As Byte
ncb_buffer As Long
ncb_length As Integer
ncb_callname As String * NCBNAMSZ
ncb_name As String * NCBNAMSZ
ncb_rto As Byte
ncb_sto As Byte
ncb_post As Long
ncb_lana_num As Byte
ncb_cmd_cplt As Byte
ncb_reserve(9) As Byte ' Reserved, must be 0
ncb_event As Long
End Type

Private Type ADAPTER_STATUS
adapter_address(5) As Byte
rev_major As Byte
reserved0 As Byte
adapter_type As Byte
rev_minor As Byte
duration As Integer
frmr_recv As Integer
frmr_xmit As Integer
iframe_recv_err As Integer
xmit_aborts As Integer
xmit_success As Long
recv_success As Long
iframe_xmit_err As Integer
recv_buff_unavail As Integer
t1_timeouts As Integer
ti_timeouts As Integer
Reserved1 As Long
free_ncbs As Integer
max_cfg_ncbs As Integer
max_ncbs As Integer
xmit_buf_unavail As Integer
max_dgram_size As Integer
pending_sess As Integer
max_cfg_sess As Integer
max_sess As Integer
max_sess_pkt_size As Integer
name_count As Integer
End Type

Private Type NAME_BUFFER
name As String * NCBNAMSZ
name_num As Integer
name_flags As Integer
End Type

Private Type ASTAT
adapt As ADAPTER_STATUS
NameBuff(30) As NAME_BUFFER
End Type

Function EthernetAddress(LanaNumber As Long) As String
Dim udtNCB As NCB
Dim bytResponse As Byte
Dim udtASTAT As ASTAT
Dim udtTempASTAT As ASTAT
Dim lngASTAT As Long
Dim strOut As String
Dim x As Integer

udtNCB.ncb_command = NCBRESET
bytResponse = Netbios(udtNCB)
udtNCB.ncb_command = NCBASTAT
udtNCB.ncb_lana_num = LanaNumber
udtNCB.ncb_callname = "* "
udtNCB.ncb_length = Len(udtASTAT)
lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
strOut = ""
If lngASTAT Then
udtNCB.ncb_buffer = lngASTAT
bytResponse = Netbios(udtNCB)
CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
With udtASTAT.adapt
For x = 0 To 5
strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
Next x
End With
HeapFree GetProcessHeap(), 0, lngASTAT
End If
EthernetAddress = strOut
End Function
'=======================================
  需要网卡卡号时只需调用EthernetAddress()函数即可。
iuhxq 2006-02-28
  • 打赏
  • 举报
回复
我觉得更重要的是如何保护你的加密算法,如果你的算法被破译了,那用什么序列号也没用了
zhlym 2006-02-28
  • 打赏
  • 举报
回复
頂一下,我目前是獲取硬件的續號的, 照這一說SCSI就不行,也想知道

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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