java 物理地址校验软件试用版控制问题以及非法拷贝到其他机子上运行

本文介绍通过判断用户电脑物理地址限制系统使用的方法,防止非法拷贝。原理是根据物理地址制作license文件或注册码,用系统命令获取物理地址并与注册码中的比较。给出Java代码,包括获取命令输出和比较物理地址的方法,还考虑了不同系统命令差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们开发出一个系统之后,经常有很多方法来保护我们的系统不受别人非法使用,比如说采用注册码,根据IP地址进行限制等。这些都存在一个问题就是容易给人通过拷贝注册码等手段来非法使用系统,现在这里将讲述如何通过判断用户电脑的物理地址来限制系统的使用,这样,就可以做到只在一台电脑上可以使用该系统(通过注册码),如果系统安装在其它电脑上,因为电脑的物理地址已经改变,所以原来所使用的注册码将失效,这样可以防止了系统的非法拷贝。

 

开发原理

其中这个原理比较简单,首先我们是根据用户提供的物理地址制作出一个license文件(或者是注册码,这个注册码是根据保护了物理地址的信息,不过最好是要先通过编码),就是通过系统的命令来获得电脑的物理地址,比如说windows系统的“ipconfig /all”命令,这样就可以获得该电脑的物理地址;然后我们根据这个物理地址跟注册码中获得的物理地址进行比较,如果相同的话,就允许使用系统,否则,不允许使用系统。

 

开发代码

首先,让我们先来看看如何获得命令的信息。在java中,有一个Runtime.getRuntime().exec()方法,这个方法可以执行一个系统命令,然后返回命令的相关信息。下面这个类可以获得命令的输出结果:

public class Tools

{

    public static String exec(String command)

    {

        byte buf[];

        //输入流

        InputStream is;

        //错误流

        InputStream es;

        //输出流

        OutputStream os;

        buf = new byte[512];

        is = null;

        es = null;

        os = null;

        String s1;

        //执行命令command,返回结果

        Process p = Runtime.getRuntime().exec(command);

        //获得命令的输入流

        is = p.getInputStream();

        //获得命令的输出流

        os = p.getOutputStream();

        //获得命令的错误流

        es = p.getErrorStream();

        StringBuffer sb = new StringBuffer();

        for(int i = is.read(buf); i != -1; i = is.read(buf))

            sb.append(new String(buf, 0, i));

 

        s1 = sb.toString();

        try

        {

            is.close();

            os.close();

            es.close();

        }

        catch(Exception ex) { }

       

        return s1;

    }

}

在这个类中,我们要获得一个命令的输出结果,比如说一个ipconfig命令,那么像这个就可以获得了:String mac = Tools.exec("ipconfig /all");

这里字符串mac就是返回我们在命令行中输入命令ipconfig /all所看到的结果了。

 

接下来我们就要对这个信息跟注册码里面的信息进行比较了,不过这里有个问题,就是不同的系统获得物理地址的命令是不同的,windows系统是采用ipconfig /all命令,而linuxunix系统是采用netstat –in命令,这里就要对不同的系统进行判断了。在这里,我们采用路径的分隔符来判断,比如说,在windows系统下是采用“/”才分隔目录的,比如:c:/temp/doc,而linuxunix是用“/”来分隔的,比如:/mnt/doc,这样我们就可以判断了。

下面这个方法可以对物理地址进行比较:

private static boolean checkNetAddress(String netAddr, char OSType)

{

    String mac = null;

    if(OSType != '/')

        mac = Tools.exec("ipconfig /all");

    else

        mac = Tools.exec("netstat -in");

    return mac.indexOf(netAddr) >= 0;

}

在这里,参数netAddr是系统的物理地址,它是从注册码中获得的(可能要经过解码等方法),OSType是用来表示系统的类型,用“/”和“/”来分别。

下面这句话:

mac.indexOf(netAddr)

就是判断输入命令获得的结果mac中是否包含有物理地址netAddr,不如有的话,那我们就可以认为系统的注册码正确了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值