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

最新文章

  1. C#集合--Dictionary
  2. Spring学习笔记之四----基于Annotation的Spring AOP编程
  3. 基于EasyUI的Web应用程序及过去一年的总结
  4. Selenium2入门(一)简介
  5. Sublime Text 2 (for OS X )配置成可以运行基于python3解释器的 .py文件
  6. 组合数(codevs 1631)
  7. Android高级音频应用
  8. asp.net发布webservice出现‘Could not write to output file ‘解决办法
  9. C# 显式创建线程 or 使用线程池线程--new Thread() or ThreadPool.QueueUserWorkItem()
  10. stringstream缓存正确清除方法
  11. 用户 'IIS APPPOOL\.NET v4.5 Classic' 登录失败。
  12. posgreSQL安装失败解决方案
  13. 编译问题解决:LINK : fatal error LNK1104: 无法打开文件“*.dll”
  14. HTML基本入门完成
  15. JS中多维数组的深拷贝的多种实现方式
  16. 为网站添加emoji表情的支持
  17. go 接口以及对象传递
  18. 创建React组件
  19. linux查看进程的线程数
  20. Python gui编程pyQt5安装步骤

热门文章

  1. mybatis查询语句的背后之参数解析
  2. SpringBoot的国际化使用
  3. tomcat端口被占用的问题
  4. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
  5. 潭州课堂25班:Ph201805201 django 项目 第二十八课 新闻elasticsearch搜索前后功台能实现 (课堂笔记)
  6. [CC-BLREDSET]Black and Red vertices of Tree
  7. 将map中的值赋值给一个java对象
  8. Python 调用图像融合API
  9. R语言语法基础一
  10. linux之软连接,硬连接篇