标题: JEB 2.0.6 52pojie破解方案简评 https://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[] { "software@pnfsoftware.com" } ); return; } if ( i == 2 ) { yK.info( S.s( 80 ), new Object[0] ); } } --------------------------------------------------------------------------