• 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 = '@	.s	Pgh#yRs?i]c(aPl&D6rtiBvWez'  
      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  
  • 相关阅读:
    游戏开发之路小结(二):关于第一人称射击游戏开发实战小结
    游戏开发之路小结(一):关于太空射击游戏开发实战小结
    游戏开发要涉及的几个方面
    短短几行代码实现让摄像机跟随着物体效果
    关于移动设备几种屏幕输入方式的小结
    软件的体系架构摘要
    jQuery入门笔记之(一)选择器引擎-【转】
    ASCII码对照表
    将数字转出大写如:100转换后结果为一佰
    google搜索技巧总结
  • 原文地址:https://www.cnblogs.com/China3S/p/9630466.html
Copyright © 2020-2023  润新知