如何在java代码里添加简易版注册信息

简单注册码一般都基于主机服务器CPU,网卡,及磁盘等信息进行加密转码。本文基于此给出一个简单的示例:

  1. import java.net.InetAddress;   
  2. import java.net.NetworkInterface;   
  3. import java.net.UnknownHostException;   
  4.   
  5. public class testjacoxu {   
  6.     public static void SmsBaseLoadConfig(){   
  7.         String registerStr = config.getValue(“registerCode”);   
  8.         long registerCode = Long.parseLong(extractNumberCharacter(registerStr));   
  9.         if (!register()) {   
  10.             log.error(“======= Register failure, please contact with developer! ========”);   
  11.             log.error(“============ Author: Jacob Xu, Email:jacoxu@msn.com! ============”);   
  12.             long tmpCode = 1987;   
  13.             try {   
  14.                 tmpCode = Long.parseLong(getMACAddress(InetAddress.getLocalHost()), 16);   
  15.             } catch (NumberFormatException e) {   
  16.                 tmpCode = 1987;   
  17.             } catch (Exception e) {   
  18.                 tmpCode = 1987;   
  19.             }   
  20.             log.error(“===Sent the number:”+tmpCode+“ to E-mail===”);   
  21.             Thread.sleep(60000);   
  22.             System.exit(1);   
  23.         }   
  24.     }   
  25.     public static String extractNumberCharacter(String ss){   
  26.         Boolean lastCharTag = true;   
  27.         StringBuffer str = new StringBuffer();   
  28.         char[] ch = ss.toCharArray();   
  29.         for (int i = 0; i < ch.length; i++) {   
  30.             if(isNumber(ch[i])){   
  31.                 if(lastCharTag){   
  32.                     str.append(ch[i]);   
  33.                 }   
  34.                 else{   
  35.                     str.append(ch[i]);   
  36.                     lastCharTag = true;   
  37.                 }   
  38.             }   
  39.             else{   
  40.                 lastCharTag = false;   
  41.             }   
  42.         }   
  43.         if(str.toString().length() == 0){   
  44.             return null;   
  45.         }   
  46.         return str.toString();   
  47.     }   
  48.        
  49.     public static final boolean isNumber(char c){   
  50.         return ((c<=’9‘)&&(c>=’0‘))?true:false;   
  51.     }   
  52.        
  53.     public static String getMACAddress(InetAddress ia)throws Exception{   
  54.         //获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。   
  55.         byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();   
  56.            
  57.         //下面代码是把mac地址拼装成String   
  58.         StringBuffer sb = new StringBuffer();       
  59.         for(int i=0;i<mac.length;i++){   
  60. //            if(i!=0){   
  61. //                sb.append(“-”);   
  62. //            }   
  63.             //mac[i] & 0xFF 是为了把byte转化为正整数   
  64.             String s = Integer.toHexString(mac[i] & 0xFF);   
  65.             sb.append(s.length()==1?0+s:s);   
  66.         }   
  67.         //把字符串所有小写字母改为大写成为正规的mac地址并返回   
  68.         return sb.toString().toUpperCase();   
  69.     }   
  70.        
  71.     private static Boolean register(){   
  72.         try {   
  73.             //get ip object of localhost   
  74.             InetAddress ia = InetAddress.getLocalHost();   
  75.             long tmpCode = 19870428;   
  76.             try {   
  77.                 tmpCode = (Long.parseLong(GetMacAddress.getMACAddress(ia), 16)+1987)/428;   
  78.             } catch (NumberFormatException e) {   
  79.                 tmpCode = 19870428;   
  80.             } catch (Exception e) {   
  81.                 tmpCode = 19870428;   
  82.             }   
  83.             if (tmpCode==registerCode) {   
  84.                 return true;                   
  85.             }else {   
  86.                 return false;   
  87.             }   
  88.         } catch (UnknownHostException e) {   
  89.             e.printStackTrace();   
  90.         }   
  91.         return false;   
  92.     }   
  93. }  

文本基本想法就是获取主机IP,转成10进制long型数值,然后进行简单运算(数值+1987)/428。然后与过滤掉字符的注册码进行直接匹配,若匹配成功则注册成功,如匹配失败,则留下作者邮箱,并退出程序。,当然这个计算非常简单也很容易破解,一个好的转码应该是无法直接逆转的。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>