博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fortran一个获取硬件系统信息的函数库
阅读量:5764 次
发布时间:2019-06-18

本文共 2371 字,大约阅读时间需要 7 分钟。

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

 

转载地址:http://buwux.baihongyu.com/

你可能感兴趣的文章