zoukankan      html  css  js  c++  java
  • 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  
  • 相关阅读:
    ADexplorer
    Ldap登陆AD(Active Directory)进行认证的Java示例
    通过LDAP验证Active Directory服务
    APACHE + LDAP 的权限认证配置方法
    How to authenticate a user by uid and password?
    js汉字与拼音互转终极方案,附简单的JS拼音输入法【转】
    给MySQL增加mysql-udf-http和mysql-udf-json自定义函数,让MySQL有调用http接口和查询直接回JSON的能力
    CentOS6.7安装RabbitMQ3.6.5
    CentOS利用inotify+rsync实现文件同步
    CentOS两台服务器利用scp拷贝文件
  • 原文地址:https://www.cnblogs.com/China3S/p/9630466.html
Copyright © 2011-2022 走看看