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 = '\@\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  
相關文章
相關標籤/搜索