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

此函数库提供了 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  

 

posted on 2018-09-11 21:29  向北方 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/China3S/p/9630466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值