您的位置:首页 > 其它

Fortran一个获取硬件系统信息的函数库

2018-09-11 21:29 441 查看
此函数库提供了 Visual Fortran 上获取硬盘ID,CPU编号,windows安装时间及文件头部校验的四个函数。可用于简单的程序加密。(但切勿用于商业性很强的地方)                             近期,不少朋友向笔者询问 Fortran 如何获得网卡地址,硬盘ID,CPU编号等。对此,笔者给出一个自己书写的简单的函数库。 !!点击此处下载!! fcForHard 是面向 Visual Fortran(Intel,Compaq等)编译器的一个函数库,包含四个函数:
1. GetSectionCheckSum 用于获取exe头部校验。通过此校验数据,可判断 exe 是否被加壳或脱壳。 2. GetCPUID 用于获取 CPU 标识。 3. GetHardDiskSerialNumber 用于获取第一硬盘的 SN 标识。 4. GetWinInstallDate 用于获取 windows 首次安装日期(时间戳)
由于 MAC 地址是非常不确定的因素,一般用户也可能会修改MAC地址以达到使用路由等目的,因此,已经不再推荐使用 MAC 地址来判断硬件。
请注意: 1. 此函数库不包含源代码(由汇编语言书写,且公布源代码会降低安全性) 2. 此函数库仅用于简单的加密手段!!!!对于商业险很强的工作,建议您购买正式的 dongle 许可管理软件。 3. 部分函数可能需要管理员身份才能获得正确的值。
以下为笔者身边三台电脑的运行结果: 以下为调用的范例代码:
Program www_fcode_cn
!// 此代码示范 fcForHard 函数库的调用
!// 安全性不高,请合理使用!
!// www.fcode.cn 发布
use Kernel32 , only : GetModuleHandle
use Advapi32
Implicit None
Interface
Integer Function GetSectionCheckSum( iAddBase , ilpNum )
!DEC$ ATTRIBUTES DEFAULT, STDCALL, ALIAS:'_GetSectionCheckSum@8' :: GetSectionCheckSum
Integer iAddBase ,ilpNum
End Function GetSectionCheckSum
Subroutine GetCPUID( ilpID )
!DEC$ ATTRIBUTES DEFAULT, STDCALL, ALIAS:'_GetCPUID@4' :: GetCPUID
Integer ilpID
End Subroutine GetCPUID
Integer Function GetHardDiskSerialNumber( ilpHardDisk , ilpID )
!DEC$ ATTRIBUTES DEFAULT, STDCALL, ALIAS:'_GetHardDiskSerialNumber@8' :: GetHardDiskSerialNumber
Integer ilpHardDisk , ilpID
End Function GetHardDiskSerialNumber
Integer Function GetWinInstallDate()
!DEC$ ATTRIBUTES DEFAULT, STDCALL, ALIAS:'_GetWinInstallDate@0' :: GetWinInstallDate
End Function GetWinInstallDate
End Interface

character(36) :: cHDcode = '\@\t.s\tPgh#yRs?i]c(aPl&D6rtiBvWe\0z'
Character(48) :: cCPUID , cHDID , cHD , cTemp
Integer i , k
call GetCPUID( Loc(cTemp) )
cTemp = adjustl(cTemp)
i = index( cTemp , char(0))
cTemp(i:) = ""
cCPUID = cTemp
write(*,'(a)',advance='no') 'CPUID:'
write(*,*) Trim(cCPUID)
Do i = 1 , 18
cHD(i:i) = cHDcode( i*2-1 : i*2-1 )
EndDo
cHD(19:19) = char(0)
cTemp = ""
i = GetHardDiskSerialNumber( Loc(cHD) , Loc( cTemp ) )
cTemp = adjustl(cTemp)
cHDID = cTemp
write(*,'(a)',advance='no') 'DISKSN:'
write(*,*) Trim(adjustl(cHDID))
write(*,'(a)',advance='no') 'Win Install Date:'
write(*,'(z8)') GetWinInstallDate()
i = GetModuleHandle(0)
i = GetSectionCheckSum( i , Loc(k) )
write(*,'(a,g0)') 'Sum of PE Header:' , k
read(*,*)
End Program www_fcode_cn

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: