本帖最后由 Tristan_Liu 于 2009-07-27 14:20:31 编辑

解决方案 »

  1.   


        public static final String getLicenseBarOfUser()
        {
            JVM INSTR new #104 <Class StringBuffer>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            StringBuffer();
            StringBuffer stringbuffer;
            stringbuffer;
            double d = Double.parseDouble(getMaxUser());
            double d1 = Double.parseDouble(Integer.toString(UserCache.getActiveList().size()));
            if(d > 0.0D)
            {
                d1 = d1 != 0.0D ? d1 : 1.0D;
                double d2 = 0.0D;
                try
                {
                    d2 = UtilNumber.fixPoint(d1 / d, 4);
                }
                catch(Exception _ex) { }
                stringbuffer.append("<table  border=0 cellspacing=0 cellpadding=0><tr><td></td><td height=16 width=").append(d2 * 100D).append(" background=../_img/process_2.gif></td><td width=").append((1.0D - d2) * 100D).append(" background=../s_img/process_1.gif></td><td>").append(_$11).append("/").append(UserCache.getActiveList().size()).append(",\u7EA6\u5360\u7528").append(UtilNumber.fixPoint(d2 * 100D, 2)).append("%</td></tr></table>");
            }
            return stringbuffer.toString();
        }    public static final String getLicenseBarOfWF()
        {
            JVM INSTR new #104 <Class StringBuffer>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            StringBuffer();
            StringBuffer stringbuffer;
            stringbuffer;
            double d = Double.parseDouble(getBusinessModelNumber());
            double d1 = Double.parseDouble(Integer.toString(WorkFlowCache.getList().size()));
            if(d > 0.0D)
            {
                d1 = d1 != 0.0D ? d1 : 1.0D;
                double d2 = 0.0D;
                try
                {
                    d2 = UtilNumber.fixPoint(d1 / d, 4);
                }
                catch(Exception _ex) { }
                stringbuffer.append("<table  border=0 cellspacing=0 cellpadding=0><tr><td></td><td height=16 width=").append(d2 * 100D).append(" background=../s_img/process_2.gif></td><td width=").append((1.0D - d2) * 100D).append(" background=../s_img/process_1.gif></td><td>").append(Integer.parseInt(getBusinessModelNumber())).append("/").append(WorkFlowCache.getList().size()).append(",\u7EA6\u5360\u7528").append(UtilNumber.fixPoint(d2 * 100D, 2)).append("%</td></tr></table>");
            }
            return stringbuffer.toString();
        }    public static final String getLicenseVersion()
        {
            return _$17;
        }    public static final String getMaxUser()
        {
            return _$11;
        }    public static final String getOrganizationCode()
        {
            return _$14;
        }    public static final String getOrganizationNumber()
        {
            return _$15;
        }    public static final String getPhysicalAddress()
        {
            if(_$21 == null)
                _$21 = "";
            return _$21;
        }    public static final String getSeries()
        {
            return _$13;
        }    public static final String getSuiteSecurity()
        {
            return _$19;
        }    public static final String getSystemName()
        {
            return _$7;
        }    public static final String getVersion()
        {
            return _$8;
        }    public static final String getVersionType()
        {
            return _$9;
        }    public static final String isFree()
        {
            return _$10;
        }    public static final boolean isFullSearchCMS()
        {
            return _$25 != null && _$25.toLowerCase().equals("on");
        }    public static final boolean isFullSearchEMail()
        {
            return _$26 != null && _$26.toLowerCase().equals("on");
        }    public static final boolean isFullSearchFile()
        {
            return _$23 != null && _$23.toLowerCase().equals("on");
        }    public static final boolean isFullSearchForm()
        {
            return _$24 != null && _$24.toLowerCase().equals("on");
        }    public static final boolean isSuitePlatform()
        {
            return _$27 != null && _$27.toLowerCase().equals("on");
        }    private static final String _$1 = "\u5317\u4EAC\u708E\u9EC4\u76C8\u52A8\u79D1\u6280\u53D1\u5C55\u6709\u9650\u8D23\u4EFB\u516C\u53F8";
        private static final String _$2 = "Actionsoft Co.,Ltd";
        private static final String _$3 = "\u708E\u9EC4\u76C8\u52A8";
        private static final String _$4 = "Actionsoft";
        private static final String _$5 = "CopyRight(C)2001-2006";
        private static String _$6;
        private static String _$7;
        private static String _$8;
        private static String _$9;
        private static String _$10;
        private static String _$11;
        private static String _$12;
        private static String _$13;
        private static String _$14;
        private static String _$15;
        private static String _$16;
        private static String _$17;
        private static final String _$18;
        private static String _$19;
        private static String _$20;
        private static String _$21;
        private static String _$22;
        private static String _$23;
        private static String _$24;
        private static String _$25;
        private static String _$26;
        private static String _$27;    static 
        {
            _$6 = "";
            _$7 = "";
            _$8 = "";
            _$9 = "";
            _$10 = "";
            _$11 = "";
            _$12 = "";
            _$13 = "";
            _$14 = "";
            _$15 = "";
            _$16 = "";
            _$17 = "";
            JVM INSTR new #103 <Class String>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            JVM INSTR new #103 <Class String>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            "fk9+WX5BQ1RJT05TT0ZUfkB+";
            String();
            getBytes();
            Base64.decode();
            String();
            _$18;
            _$19 = "";
            _$20 = "";
            _$21 = "";
            _$22 = "";
            _$23 = "";
            _$24 = "";
            _$25 = "";
            _$26 = "";
            _$27 = "";
            Object obj = null;
            JVM INSTR new #97  <Class FileInputStream>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            "license.dat";
            FileInputStream();
            JVM INSTR dup ;
            JVM INSTR swap ;
            FileInputStream fileinputstream;
            fileinputstream;
            available();
            JVM INSTR dup ;
            JVM INSTR swap ;
            int i;
            i;
            new byte[];
            byte abyte0[];
            abyte0;
            fileinputstream.read(abyte0);
            fileinputstream.close();
            JVM INSTR new #103 <Class String>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            PBE.decrypt(Base64.decode(abyte0), "JVM INSTR swap");
            String();
            String s;
            s;
            JVM INSTR new #93  <Class UtilString>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            JVM INSTR new #103 <Class String>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            PBE.decrypt(Base64.decode(s.getBytes()), _$18);
            String();
            UtilString();
            JVM INSTR dup ;
            JVM INSTR swap ;
            UtilString utilstring;
            utilstring;
            "_licenseVersion[";
            "]licenseVersion_";
            matchValue();
            _$10();
            _$11(utilstring.matchValue("_companyName[", "]companyName_"));
            _$17(utilstring.matchValue("_invalidDate[", "]invalidDate_"));
            _$15(utilstring.matchValue("_isFree[", "]isFree_"));
            _$16(utilstring.matchValue("_maxUser[", "]maxUser_"));
            _$19(utilstring.matchValue("_organizationCode[", "]organizationCode_"));
            _$20(utilstring.matchValue("_organizationNumber[", "]organizationNumber_"));
            _$18(utilstring.matchValue("_series[", "]series_"));
            _$12(utilstring.matchValue("_systemName[", "]systemName_"));
            _$13(utilstring.matchValue("_version[", "]version_"));
            _$14(utilstring.matchValue("_versionType[", "]versionType_"));
            _$9(utilstring.matchValue("_businessModelNumber[", "]businessModelNumber_"));
            _$21(utilstring.matchValue("_suiteSecurity[", "]suiteSecurity_"));
            _$8(utilstring.matchValue("_ASP[", "]ASP_"));
            _$7(utilstring.matchValue("_PhysicalAddress[", "]PhysicalAddress_"));
            _$6(utilstring.matchValue("_CLUSTER[", "]CLUSTER_"));
            _$1(utilstring.matchValue("_FULLSEARCH_FILE[", "]FULLSEARCH_FILE_"));
            _$3(utilstring.matchValue("_FULLSEARCH_FORM[", "]FULLSEARCH_FORM_"));
            _$5(utilstring.matchValue("_FULLSEARCH_EMAIL[", "]FULLSEARCH_EMAIL_"));
            _$4(utilstring.matchValue("_FULLSEARCH_CMS[", "]FULLSEARCH_CMS_"));
            _$2(utilstring.matchValue("_SUITE_PLATFORM[", "]SUITE_PLATFORM_"));
            break MISSING_BLOCK_LABEL_570;
            Exception exception;
            exception;
            System.out.println("\u8BB8\u53EF\u8BC1\u9519\u8BEF\uFF0C\u8BF7\u4E0E\u8F6F\u4EF6\u4F9B\u5E94\u5546\u8054\u7CFB.\n");
            System.out;
            JVM INSTR new #104 <Class StringBuffer>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            "\u5DE5\u4F5C\u76EE\u5F55\uFF1A";
            StringBuffer();
            System.getProperties().getProperty("user.dir");
            append();
            toString();
            println();
            System.out;
            JVM INSTR new #104 <Class StringBuffer>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            "JVM\u76EE\u5F55\uFF1A";
            StringBuffer();
            System.getProperties().getProperty("java.home");
            append();
            toString();
            println();
            System.out.println("\u9519\u8BEF\u4FE1\u606F\uFF1A");
            exception.printStackTrace(System.err);
            JVM INSTR new #91  <Class ShellCommand>;
            JVM INSTR dup ;
            JVM INSTR swap ;
            ShellCommand();
            "licenseManagement.bat";
            execute();
            JVM INSTR pop ;
            System.exit(0);
        }
    }
      

  2.   

    import java.io.FileInputStream;
    import java.security.interfaces.RSAPublicKey;
    import java.util.Properties;/**
     *  * 限定参数# 1:mac地址 2:客户端数量 3:使用分馆 4:起始日期 5:终止日期 免费使用日期默认为60天 
     * #授权客户端的MAC,试用版不判断
     *  0:LICENSE_TYPE=0 1 2   #0表示默认license 1表示试用版 2 表示正式版
     * 1:SIPII_USER_HOST_MAC=00-11-25-2D-31-A2
     *  2:CLIENT_USER_COUNT=2
     *  3:USER_TITLE_NAME=东莞市图书馆
     *  4:STARTDATE=20080511
     *  5:ENDDATE=20090511
     * @author toofu
     *
     */
    public class LicenseInfo {
        /**
         * 授权类型 
         */
        public String LICENSE_TYPE="";
        /**
         * 机器网卡地址
         */
        public String SIPII_USER_HOST_MAC="";
        /**
         * 客户端数量
         */
        public String CLIENT_USER_COUNT="";
        /**
         * 单位名称 如东莞市图书馆
         */
        public String USER_TITLE_NAME="";
        /**
         * 启用时间
         */
        public String STARTDATE="";
        /**
         * 终止时间
         */
        public String ENDDATE="";
        /**
         * 本机器的机器信息属性
         * @return
         */
        public Properties LICENSE_INFO_PROPERTIES=getInfoProperties();
        /**
         * 
         */
        public String NO_LICENSE_MSG="";
        /**
         * 初始化构造函数
         * 通过license.dat读取内容并进行解密
         */
        LicenseInfo(){
    String config=RSAUtil.loadLicenseConfig();
    if(config==null||config.equals("")){
    this.NO_LICENSE_MSG="您没有授权,请联系广州图创计算机软件开发有限公司获取授权。您的授权编号为["+DESUtil.myDESEncode(FindMac.getMacAddress())+"],请获取正式授权时提供此编号!";
    return ;//没加载成功,相当于没授权
    }
         String[] configArr=config.split("\n");//根据回车分割
         if(configArr.length==6){
         this.LICENSE_TYPE=configArr[0];
         this.SIPII_USER_HOST_MAC=configArr[1];
         this.CLIENT_USER_COUNT=configArr[2];
         this.USER_TITLE_NAME=configArr[3];
         this.STARTDATE=configArr[4];
         this.ENDDATE=configArr[5];
         }else{
         //相当于格式不对,都没有值
         }
        }
        /**
         * 获取本机器的机器信息属性
         * @return
         */
        public Properties getInfoProperties(){
                Properties p=new Properties();
                p.put("LICENSE_TYPE",LICENSE_TYPE);
                p.put("SIPII_USER_HOST_MAC",SIPII_USER_HOST_MAC);
                p.put("CLIENT_USER_COUNT",CLIENT_USER_COUNT);
                p.put("USER_TITLE_NAME",USER_TITLE_NAME);
                p.put("STARTDATE",STARTDATE);
                p.put("ENDDATE",ENDDATE);
                return p;
        }
        /**
         * 测试Main类
         * @param args
         */
        public static void main(String[] args) {       /*  System.out.println("获取本机器的操作系统类型:"+p.LOCALHOST_OS_TYPE);
            System.out.println("本机器最后一个网卡的MAC:"+LOCALHOST_MAC);
            System.out.println("本机器最后一个网卡的IP:"+LOCALHOST_IP);
            System.out.println("本机器的机器名:"+LOCALHOST_NAME);
            System.out.println("本机器的机器名:"+LOCALHOST_INFO_PROPERTIES);*/
         LicenseInfo li=new LicenseInfo();//初始化,读取license
         System.out.println(li.CLIENT_USER_COUNT);
        
        }
    }
      

  3.   

    RSAPublicKey
    加密的.基本上你反编译代码,也是无法破译的.把那块代码给删除了.
      

  4.   

    从类似这样的语句(JVM INSTR dup ;)来看,这部分源代码应该是经过处理,可能很难反编译了。
      

  5.   

    反编译后看明白没多大难度,但 RSA 加密它是不可能简单地逆向推测的。一般是想办法把那块“瘤”摘掉后再编译替换掉以前的 jar 包,另外提醒一点,以后不算有此兴趣也不要把它原样贴出来,比如“Actionsoft”字样不应该出来。这是很严重的问题,人家会人肉搜索的。
      

  6.   

    不懂;找个dongdong再反编译呵呵呵