标题: 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] ); } }