zoukankan      html  css  js  c++  java
  • Aptana的破解

    ---工欲善其事、必先利其器

    最近写JS比较多,常常苦恼与没有一个顺手的IDE。Editplus虽然用的熟,不过那个的效率太低而且代码看起来也很不方便,经过一个多月的试用,发现了一款好用的编写JS的IDE--Aptana,一个基于Eclipse的JS开发环境。

    今天先来说一下破解,因为我是用到试用期快满的时候才想起来破解的。如果不破解,在右下角会有一个剩余多少时间的提示,那怎么破解呢。

    关键在\Aptana\Aptana Studio\plugin\com.aptana.ide.core_1.1.7.015414.jar中,只要修改其中的license类,编译并替换后就可以了。


    代码如下:

    package com.aptana.ide.core.licensing;

    import java.math.BigInteger;
    import java.util.Calendar;
    import java.util.TimeZone;
    import java.util.zip.CRC32;

    public final class ClientKey {
        
    private static class Decrypt {

            
    private BigInteger modulus;
            
    private BigInteger exponent;

            
    public String decrypt(String encrypted) {
                
    long crc32Value;
                
    byte bytes[];
                CRC32 crc32;
                
    if (encrypted == null) {
                    encrypted 
    = "";
                } 
    else {
                    encrypted 
    = ClientKey.trimEncryptedLicense(encrypted);
                }
                BigInteger big 
    = new BigInteger(encrypted);
                BigInteger decrypted 
    = big.modPow(exponent, modulus);
                crc32Value 
    = (long) decrypted.intValue() & 0xffffffffL;
                decrypted 
    = decrypted.shiftRight(32);
                bytes 
    = decrypted.toByteArray();
                crc32 
    = new CRC32();
                crc32.update(bytes);
                
    if (crc32Value == crc32.getValue()) {
                    
    return new String(bytes);
                }
                
    return null;
            }

            Decrypt(String exponent, String modulus) {
                
    this.modulus = new BigInteger(modulus);
                
    this.exponent = new BigInteger(exponent);
            }
        }

        
    public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--";
        
    public static final String END_LICENSE_MARKER = "--end-aptana-license--";
        
    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
        
    private static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING";
        
    private static final int PRO = 0;
        
    private static final int TRIAL = 1;
        
    private String email;
        
    private long expiration;
        
    private int type;

        
    private ClientKey(int type, String email, long expiration) {
            
    this.type = type;
            
    this.email = email;
            
    this.expiration = expiration;
        }

        
    public static ClientKey decrypt(String encrypted, String email) {
            String modulus 
    = "115801190261221214754334668902722425936509505416457970789287297728816388753627896293249501578830570324705253515546383166989625001335561947096747210280001245977114030627247212292377290543869343996595819188362915644707269064020812435233012510929338706599216007185654748959001143012936618501934698642942289379979";
            String exponent 
    = "65537";
            
    if (encrypted != null) {
                encrypted 
    = encrypted.trim();
            }
            Decrypt decrypter 
    = new Decrypt(exponent, modulus);
            
    return decrypt(decrypter, encrypted, email);
        }

        
    private static ClientKey decrypt(Decrypt decrypter, String encrypted,
                String email) {
            String value 
    = decrypter.decrypt(encrypted);
            
    if (value == null) {
                
    return new ClientKey(1null0L);
            }
            String values[] 
    = value.split(";");
            
    int type = 1;
            String genedEmail 
    = null;
            
    long expiration = 0L;
            
    if (values.length == 3) {
                
    if ("p".equals(values[0].toLowerCase())) {
                    type 
    = 0;
                }
                genedEmail 
    = values[1];
                
    if (genedEmail != null) {
                    
    if (!genedEmail.equalsIgnoreCase(email)) {
                        genedEmail 
    = "EMAILS_NON_MATCHING";
                    }
                } 
    else {
                    genedEmail 
    = null;
                }
                
    try {
                    expiration 
    = Long.parseLong(values[2]);
                } 
    catch (Exception _ex) {
                    expiration 
    = 0L;
                }
            }
            
    return new ClientKey(type, genedEmail, expiration);
        }

        
    public boolean isCloseToExpiring() {
            
    return false;
        }

        
    public boolean isValid() {
            
    return true;
        }

        
    public boolean isCloseToMatching() {
            
    return false;
        }

        
    public boolean isExpired() {
            
    return false;
        }

        
    public String getEmail() {
           
    //把此处的Email修改为你自己的Email地址
            return "heimazhao@gmail.com";
        }

        
    public Calendar getExpiration() {
            Calendar expirationCal 
    = Calendar.getInstance(GMT);
              
    //把此处的时间修改为授权到期时间
            expirationCal.set(201099);

            
    return expirationCal;
        }

        
    public boolean isTrial() {
            
    return false;
        }

        
    public boolean isPro() {
            
    return true;
        }

        
    public boolean shouldProPluginsRun() {
            
    return true;
        }

        
    public static String trimEncryptedLicense(String encrypted) {
         String newEncrypted 
    = encrypted;
         newEncrypted 
    = newEncrypted.trim();
        newEncrypted 
    = newEncrypted.replaceAll("--begin-aptana-license--""");
         newEncrypted 
    = newEncrypted.replaceAll("--end-aptana-license--""");
         newEncrypted 
    = newEncrypted.replaceAll("/s+""");
        
    return newEncrypted;
    }
    }

    完成后改成名字和原来一样的jar包替换就行了,我是用的版本是com.aptana.ide.core_1.1.7.015414.jar,破解没出现问题。

    今后在总结一些使用上的技巧,希望能够在自己手中发挥Aptana的强大威力。

  • 相关阅读:
    三个Bootstrap免费字体和图标库
    前端实时消息提示的效果-websocket长轮询
    带分页的标签
    VMware-workstation安装
    摄影/肥猫的大头贴
    Smith Numbers(分解质因数)
    C
    B
    Ball
    Property Distribution(DFS)
  • 原文地址:https://www.cnblogs.com/cocowool/p/1293303.html
Copyright © 2011-2022 走看看