Skip to content

Latest commit

 

History

History
386 lines (344 loc) · 8.97 KB

201607281139.txt.md

File metadata and controls

386 lines (344 loc) · 8.97 KB

标题: JEB 2.0.6 52pojie破解方案简评

http://scz.617.cn/misc/201607281139.txt

52pojie上JEB 2.0.6的破解方案没有利用注册机制,修改了多处。好处是不用区分类 型,各种版本都可以照此暴破,全覆盖。看雪上的破解方案利用了注册机,只修改 了4字节整型。两种破解方案都不符合我的美学观点,单就这个目标版本而言,推荐 使用后者。

参看:

维护世界和平 [2016-7-22] http://www.52pojie.cn/thread-518338-1-1.html

currwin(f8left) [2016-07-22] http://bbs.pediy.com/showthread.php?t=211744

此处就52pojie破解方案简评之,主要是给JEB破解初学者看的。我不给这种破解方案 背书,下面只有事实罗列,没有各种画外音评价;但我建议初次接触JEB破解的人照 此暴破一遍练手。

我是个好人,此处请点一万次赞,谢谢。

PS,凡是过往给DEMO版补过代码的人,请静默地飘远,永远有多远,你就飘多远。

Licensing.class


public static final int getExpirationTimestamp () { if ( real_license_ts <= 0 ) { return 0; } /* * 原来是31536000(365天) */ return real_license_ts + 268435455; }

AbstractContext$1.class AbstractContext.class


ThreadUtil.start ( new Runnable() { public void run() { try { for (;;) { Thread.sleep( 180000L );

                int i;

                if ( ( i = AbstractContext.this.getStatus() ) != 0 )
                {
                    Thread.sleep( 120000L );
                    /*
                     * 删掉这一行
                     */
                    AbstractContext.terminate();
                }
            }
            return;
        }
        catch ( InterruptedException localInterruptedException )
        {
        }
    }
}

);

AbstractClientContext.class


/*

  • 去掉这一行。Lx.class负责Controller相关动作,涉及HTTP请求 */ import com.pnfsoftware.jebglobal.Lx;

private void checkLicenseKey () { /* * 去掉这一行。这里有2分钟后自动退出的限制。 */ tM.yK(); ... }

/*

  • 清空这个函数。这是针对floating版的。 / private void startFloatingClient () { if ( ( this.pm.getString( "ControllerInterface" ).isEmpty() ) && ( !setupController() ) ) { logger.info( S.s( 320 ), new Object[0] ); terminate(); } /

    • http://%s:%d/probe
    • 23477/TCP */ Lx localLx = new Lx( net, getControllerInterface(), getControllerPort() );

    this.connector = new nM( this, localLx ); this.connector.setDaemon( true ); this.connector.start(); }


HW.class


/*

  • 与JEBKEY.RSA、JEBKEY.SF、MANIFEST.MF相关,自校验、防窜改 / private static boolean yK ( Class<?> paramClass ) { ... /
    • 修改此处,固定返回true */ return bool; }

private static boolean yK ( Object paramObject, Class<?> paramClass ) { ... /* * 修改此处,固定返回true */ return bool; }

public static boolean yK ( Class<?>[] paramArrayOfClass ) { ... /* * 修改此处,固定返回true */ return bool; }

private static boolean yK ( Object paramObject, Class<?>[] paramArrayOfClass ) { ... /* * 修改此处,固定返回true */ return bool; }

Yh.class


public void run () { try { for (;;) { Yh localYh = this; int i = 0; String str = null; VK localVK;

        if ( ( localVK = localYh.MQ.yK() ) == null )
        {
            if ( Licensing.isInternetRequired() )
            {
                /*
                 * 改成0
                 */
                i   = 2;
                /*
                 * Your license of JEB requires a direct Internet connection
                 */
                ...
            }
        }
        else if ( localVK.Lx() == 1 )
        {
            /*
             * 改成0
             */
            i   = 3;
            /*
             * Your license of JEB is not allowed to run
             */
            ...
        }
        else
        {
            long    l1  = localVK.yK() / 1000L;
            long    l2  = Licensing.getExpirationTimestamp();
            if ( ( l1 > 0L ) && ( l2 > 0L ) && ( l1 > l2 ) )
            {
                /*
                 * 改成0
                 */
                i   = 4;
                /*
                 * Your JEB subscription or trial period has expired
                 */
                ...
            }
        }
        localYh.aG.setStatus( i );
        localYh.aG.notifyListeners( new JebEvent( J.CoreError, str ) );
        if ( ( i == 0 ? 1 : 0 ) == 0 )
        {
            Thread.sleep( 20000L );
            AbstractContext.terminate();
        }
        Thread.sleep( 1800000L );
    }
    return;
}
catch ( InterruptedException localInterruptedException )
{
    AbstractContext.terminate();
}

}

private boolean yK () { int i = 0; String str = null; VK localVK;

if ( ( localVK = this.MQ.yK() ) == null )
{
    if ( Licensing.isInternetRequired() )
    {
        /*
         * 改成0
         */
        i   = 2;
        /*
         * Your license of JEB requires a direct Internet connection
         */
        ...
    }
}
else if ( localVK.Lx() == 1 )
{
    /*
     * 改成0
     */
    i   = 3;
    /*
     * Your license of JEB is not allowed to run
     */
    ...
}
else
{
    long    l1  = localVK.yK() / 1000L;
    long    l2  = Licensing.getExpirationTimestamp();
    if ( ( l1 > 0L ) && ( l2 > 0L ) && ( l1 > l2 ) )
    {
        /*
         * 改成0
         */
        i   = 4;
        /*
         * Your JEB subscription or trial period has expired
         */
        ...
    }
}
if ( i == 0 )
{
    return true;
}
this.aG.setStatus( i );
this.aG.notifyListeners( new JebEvent( J.CoreError, str ) );
return false;

}

vX.class


/*

  • 在检查"License key"。将所有返回false的地方改成返回true。 */ public final boolean yK ( String paramString, int[] paramArrayOfInt ) { ... }

nA.class


/*

  • sleep()以毫秒为单位指定时长,如无异常抛出就调exit(0)结束当前进程。 / public void run () { try { / * 120秒、2分钟 * * 他把1000改成-21528 / Thread.sleep( this.yK * 1000 ); } catch ( InterruptedException localInterruptedException ) { / * 他删掉了return / return; } /
    • 他删掉了exit() */ System.exit( 0 ); }

Ka.class


/*

  • 这是针对floating版的。 */ public void start () throws JebException { super.start();

    /*

    • 把中间这一段全删了 */

    /* yK.info( S.s( 480 ), new Object[0] ); if ( Zw.yK().Lx() ) { yK.info( S.s( 473 ), new Object[0] ); terminate(); }

    String str = getControllerInterface(); int i = getControllerPort();

    Zw.yK().yK( i ); yK( str, i ); */

    super.stop(); }

/*

  • 清空这个函数 */ private void Lx () { int i;

    if ( ( i = ping( true ) ) == -2 ) { yK.info( S.s( 79 ), new Object[] { "[email protected]" } ); return; } if ( i == 2 ) { yK.info( S.s( 80 ), new Object[0] ); } }