此函数库提供了 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() :: cHDcode = '\@\t.s\tPgh#yRs?i]c(aPl&D6rtiBvWe\0z'
Character() :: cCPUID , cHDID , cHD , cTemp
Integer i , k
call GetCPUID( Loc(cTemp) )
cTemp = adjustl(cTemp)
i = index( cTemp , char())
cTemp(i:) = ""
cCPUID = cTemp
write(*,'(a)',advance='no') 'CPUID:'
write(*,*) Trim(cCPUID)
Do i = ,
cHD(i:i) = cHDcode( i*- : i*- )
EndDo
cHD(:) = char()
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()
i = GetSectionCheckSum( i , Loc(k) )
write(*,'(a,g0)') 'Sum of PE Header:' , k
read(*,*)
End Program www_fcode_cn

Fortran一个获取硬件系统信息的函数库的更多相关文章

  1. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法

    原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...

  2. 为开发者准备的 Android 函数库(2016 年版)

    转载:http://www.androidchina.net/5922.html第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人 ...

  3. 开发常用的 Android 函数库

    第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人员辛勤工作的成果,我们开发起来更轻松和快捷.目前存在成千上万的函数库,如何选择正 ...

  4. Android 为开发者准备的最佳 Android 函数库(2016 年版)

    本文是翻译自 CloudRAIL 的官方博客(https://cloudrail.com/best-android-libraries-for-developers/),本文中分享的 Android ...

  5. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...

  6. php获取当前被调函数的参数列表

    下面是php中的一个获取当前别调用函数的参数列表的测试程序,感受一下php类库的强大之处: // 测试获取参数列表 getArgs('aaa', 'bbb', 'ccc', 123, true); f ...

  7. gcc 头文件是用户应用程序和函数库之间的桥梁和纽带 功能的真正逻辑实现是以硬件层为基础

    gcc GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) http://gcc.gnu.o ...

  8. 如何持续集成/交付一个开源.NET函数库到Nuget.org

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...

  9. delphi的一个公用函数库

    delphi的一个公用函数库 {********************************************** ***  Name: PublicFunc; ***  Author: l ...

随机推荐

  1. Android动画曲线库AndroidEasingFunctions

    Android动画曲线库AndroidEasingFunctions AndroidEasingFunction是基于Easing Function(缓动函数)的Android动画曲线库.它提供了九大 ...

  2. Eclipse更新慢、插件安装慢解决方案zz

    步骤 Eclipse -> Help -> Install New Software... 在出现的窗口点击Available Software Sites链接 将所有URL中的" ...

  3. BZOJ.3938.Robot(李超线段树)

    BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...

  4. 测试中,重现偶发的BUG问题。

    1.严格按用例执行: 2.如果是作随机测试时,把测试步骤的点进行速记; 3.偶发BUG一般都是严重的,保留现场,让开发人员一起分析留下的现场(如数据的变化,界面窗口的变化等,找出问题的引子,那怕是千丝 ...

  5. CC2431 代码分析②-CC2431狂轰滥炸

    CC2431 code review : CC2431 狂轰滥炸 在上一篇中的最后我们分析到CC2431 开始喊出第一声,这里我们逐步分析从第一声到后面的狂轰滥炸! 上代码 /************ ...

  6. 解决 Excel2013打开提示 文件格式和扩展名不匹配。文件可能已损坏或不安全

    有的时候打开xls文档时,会提示“文件格式和扩展名不匹配.文件可能已损坏或不安全.除非您信任其来源,否则请勿打开.是否仍要打开它?” 遇到这种情况,我们需要 1.win键+R键,打开“运行“,输入re ...

  7. 执行npm run build之后显示空白页面

    最近在学习使用webpack,在项目最后打包过程,执行npm run build之后得到的dist目录放到服务器上打开,显示空白页面,但是标题能正常显示,查看控制台发现是数据位置请求报错,查阅资料后知 ...

  8. BZOJ4910 : [Sdoi2017] 苹果树

    问题等价于树形依赖背包,允许一条链每个点各免费一次. 设$f[i][j]$表示按DFS序考虑到$i$,体积为$j$的最大收益. 先放入不能免费的物品,等遍历完儿子后再放入必选的物品,那么$i$到根路径 ...

  9. Mybatis JDBC->Mybatis

    1 什么是JDBC Java程序都是通过JDBC(Java Data Base Connectivity)连接数据库的,通过SQL对数据库编程.JDBC是由SUN公司(SUN公司已被Oracle公司收 ...

  10. linux使用Anaconda管理多个版本的Python环境

    1.下载(直接到清华镜像下载) 下载链接,选择合适的版本,我试了几个,选择了一个下载最快的,原谅我的渣渣网速, 官网在国外,必须找镜像,不然很慢很慢,,,,,, 此步骤真的很慢,重新选择下载网址,这个 ...