dongjun111111 / blog

BLOG
36 stars 5 forks source link

用Java代码制作简单注册码 #47

Open dongjun111111 opened 8 years ago

dongjun111111 commented 8 years ago

用Java代码制作简单注册码

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


import java.net.InetAddress;   
import java.net.NetworkInterface;   
import java.net.UnknownHostException;   

public class testjacoxu {   
    public static void SmsBaseLoadConfig(){   
        String registerStr = config.getValue(“registerCode”);   
        long registerCode = Long.parseLong(extractNumberCharacter(registerStr));   
        if (!register()) {   
            log.error(“======= Register failure, please contact with developer! ========”);   
            log.error(“============ Author: Jacob Xu, Email:jacoxu@msn.com! ============”);   
            long tmpCode = 1987;   
            try {   
                tmpCode = Long.parseLong(getMACAddress(InetAddress.getLocalHost()), 16);   
            } catch (NumberFormatException e) {   
                tmpCode = 1987;   
            } catch (Exception e) {   
                tmpCode = 1987;   
            }   
            log.error(“===Sent the number:”+tmpCode+“ to E-mail===”);   
            Thread.sleep(60000);   
            System.exit(1);   
        }   
    }   
    public static String extractNumberCharacter(String ss){   
        Boolean lastCharTag = true;   
        StringBuffer str = new StringBuffer();   
        char[] ch = ss.toCharArray();   
        for (int i = 0; i < ch.length; i++) {   
            if(isNumber(ch[i])){   
                if(lastCharTag){   
                    str.append(ch[i]);   
                }   
                else{   
                    str.append(ch[i]);   
                    lastCharTag = true;   
                }   
            }   
            else{   
                lastCharTag = false;   
            }   
        }   
        if(str.toString().length() == 0){   
            return null;   
        }   
        return str.toString();   
    }   

    public static final boolean isNumber(char c){   
        return ((c<=’9‘)&&(c>=’0‘))?true:false;   
    }   

    public static String getMACAddress(InetAddress ia)throws Exception{   
        //获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。   
        byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();   

        //下面代码是把mac地址拼装成String   
        StringBuffer sb = new StringBuffer();       
        for(int i=0;i

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

参考

http://jacoxu.com/?p=834