给你的系统增加对物理地址的验证
我们开发出一个系统之后,经常有很多方法来保护我们的系统不受别人非法使用,比如说采用注册码,根据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命令,而linux和unix系统是采用netstat –in命令,这里就要对不同的系统进行判断了。在这里,我们采用路径的分隔符来判断,比如说,在windows系统下是采用“/”才分隔目录的,比如:c:/temp/doc,而linux和unix是用“/”来分隔的,比如:/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,不如有的话,那我们就可以认为系统的注册码正确了。