首页 > 解决方案 > 每台计算机的独特之处

问题描述

我想在每台计算机上为 java 程序获取一个唯一的序列号我可以使用什么?Mac地址好帽子是我的问题的代码吗?a 已经有了这两个,哪个更好?

   public static void main(String[] args){

InetAddress ip;
try {

    ip = InetAddress.getLocalHost();
    System.out.println("Current IP address : " + ip.getHostAddress());

    NetworkInterface network = NetworkInterface.getByInetAddress(ip);

    byte[] mac = network.getHardwareAddress();

    System.out.print("Current MAC address : ");

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < mac.length; i++) {
        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
    }
    System.out.println(sb.toString());

} catch (UnknownHostException e) {

    e.printStackTrace();

} catch (SocketException e){

    e.printStackTrace();

}

}

}

public static void main(String[] args) throws Throwable {
    // wmic command for diskdrive id: wmic DISKDRIVE GET SerialNumber
    // wmic command for cpu id : wmic cpu get ProcessorId
    //wmic command for bios :wmic bios get serialnumber
    Process process = Runtime.getRuntime().exec(new String[] { "wmic", "csproduct", "get", "uuid" });


    process.getOutputStream().close();
    Scanner sc = new Scanner(process.getInputStream());
    String property = sc.next();
    String serial = sc.next();
    System.out.println(property + ": " + serial);
}

一起使用 ProcessorId 和 uuid 是一种好方法吗?

标签: java

解决方案


据我所知,没有什么是可以访问硬件的人无法伪造的。

  • 如果您具有管理员权限,则可以在典型操作系统上的软件中相对轻松地更改 NIC 的 MAC 地址。

  • ProcessorId(由“wmic”报告)更难,因为它来自 BIOS,而操作系统将其视为只读属性;请参阅如何更改 ProcessorId

    然而:

    • 可以通过BIOS 本身更改 ID,
    • 用户可能会更换 BIOS,
    • 用户可能会更新 BIOS 正在从中读取ProcessorId值的私有内存位置 (?)。
    • 如果您的代码使用“wmic”来检索 ProcessorId,则可以将其替换为返回假 id 的版本
    • 等等

    另请参阅:WIN32_Processor::Is ProcessorId 对于所有计算机都是唯一的

即使假设您可以阻止用户伪造 id,如果他们可以旋转虚拟机,他们几乎肯定可以在虚拟机中伪造 id。

这意味着您开发的任何依赖于具有唯一、不可伪造(不可克隆)标识符的股票标准 Windows 系统的方案都存在根本缺陷。如果您真的需要不可伪造的 ID,您将不得不考虑替代方法,例如防篡改硬件“加密狗”。

另一方面,如果您愿意接受用户可以伪造 id 信息,那么结合 MAC 地址、ProcessorId 和/或类型 4 UUID 应该足以保证唯一性。(事实上​​,只要你有一个好的随机数来源,一个 4 类 UUID 本身就足够了。)


推荐阅读